2011-08-11 22 views
12

La utilidad Java 6 JAX-WS "wsimport" hace un gran trabajo generando un esqueleto de servicio web (interfaz) dado un archivo WSDL pero con una excepción personalmente molesta.Java SOAP "wsimport": fuerza envuelta vinculante de documento/literal envuelto WSDL?

Cuando dado un WSDL que utiliza el SOAP Document/literal wrapped style (also described here) que genera una interfaz de servicio con un "desnudo" SOAP binding parameter style (con múltiples argumentos y valores expandido como "holder" objects en las firmas de los métodos de regreso) en lugar de la sencilla envuelto valor del parámetro y de retorno especificado por el WSDL. Otras herramientas, como Axis2 wsdl2java, simplemente usan los elementos de la envoltura como el parámetro de entrada y el valor de retorno en lugar de "desenvolverlos" automáticamente.

¿Es posible decirle a "wsimport" que mantenga los parámetros de enlace de SOAP como "envueltos" en lugar de "desnudos"?

Respuesta

31

yo sepa, que había necesidad de especificar un archivo de enlace personalizado para desactivar el estilo de envoltorio:

<bindings 
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
    wsdlLocation="OperationService.wsdl" 
    xmlns="http://java.sun.com/xml/ns/jaxws"> 
     <!-- Disable default wrapper style --> 
     <enableWrapperStyle>false</enableWrapperStyle> 
</bindings> 

y luego invocar wsimport

$ wsimport -b binding.xml OperationService.wsdl 
+2

110 gracias por apuntando en la dirección correcta! – maerics

14

La respuesta de @ beny23 está en el camino correcto ; Sin embargo, resulta que pueda embed the JAX-WS binding instructions into the WSDL file itself, lo que elimina la necesidad de añadir los "interruptores" -b binding.xml al comando "wsimport":

<wsdl:portType name="HelloPortType"> 
    <jaxws:bindings xmlns:jaxws="http://java.sun.com/xml/ns/jaxws"> 
    <jaxws:enableWrapperStyle>false</jaxws:enableWrapperStyle> 
    </jaxws:bindings> 
    <wsdl:operation name="sayHello">...</wsdl:operation> 
</wsdl:portType> 
+0

¿Pero eso no afecta a todos los usuarios del WSDL? Entonces, si no quieres envoltorios de tu lado (ya sea cliente o servidor), pero tu pareja lo hace del otro lado, ¿los has obstaculizado? – dbreaux

+1

@dbreaux sí, parece que sí, para los usuarios de JAX-WS al menos; Solo quería señalar otra opción en caso de que sea más adecuada para algunos usuarios (como yo = P) – maerics

Cuestiones relacionadas