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:

Eine bewährte Programmierpraxis für WebSphere Application Server Traditional und Liberty ist, dass die Clientanwendungen eine SOAP-Aktion mit den javax.xml.ws.BindingProvider-JAX-WS-Eigenschaften SOAPACTION_USE_PROPERTY und SOAPACTION_URI_PROPERTY angibt. Die bereitgestellte SOAP-Aktion wird verwendet, und die abgehende Nachricht wird unabhängig von der Einstellung der Eigenschaft DISPATCH_CLIENT_OUTBOUND_RESOLUTION nicht geparst.

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

Beispiel:

//Dispatch-Instanz erstellen
Dispatch<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<String, Object> 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 Eigenschaft für die Inaktivierung wird als Konstante org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION mit dem Zeichenfolgewert jaxws.dispatch.outbound.operation.resolution.enable definiert. Wenn die Eigenschaft nicht gesetzt wird, wird sie als Zeichenfolge true interpretiert, woraufhin die Auflösung der abgehenden Operation aktiviert wird. Wird die Eigenschaft auf false gesetzt, wird die Auflösung der abgehenden Operation inaktiviert.

Weitere Informationen finden Sie in den folgenden Dokumenten: