Envío de cabeceras de transporte con JAX-WS
Puede habilitar un cliente de servicios web JAX-WS (API de Java™ para servicios web XML) existente para enviar información definida por la aplicación junto con las solicitudes de servicios web utilizando las cabeceras de transporte. Asimismo, puede habilitar un punto final de servicios web JAX-WS para enviar información definida por la aplicación junto con el mensaje de respuesta de servicios web utilizando las cabeceras de transporte.
Antes de empezar
Es necesario disponer de un cliente de servicios web JAX-WS que pueda habilitar para enviar cabeceras de transporte.
El envío de cabeceras de transporte está soportado en los clientes de servicios web JAX-WS y 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 de BindingProvider para enviar valores en las cabeceras de transporte con el mensaje de solicitud de servicios web. Después de establecer la propiedad, los valores se definen en todas las solicitudes de invocaciones a métodos remotos siguientes sobre el objeto BindingProvider hasta que la propiedad asociada se establece en null o el objeto BindingProvider se descarta.
Para enviar valores en las cabeceras de transporte en las solicitudes de salida desde una aplicación de cliente de servicios web JAX-WS, modifique el código de cliente de esta forma:
Procedimiento
Resultados
Dispone de un cliente de servicios web JAX-WS que se ha configurado para enviar cabeceras de transporte en los mensajes de solicitud de servicios web.
Ejemplo
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 enviará cabeceras de transporte en la solicitud.
public void invokeService() {
// Configure la correlación que contendrá las cabeceras de solicitud.
Map<String, Object> requestHeaders = new HashMap<String, Object>();
requestHeaders.put(“MyHeader1”, “This is a string value”);
requestHeaders.put(“MyHeader2”, new Integer(33));
requestHeaders.put(“MyHeader3”, new Boolean(true));
// Defina la correlación como una propiedad en RequestContext.
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(com.ibm.websphere.webservices.Constants.REQUEST_TRANSPORT_PROPERTIES, requestHeaders);
// Invoque la operación de servicios web.
String result = port.echoString(“Hello, world!”);
}
}
Envío de cabeceras de transporte de respuesta desde un punto final JAX-WS
Antes de empezar
El envío de cabeceras de transporte de respuesta desde un punto final JAX-WS es parecido al envío de cabeceras de transporte de solicitud desde un cliente JAX-WS. Está soportado para los transportes HTTP y JMS.
Acerca de esta tarea
Procedimiento
- Cree un objeto java.util.Map que contenga las cabeceras de transporte.
- Añada una entrada (clave y valor) al objeto de correlación de cada cabecera de transporte que desea enviar en el mensaje de respuesta. Esto es similar al procedimiento anterior del cliente.
- Recupere el MessageContext (instancia de javax.xml.ws.handler.MessageContext) asociado con la invocación del punto final.
- Establezca el objeto de correlación en el MessageContext mediante la propiedad com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES.
Resultados
Ejemplo
@WebService
public class EchoServiceImpl implements EchoServicePortType {
// Inyectar una instancia del WebServiceContext para que se pueda recuperar
// el MessageContext de cada invocación de este punto final.
@Resource
WebServiceContext ctxt;
/**
* Constructor predeterminado.
*/
public EchoServiceImpl() {
....
}
public String echoString(String input) {
String result = “Echo result: “ + input;
// Recuperar el MessageContext del WebServiceContext inyectado.
MessageContext mc = ctxt.getMessageContext();
// Enviar algunas cabeceras de nuevo en el mensaje de respuesta.
Map<String, Object> responseHeaders = new HashMap<String, Object>();
responseHeaders.put("MyHeader1", "This is a string response value");
responseHeaders.put("MyHeader2", new Integer(33));
responseHeaders.put("MyHeader3”, new Boolean(false));
// Establecer la correlación de cabecera de respuesta en el MessageContext.
mc.put(com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES, responseHeaders);
return result;
}
}