Modelo de programación de cliente JAX-WS
El modelo de programación de cliente de servicio web JAX-WS (API de Java™ para servicios web XML) da soporte a la API de Cliente de asignación y la API de Cliente proxy dinámico. La API de Cliente de asignación es un modelo de programación de cliente dinámico, mientras que el modelo de programación de cliente estático de JAX-WS es el Cliente proxy dinámico. Los clientes de asignación y proxy dinámico permiten la invocación síncrona y asíncrona de servicios web de JAX-WS.
- Cliente de asignación: utilice este cliente si desea trabajar en el nivel del mensajes XML o si desea trabajar sin los artefactos generados en el nivel de JAX-WS.
- Cliente proxy dinámico: utilice este cliente si desea invocar un servicio web basado en una interfaz de punto final de servicio.
Cliente de asignación
Los servicios web basados en XML utilizan mensajes XML en las comunicaciones entre los servicios web y los clientes de servicios web. Las API JAX-WS proporcionan métodos de alto nivel para simplificar y ocultar los detalles de conversión entre las invocaciones de método Java y sus mensajes XML asociados. No obstante, en algunos casos, puede que desee trabajar a nivel de mensaje XML. La API de Cliente de asignación proporciona soporte para invocar servicios a nivel de mensaje XML. La API de Cliente de asignación, javax.xml.ws.Dispatch, es una interfaz de programación de clientes JAX-WS dinámica. Para grabar un Cliente de asignación, debe tener experiencia con las API de Cliente de asignación y los tipos de objetos soportados, así como conocimientos sobre las representaciones de mensajes del archivo WSDL (Web Services Description Language) asociado. El Cliente de asignación puede enviar datos en modalidad MESSAGE o PAYLOAD. Cuando se utiliza la modalidad javax.xml.ws.Service.Mode.MESSAGE, el Cliente de asignación sólo es responsable de proporcionar el sobre SOAP completo, incluidos los elementos <soap:Envelope>, <soap:Header> y <soap:Body>. Cuando se utiliza la modalidad javax.xml.ws.Service.Mode.PAYLOAD, el Cliente de asignación sólo es responsable de proporcionar el contenido de <soap:Body> y JAX-WS incluye la carga en un elemento <soap:Envelope>.
- javax.xml.transform.Source: utilice objetos Source para que los clientes puedan utilizar las API XML directamente. Puede utilizar objetos Source con enlaces SOAP o HTTP.
- Objetos JAXB: Utilice objetos JAXB para que los clientes puedan utilizar objetos JAXB que se han generado a partir de un esquema XML para crear y manipular XML con aplicaciones JAX-WS. Los objetos JAXB sólo pueden utilizarse con enlaces SOAP o HTTP.
- javax.xml.soap.SOAPMessage: utilice objetos SOAPMessage para que los clientes puedan trabajar con mensajes SOAP. Sólo puede utilizar objetos SOAPMessage con enlaces SOAP.
- javax.activation.DataSource: utilice objetos DataSource para que los clientes puedan trabajar con mensajes MIME (Multipurpose Internet Mail Extension). Utilice DataSource sólo con enlaces HTTP.
Dispatch<Source> dispatch = … create a Dispatch<Source>
Source request = … create a Source object
Source response = dispatch.invoke(request);
El valor del parámetro Dispatch
determina el tipo de retorno del método invoke().- Invocación síncrona de solicitudes y respuestas utilizando el método invoke
- Invocación asíncrona de solicitudes y respuestas utilizando el método invokeAsync con un objeto de sondeo o devolución de llamada
- Invocación unidireccional utilizando los métodos invokeOneWay
Consulte el Capítulo 4, sección 3, de la especificación JAX-WS para obtener más información sobre el uso de un Cliente de asignación.
Cliente proxy dinámico
El modelo de programación de cliente estático de JAX-WS se denomina el Cliente proxy dinámico. El cliente de Proxy dinámico invoca un servicio web basándose en la interfaz de punto final de servicio (SEI) que se debe proporcionar. El Cliente proxy dinámico es parecido al cliente stub en el modelo de programación JAX-RPC (API de Java para RPC basado en XML). Aunque el Cliente proxy dinámico JAX-WS y el cliente stub JAX-RPC se basan en la Interfaz de punto final de servicio (SEI) que se genera a partir de un archivo WSDL, existe una diferencia importante entre ambos. El Cliente proxy dinámico se genera dinámicamente durante la ejecución utilizando la funcionalidad de proxy dinámico de Java 5, mientras que el cliente stub basado en JAX-RPC es un archivo Java no portátil que se genera utilizando las herramientas. A diferencia de los clientes stub JAX-RPC, el Cliente proxy dinámico no necesita que regenere un stub antes de ejecutar el cliente en un servidor de aplicaciones de otro proveedor, ya que la interfaz generada no requiere la información específica del proveedor.
Las instancias de proxy dinámico amplían la clase java.lang.reflect.Proxy y aprovechan la función de proxy dinámico de JRE (Java SE Runtime Environment) 6. La aplicación cliente puede proporcionar una interfaz que se utiliza para crear la instancia de proxy, mientras que el tiempo de ejecución es responsable de crear dinámicamente el objeto Java que representa la SEI.
- Invocación síncrona de solicitudes y respuestas utilizando el método invoke
- Invocación asíncrona de solicitudes y respuestas utilizando el método invokeAsync con un objeto de sondeo o devolución de llamada
- Invocación unidireccional utilizando los métodos invokeOneWay
Consulte el Capítulo 4 de la especificación JAX-WS para obtener más información sobre el uso de un Cliente proxy dinámico.