java web-services ant jaxb wsimport

java - Deshágase de JAXBElement en las clases generadas por wsimport llamadas desde hormiga



web-services ant (3)

Tengo el siguiente problema: estoy usando la tarea wsimport ant para crear un cliente de servicio web (para salesforce.com). Todo funciona bien, pero todas las clases generadas usan esta extraña clase JAXBElement para todas las propiedades de bean.

P.ej:

public void setLastName(JAXBElement<String> value) { this.lastName = ((JAXBElement<String> ) value); } public JAXBElement<String> getCountry() { return country; }

En lugar de incluir todas las clases en JAXBElement, me gustaría tener métodos simples como setLastName (String newLastName). Así es como estoy llamando a la tarea de wsimport.

<wsimport debug="false" verbose="false" keep="${keep}" extension="${extension}" destdir="${tmp.metro}" wsdl="${licensing.wsdl}" sourcedestdir="${licensingws.generated.src}" > <binding dir="${basedir}/etc" includes="${client.binding}" /> <arg value="-B-XautoNameResolution" /> </wsimport>

La tarea se define de esta manera:

¿Alguien sabe lo que tengo que configurar para que wsimport genere las clases de la manera que yo quiero? ¡¡¡Muchas gracias por adelantado!!!



He enfrentado un problema similar.

He utilizado a continuación XML vinculante, mientras que wsimport techo: con referencia de este link .

Archivo de enlace

<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" xmlns:xs="http://www.w3.org/2001/XMLSchema"> <jaxb:globalBindings generateElementProperty="false"/> </jaxb:bindings>

Ejemplo de comando wsimport:

wsimport -keep <WSDL_location> -b employerServiceWSD L_binding.xjb

Nota: employerServiceWSDL_binding.xjb contiene la entrada xml de enlace anterior.

Espero que funcione para otros también.


La razón para usar envoltorios de JAXBElement en los beans generados es, probablemente, que el WSDL declara que el campo es opcional y anulable. Para distinguir entre "no presente" y "presente, pero nulo", el tipo de Cadena no se puede usar directamente, ya que la Cadena en ambos casos sería nula.

Si no necesita distinguir entre las dos situaciones, puede configurar el generador de código para usar el tipo de Cadena en su lugar. No estoy 100% seguro de cómo hacer esto con la tarea ant, pero probablemente encontrarás la información relevante en la documentación de la tarea ant.