Un web service puede procesar mensajes de protocolo (por lo general SOAP) o payloads de un mensaje (para SOAP, los contenidos del elemento body de un mensaje SOAP). Un Web Service de esta naturaleza debe implementar la interfaz javax.xml.ws.Provider ser anotada con @WebServiceProvider. Veamos como se ve uno de estos Web Services:
Antes de empezar esto, es necesario decir que contábamos con el Schema Definition (StringProcessorService_payloads.xsd) y el documento WSDL (StringProcessorService.wsdl). Con estos archivos y la herramienta XJC hemos creado las siguientes clases Java, necesarias para el trabajo con JAXB:
ObjectFactory.java
package-info.java
ReverseStringReq.java
ReverseStringResp.java
Habiendo dicho esto, proseguimos.
La anotación @WebServiceProvider se utiliza cuando la clase service endpoint implementa la interfaz Provider. Como se ve, la clase de arriba no contiene métodos a ser expuestos como operaciones de Web Service, sino sólamente el método invoke. El método invoke será "invocado" cada vez que el web service reciba un request y el mensaje de protocolo - o el payload del mensaje- serán enviados como parámetros al método invoke.
La anotación @ServiceMode nos indica si la clase provider recibirá y producirá mensajes de protocolo completos o sólamente los payloads. En el ejemplo, se opta por lo segundo.
Los valores de arriba son los valores por defecto, así que podríamos haber omitido la anotación.
Al declarar la clase provider:
public class StringProcessor implements Provider
Las clases Service Endpoint deben implementar la interfaz javax.xml.ws.Provider, para permitirles el recibir y procesar mensajes de protocolo o payloads de mensaje. La especificación JAX-WS da soporte a los siguientes providers:
Provider En el modo Payload de mensaje. La interfaz Source es implementada por las siguientes clases: DOMSource, JAXBSource, SAXSource, StaxSource, StreamSource
Provider En modo mensaje
Provider
En lo referente a la clase Provider, se establecen también las siguientes restricciones:
Las clases Provider deben implementar el constructor por defecto, o no implementar ninguno.
Una clase provider debe estar ligada a un tipo específico. No se puede implementar Provider
Una clase provider debe estar anotada con @WebServiceProvider
Publicar un comentario