CXF permite publicar una lógica de negocio como un Servicio Web con una anotación en el interfaz y en el servicio:
La anotación @WebService es suficiente pero no suministra mucha información acerca de cómo el Servicio debe ser expuesto en un endpoint.
En JAX-WS existen varias anotaciones opcionales que permiten añadir detalles, veamos las principales:
· @WebService permite definir:
o name : especifica el nombre del Servicio. Mapea con elemento wsdl:portType. Por defecto se añade PortType al nombre de la clase que lo implementa.
o targetNamespace: especifica el namespace del Servicio. Si no existe se deriva del paquete.
o serviceName especifica el nombre del Servicio publicado. Mapea con elemento wsdl:service. Por defecto se usa el nombre de la clase de implementación.
o wsdlLocation especifica la URI del contrato WSDL. Por defecto es la URL en la que se despliega el servicio.
o endpointInterface especifica el nombre complete.
o portName especifica el nombre del endpoint donde se publica el Servicio. Mapea con element wsdl:port. Por defecto se añade Port al nombre de la clase que lo implementa.
· @WebMethod permite definir:
o operationName: especifica el valor del wsdl:operation. Por defecto es el nombre del método.
o Action: especifica el valor de soap:operation. Por defecto es “”.
o Exclude: especifica si el método debe excluirse del interfaz del Servicio. Por defecto es false.
· @WebParam: permite definir:
o Name: especifica el nombre del parámetro en el WSDL.
o targetNamespace: especifica el namespace del parámetro.
o mode especifica dirección del parámetro. Posibles valores: Mode.IN (default), Mode.OUT y Mode.INOUT
o header especifica si el parámetro se pasa como parte de la cabecera SOAP. Por defecto false
o partName especifica el valor del nombre del element wsdl:part
Además de estos existen otras anotaciones que pueden sernos de utilidad:
· @SOAPBinding permite configurar parámetros de despliegue:
· @RequestWrapper permite especificar la clase Java que actúa como wrapper para los parámetros del request
· @ResponseWrapper permite especificar la clase Java que actúa como wrapper para los parámetros del response
· @WebFault permite mapear el elemento web:fault con la excepción Java
Un interfaz con estas anotaciones tendría este aspecto:
![]() |
package org.apache.cxf;import javax.jws.*;
import javax.xml.ws.*; import javax.jws.soap.*; import javax.jws.soap.SOAPBinding.*; import javax.jws.WebParam.*; @WebService(name=»quoteReporter») @SOAPBinding(style=Style.RPC, use=Use.LITERAL) public interface quoteReporter { @WebMethod(operationName=»getStockQuote») @RequestWrapper(targetNamespace=»http://demo.iona.com/types», className=»java.lang.String») @ResponseWrapper(targetNamespace=»http://demo.iona.com/types», className=»org.eric.demo.Quote») @WebResult(targetNamespace=»http://demo.iona.com/types», name=»updatedQuote») public Quote getQuote( @WebParam(targetNamespace=»http://demo.iona.com/types», name=»stockTicker», mode=Mode.IN) String ticker ); } |
Podéis encontrar más información aquí.




Deja un comentario