Prüfen, ob sich das Verhalten bei einer definierten SOAP-Aktion in abgehenden Nachrichten geändert hat

In WebSphere Application Server Version 8 hat sich das Verhalten in Bezug auf die Bestimmung der Einstellung für SOAP-Aktionen in abgehenden Nachrichten für JAX-WS-Dispatch-Clients geändert. Wenn in Releases vor Version 8 keine SOAP-Aktion von der Dispatch-Clientanwendung bereitgestellt wird, sendet die JAX-WS-Laufzeitumgebung nicht die richtige SOAP-Aktion in der abgehenden Nachricht. Stattdessen setzt sie die Aktion auf anonym. In Version 8 ist es nun so, dass die JAX-WS-Laufzeitumgebung in dem Fall, dass die Clientanwendung keine SOAP-Aktion angibt, die abgehende Nachricht parst, um die aufgerufene Operation zu bestimmen, und diese dann verwendet, um den entsprechenden Wert für die SOAP-Aktion zu bestimmen.

Diese Regel markiert Aufrufe zum Erstellen eines Dispatch-Client in den folgenden Fällen:

Bewährte Codierungsverfahren für WebSphere Application Server Traditional und Liberty : Die Clientanwendung stellt eine SOAP-Aktion mit JAX-WS bereit. javax.xml.ws.BindingProvider Eigenschaften SOAPACTION_USE_PROPERTY und die SOAPACTION_URI_PROPERTY . Die bereitgestellte SOAP-Aktion wird verwendet und das Parsing der abgehenden Nachricht findet nicht statt, unabhängig von der Einstellung der DISPATCH_CLIENT_OUTBOUND_RESOLUTION angeben.

Das folgende Beispiel zeigt die bewährte Programmierpraxis mit gesetzter SOAP-Aktion im Anforderungskontext. Wenn das SOAPACTION_URI_PROPERTY ist nicht festgelegt oder wenn SOAPACTION_USE_PROPERTY ist festgelegt auf false , den Aufruf an die createDispatch() wird von dieser Regel markiert.

Beispiel:

//Dispatch-Instanz erstellen
< span class= "indent2"> < /span> Zuteilung < SOAPMessage> dispatch =
service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);

// Dispatch als BindingProvider verwenden
BindingProvider bp = (BindingProvider) dispatch;

// RequestContext für das Senden des HTTP-Headers SOAPAction konfigurieren
Map < Zeichenfolge, Objekt > rc = bp.getRequestContext();
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, "hello");

Da dieses Parsing kostenintensiv sein kann, kann in WebSphere Application Server Traditional eine Eigenschaft auf Systemebene (zum dauerhaften Inaktivieren des Parsings) oder im JAX-WS-Anforderungsnachrichtenkontext (zum Inaktivieren des Parsings auf Nachrichtenbasis) gesetzt werden. Wenn das Parsing inaktiviert ist, wird die SOAP-Aktion in der abgehenden Nachricht weiterhin auf anonym gesetzt. Die Inaktivierungseigenschaft ist als Konstante definiert org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION mit einem Zeichenfolgewert von jaxws.dispatch.outbound.operation.resolution.enable . Wenn die Eigenschaft nicht festgelegt ist, wird sie als Zeichenfolge interpretiert. true , die Auflösung der abgehenden Operation aktivieren. Eigenschaft festlegen auf false inaktiviert die Auflösung abgehender Operationen.

Weitere Informationen finden Sie in den folgenden Dokumenten: