2012-06-25 15 views
11

Estoy creando un servicio web en Java utilizando JAXWS RI. El archivo WSDL se crea al desplegar la aplicación WAR automáticamente. El problema es que quiero que los argumentos (que cada operación recibe) en el archivo WSDL tengan nombres significativos, pero aparecen como arg0, arg1, arg2 ... ¿Hay alguna manera de definir los nombres para estos parámetros y don usar los nombres predeterminados?Nombres de parámetros en WSDL con nombre significativo

He implementado el siguiente:

La interfaz de servicio Web

@WebService 
@SOAPBinding(style = Style.RPC) 
public interface WS2 { 
    @WebMethod String confirmaXML(String lrt_id); 
} 

el servicio web implementación de la interfaz

@WebService(endpointInterface = "vital.tde.ws2.WS2") 
public class WS2Imp implements WS2{ 
    public String confirmaXML(String lrt_id) { 
     String respuesta = null; 
     //CODE 
     return respuesta; 
    } 

sol jaxws.xml

<?xml version="1.0" encoding="UTF-8"?> 
<endpoints 
    xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime" 
    version="2.0"> 
    <endpoint name="WS2" implementation="vital.tde.ws2.WS2Imp" url-pattern="/WS2" /> 
</endpoints> 

Web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"> 
    <display-name>WS2</display-name> 
    <listener> 
    <listener-class> 
       com.sun.xml.ws.transport.http.servlet.WSServletContextListener 
     </listener-class> 
    </listener> 
    <servlet> 
    <servlet-name>WS2</servlet-name> 
    <servlet-class> 
      com.sun.xml.ws.transport.http.servlet.WSServlet 
     </servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>WS2</servlet-name> 
    <url-pattern>/WS2</url-pattern> 
    </servlet-mapping> 
    <session-config> 
    <session-timeout>120</session-timeout> 
    </session-config> 
</web-app> 
+0

¿Está generando automáticamente el WSDL de su clase de servicio web? – Mac

+0

@Mac Sí, edité mi pregunta para indicar en función de qué se genera el WSDL – user1084509

Respuesta

22

Si se está generando su WSDL de su clase de servicio web, es posible añadir anotaciones WebParam (ver here) a los parámetros de sus métodos para hacer cumplir la nomenclatura en el WSDL. Por ejemplo:

@WebService 
public class FooService 
{ 
    @WebMethod(operationName = "barMethod") 
    public void bar (@WebParam(name = "bazArg") int baz) 
    { 
     ... 
    } 
} 

El fragmento anterior configura JAX-WS para utilizar el nombre "bazArg" para el nombre de parámetros del método en el WSDL.

+1

¡Muchas gracias! Ahora funciona – user1084509

+1

¡Fantástico! Me alegra que lo hayas resuelto. – Mac

Cuestiones relacionadas