Buscar un cambio de comportamiento en la acción SOAP establecida en los mensajes de salida

El comportamiento ha cambiado en WebSphere Application Server V8 en cómo se determina el valor de la acción SOAP en los mensajes de salida para los clientes de asignación JAX-WS. En los releases anteriores a V8, si una acción SOAP no está proporcionada por la aplicación de cliente de asignación, el entorno de ejecución JAX-WS no envía la acción SOAP correcta en el mensaje de salida. En su lugar, establece la acción en una operación anónima. Como novedad en V8, si la acción SOAP no está proporcionada por la aplicación de cliente, el entorno de ejecución JAX-WS analizará el mensaje de salida para determinar la operación que se está invocando y la utilizará para determinar el valor adecuado de la acción SOAP.

Esta regla marca las llamadas para crear un cliente de asignación cuando:

Las prácticas recomendadas de codificación para WebSphere Application Server tradicional y Liberty son que la aplicación cliente proporcione una acción de SOAP con las propiedades de javax.xml.ws.BindingProvider de JAX-WS SOAPACTION_USE_PROPERTY y SOAPACTION_URI_PROPERTY. Se utilizará la acción SOAP proporcionada y el análisis del mensaje de salida no se producirá independientemente del valor de la propiedad DISPATCH_CLIENT_OUTBOUND_RESOLUTION.

Este ejemplo muestra los procedimientos recomendados de codificación con la acción SOAP establecida en el contexto de solicitud. Si SOAPACTION_URI_PROPERTY no se establece o si SOAPACTION_USE_PROPERTY se establece en false, esta regla marcará la llamada al método createDispatch().

Ejemplo:

//Crear una instancia de asignación
Dispatch<SOAPMessage> dispatch =
service.createDispatch(portName, SOAPMessage.class, Service.Mode.MESSAGE);

// Utilizar la asignación como BindingProvider
BindingProvider bp = (BindingProvider) dispatch;

// Configurar RequestContext para enviar la cabecera HTTP de SOAPAction
Map<String, Object> rc = bp.getRequestContext();
rc.put(BindingProvider.SOAPACTION_USE_PROPERTY, Boolean.TRUE);
rc.put(BindingProvider.SOAPACTION_URI_PROPERTY, "hello");

Como este análisis puede ser costoso, puede establecerse una propiedad en WebSphere Application Server tradicional a nivel de sistema (para inhabilitar siempre el análisis) o en el contexto de mensaje de solicitud JAX-WS (para inhabilitar el análisis según el mensaje). Si se inhabilita el análisis, la acción SOAP en el mensaje de salida continuará establecida en una operación anónima como antes. La propiedad de inhabilitación se ha definido como una constante org.apache.axis2.jaxws.Constants.DISPATCH_CLIENT_OUTBOUND_RESOLUTION con un valor de serie jaxws.dispatch.outbound.operation.resolution.enable. Si no se establece la propiedad, se interpreta como la serie true, que habilita la resolución de la operación de salida. Si se establece la propiedad en false, se inhabilitará la resolución de la operación de salida.

Para obtener información adicional, consulte: