2010-02-01 10 views
21

Tengo el siguiente problema: Estoy usando la tarea wsimport ant para crear un cliente de servicio web (para salesforce.com). Todo está funcionando bien, pero todas las clases generadas usan esta extraña clase JAXBElement para todas las propiedades de bean.Deshágase de JAXBElement en las clases generadas por wsimport llamadas desde ant

Ej:

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

public JAXBElement<String> getCountry() { 
    return country; 
} 

En lugar de envolver toda clase de JAXBElement Me gustaría disponer de métodos simples como setLastName (String newLastName). Así es como llamo a la tarea 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 de manera que wsimport genera las clases de la manera que quiero? ¡Muchas gracias de antemano!

Respuesta

25

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 configure the code generator 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.

+7

gracias, lo resolvieron utilizando este archivo de enlace: declarado en build.xml como sigue: \t \t \t \t \t \t

\t \t \t \t \t – MisterY

+0

gracias, me salvó un montón de tiempo –

+1

Para configurar el archivo JAXWS fijaciones, ver este enlace: http : //metro.1045641.n5.nabble.com/Generated-Code-with-minOccurs-0-and-nillable-true-contains-JAXBElement-tp1063625p1063626.html – GWTNewbie

0

Me he enfrentado a un problema similar.

He utilizado a continuación el enlace XML mientras techo wsimport: con referencia de este link.

archivo Encuadernación

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

Muestra comando wsimport:

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

Nota: employerServiceWSDL_binding.xjb contiene por encima de la entrada de vinculación XML.

Espero que funcione para otros también.

Cuestiones relacionadas