Puede habilitar un cliente de servicios web JAX-WS (API de Java™ para servicios web basados en XML) para recuperar los valores de las cabeceras de transporte. Para una solicitud que utiliza HTTP, las cabeceras de transporte se recuperan de las cabeceras HTTP que se encuentran en el mensaje de respuesta HTTP. Para una solicitud que utiliza JMS (Java), las cabeceras de transporte se recuperan de las propiedades del mensaje JMS que se encuentran en el mensaje de respuesta JMS.
Antes de empezar
Necesita un cliente de servicios web JAX-WS que puede habilitar para recuperar cabeceras de transportes.
La recuperación de cabeceras de transporte sólo está soportada por los clientes de servicios web, para los transportes HTTP y JMS. El cliente de servicios web debe llamar directamente a las API JAX-WS y no a través de capas intermediarias, como una función de tipo pasarela.
Acerca de esta tarea
Cuando se utiliza el modelo de programación JAX-WS, el cliente debe establecer una propiedad en el objeto RequestContext del BindingProvider para recuperar valores de las cabeceras de transporte. Una vez establecida la propiedad, los valores se leen desde las respuestas de las invocaciones de método siguientes, comparándolos con dicho objeto BindingProvider hasta que la propiedad asociada se establece en null o se descarta el objeto BindingProvider.
Para recuperar valores de las cabeceras de transporte de las respuestas de entrada, modifique el código de cliente de la siguiente manera:
Procedimiento
- Cree un objeto java.util.Map para mantener las cabeceras de transporte recuperadas del mensaje de respuesta. Para recuperar todas las cabeceras de transporte de un mensaje de respuesta, deje vacía esta correlación.
- (Opcional) Añada una entrada a la correlación para cada cabecera que desee recuperar del mensaje de respuesta de entrada.
- Establezca la clave de la entrada de correlación en una serie que coincida exactamente con el identificador de la cabecera de transporte. Puede especificar el identificador de la cabecera como un nombre de cabecera reservado, por ejemplo, como una cookie en el caso de HTTP, o puede ser un identificador de cabecera definido por el usuario como, por ejemplo, MyTransportHeader.
Determinados identificadores de cabecera se procesan de una forma única, aunque no se realizan más comprobaciones para confirmar el valor de identificador de cabecera. Para obtener más información sobre los identificadores de cabecera HTTP que tienen una consideración única, consulta los métodos recomendados de las propiedades de la cabecera de transporte. En la clase com.ibm.websphere.webservices.Constants se pueden encontrar constantes de series de identificadores de cabecera comunes, como HTTP_HEADER_SET_COOKIE. El valor de la entrada de correlación se ignora y no es necesario establecerlo. Una correlación vacía, por ejemplo, una distinta de nulo, que no contiene claves hace que se recuperen todas las cabeceras de transporte de la respuesta.
- Establezca el objeto de correlación en el RequestContext del BindingProvider utilizando la propiedad com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES. Cuando se establece la correlación, la propiedad RESPONSE_TRANSPORT_PROPERTIES se utiliza en invocaciones subsiguientes para recuperar las cabeceras de las respuestas. Si establece la propiedad en null, no se recuperan cabeceras de la respuesta. Para obtener más información acerca de estas propiedades, consulte la documentación sobre las propiedades de cabecera de transporte.
- Invoque llamadas al método remoto para la instancia BindingProvider. Los valores de las cabeceras de transporte especificadas se recuperan del mensaje de respuesta y se colocan en la correlación.
Si la propiedad no se establece correctamente, es posible que se produzcan errores de uso de la API que generen un error WebServiceException. Deben cumplirse los siguientes requisitos o el proceso fallará:
- El valor de la propiedad Constants.RESPONSE_TRANSPORT_PROPERTIES establecido en la instancia de RequestContext del BindingProvider debe ser null o una instancia de java.util.Map.
- Todas las claves de correlación deben ser del tipo de datos java.lang.String, y las claves no pueden ser nulas.
- La correlación puede estar vacía, lo que significa que no contiene ninguna entrada. En este caso, se recuperarán todas las cabeceras de transporte del mensaje de respuesta.
Resultados
Tiene un servicio web JAX-WS que puede recibir cabeceras de transporte de mensajes de respuesta entrantes.
Ejemplo
A continuación, se muestra un breve ejemplo de programación que muestra cómo una aplicación de cliente de servicios web JAX-WS recupera las cabeceras de transporte de respuesta:
public class MyApplicationClass {
// Inyectar una instancia del tipo de puerto del servicio.
@WebServiceRef(EchoService.class)
private EchoPortType port;
// Este método invocará la operación de servicio web y recuperará cabeceras de transporte en la solicitud.
public void invokeService() {
// Configurar la correlación para recuperar nuestras cabeceras de respuesta.
Map<String, Object> responseHeaders = new HashMap<String, Object>;
responseHeaders.put(“MyHeader1”, null);
responseHeaders.put(“MyHeader2”, null);
responseHeaders.put(“MyHeader3”, null);
// Defina la correlación como una propiedad en RequestContext.
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES, responseHeaders);
// Invoque la operación de servicios web.
String result = port.echoString(“Hello, world!”);
// Ahora, recuperar nuestras cabeceras de respuesta.
Object header1 = responseHeaders.get(“MyHeader1”);
Object header2 = responseHeaders.get(“MyHeader2”);
Object header3 = responseHeaders.get(“MyHeader3”);
}
}