Personalizando los WSDLs generados por CXF

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í.

Respuesta

  1. Buenas tardes,

    Que buen ejemlplo, ahora tengo una duda, hay alguna manera de crear el Cliente para consumir el web servies, o como puedo saber qué paremetros hacia el endponit, gracias.

Deja un comentario