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

  1. Cree un objeto java.util.Map que contenga las cabeceras de transporte.
  2. Añada una entrada al objeto de correlación de cada cabecera de transporte que desea que envíe el cliente.
    1. Establezca la clave de la entrada de correlación en una serie que coincida exactamente con el identificador de la cabecera de transporte. Puede definir 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 que 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.
    2. Establezca el valor de la entrada de correlación en el valor de la cabecera de transporte. El tipo de este valor puede ser uno de los siguientes tipos de datos:
      • java.lang.String
      • java.lang.Integer
      • java.lang.Short
      • java.lang.Long
      • java.lang.Float
      • java.lang.Double
      • java.lang.Byte
      • java.lang.Boolean
  3. Establezca el objeto de correlación en el RequestContext del BindingProvider utilizando la propiedad com.ibm.websphere.webservices.Constants.REQUEST_TRANSPORT_PROPERTIES. Cuando se establece el valor de la propiedad REQUEST_TRANSPORT_PROPERTIES, la correlación se utiliza en las invocaciones subsiguientes para establecer los valores de cabecera en las solicitudes de salida. Si el valor de la propiedad REQUEST_TRANSPORT_PROPERTIES se establece en null, no se envía ninguna propiedad de transporte en las solicitudes de salida. Para obtener más información acerca de estas propiedades, consulte la documentación sobre las propiedades de cabecera de transporte.
  4. Emita llamadas al método remoto para la instancia BindingProvider. Las cabeceras y los valores asociados de la correlación se añaden a la solicitud de salida para cada invocación del método. Si la invocación utiliza HTTP, las cabeceras de transporte se envían como cabeceras HTTP dentro de la solicitud HTTP. Si la invocación utiliza JMS, las cabeceras de transporte se envían como propiedades de mensaje JMS.
    Si la propiedad Constants.REQUEST_TRANSPORT_PROPERTIES 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á:
    1. El valor de la propiedad Constants.REQUEST_TRANSPORT_PROPERTIES establecido en el RequestContext del BindingProvider debe ser un objeto java.util.Map o null.
    2. Cada clave en la correlación debe ser un tipo de datos java.util.String.
    3. Cada valor en la correlación debe ser uno de los siguientes tipos de datos:
      • java.lang.String
      • java.lang.Integer
      • java.lang.Short
      • java.lang.Long
      • java.lang.Float
      • java.lang.Double
      • java.lang.Byte
      • java.lang.Boolean

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

A continuación, se muestra un breve ejemplo de programación que muestra cómo una aplicación de cliente de serviicios web JAX-WS envía las cabeceras de transporte de solicitud:
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

Es necesario disponer de una clase de implementación de punto final de servicios web JAX-WS que pueda habilitar para enviar cabeceras de transporte.

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

Cuando se utiliza el modelo de programación JAX-WS, la clase de implementación de punto final debe establecer una propiedad en el MessageContext para enviar valores en las cabeceras de transporte con el mensaje de respuesta de servicios web.

Procedimiento

  1. Cree un objeto java.util.Map que contenga las cabeceras de transporte.
  2. 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.
  3. Recupere el MessageContext (instancia de javax.xml.ws.handler.MessageContext) asociado con la invocación del punto final.
  4. Establezca el objeto de correlación en el MessageContext mediante la propiedad com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES.

Resultados

Dispone de una clase de implementación de punto final de servicios web JAX-WS que se ha configurado para enviar cabeceras de transporte en los mensajes de respuesta de serviicios web.

Ejemplo

A continuación, se muestra un breve ejemplo de programación que muestra cómo una clase de implementación de punto final de servicios web JAX-WS envía las cabeceras de transporte de respuesta:
@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;
    }
}

Icon that indicates the type of topic Task topic



Timestamp icon Last updated: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=twbs_cookiejaxws
File name: twbs_cookiejaxws.html