Wie kann ich festlegen, das der WS-Adressierung, version mit einem JAX-WS-client?
Generiert ich eine SOAP 1.2 web service Clients mit wsimport (JDK 1.7). Ich muss es explizit die Verwendung von WS-Addressing 2004/08 und nicht 2005/08.
Die nächsten, die ich finden konnte für instanciating der Kunde war
import MyService.*;
import javax.xml.ws.BindingProvider;
public class test {
public static void main(String[] args) {
MyService service = new MyService();
IMyService proxy = service.getMyService(new javax.xml.ws.soap.AddressingFeature(true, true) );
((BindingProvider)proxy).getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "https://192.168.0.5:1234/services/MyService");
proxy.Ping("Foo");
}
}
Wichtige bit wird
MyService service = new MyService();
IMyService proxy = service.getMyService(new javax.xml.ws.soap.AddressingFeature(true, true));
Leider, diese Ergebnisse in 2005/08-Adressierung. Nicht gemacht, ein argument zu getMyService() dazu führt, dass nicht durch die Verwendung von WS-Addressing.
Nur Beispiele, die ich finden kann Google zwingen, 2004/08-Adressierung verwenden, Axis2 (der ganze Grund, warum ich möchte, JAX-WS ist, sich zu bewegen Weg von Axis2)
Den Unterschied auf der Leitung ist
(2004/08)
<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing">
<s:Header>
<a:Action s:mustUnderstand="1">http://www.example.com/schemas/service/myservice/IMyService/Ping</a:Action>
<a:MessageID>urn:uuid:87727401-b1a0-4667-9ef0-c64e58800ff6</a:MessageID>
<a:ReplyTo>
<a:Address>http://schemas.xmlsoap.org/ws/2004/08/addressing/role/anonymous</a:Address>
</a:ReplyTo>
<a:To s:mustUnderstand="1">https://192.168.0.5:1234/services/MyService</a:To>
</s:Header>
<s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<Ping xmlns="http://www.example.com/schemas/service/myservice">
<Message>Foo</Message>
</Ping>
</s:Body>
</s:Envelope>
(2005/08)
<S:Envelope xmlns:S="http://www.w3.org/2003/05/soap-envelope">
<S:Header>
<To xmlns="http://www.w3.org/2005/08/addressing">https://192.168.0.5:1234/services/MyService</To>
<Action xmlns="http://www.w3.org/2005/08/addressing" xmlns:S="http://www.w3.org/2003/05/soap-envelope" S:mustUnderstand="true">http://www.example.com/schemas/service/myservice/IMyService/Ping</Action>
<ReplyTo xmlns="http://www.w3.org/2005/08/addressing">
<Address>http://www.w3.org/2005/08/addressing/anonymous</Address>
</ReplyTo>
<MessageID xmlns="http://www.w3.org/2005/08/addressing">uuid:87727401-b1a0-4667-9ef0-c64e58800ff6</MessageID>
</S:Header>
<S:Body>
<Ping xmlns="http://www.example.com/schemas/service/myservice">
<Message>Foo</Message>
</Ping>
</S:Body>
</S:Envelope>
Jemand irgendwelche Ideen hier?
- Ich Frage mich,... ... sollten Sie sich die Mühe machen mit dabei auf der Anwendungsebene oder würde es mehr Sinn machen, es auf einem ESB (z.B. DataPower) - Ebene und lassen Sie Ihrer Anwendung davon ausgehen, dass die Daten, die er empfängt, sauber (nur Arbeit abnehmen).
Du musst angemeldet sein, um einen Kommentar abzugeben.
Fand ich einen Weg, dies zu tun, aber ich bin nicht davon überzeugt, dass es die beste Lösung.
Es beinhaltet das erstellen eines benutzerdefinierten SOAPHandler und manuell die Injektion der Addressing-Header und entfernen Sie die HTTP-header soapaction
Hier ist die aktualisierte test-Klasse
Es ist ein Nebeneffekt, ich habe noch nicht herausgefunden, wie zu lösen, resultiert dies in einer <?xml version="1.0"?> xml-Deklaration, die in Konflikt mit dem HTTP-Content-type. Ich poste ein update, wenn ich habe, dass herausgefunden.
Benutzte ich die MemberSubmissionAddressingFeature von jaxws-rt
IMyService proxy = service.getMyService(new com.sun.xml.ws.developer.MemberSubmissionAddressingFeature(true, true) );
dies ist der pom-Datei Abhängigkeit für maven http://mvnrepository.com/artifact/com.sun.xml.ws/jaxws-rt/2.2.7