2010-02-01 14 views
21

Ho il seguente problema: Sto usando l'attività ant wsimport per creare un client webservice (per salesforce.com). Tutto funziona bene, ma tutte le classi generate utilizzano questa strana classe JAXBElement per tutte le proprietà del bean.Sbarazzarsi di JAXBElement nelle classi generate da wsimport chiamato da ant

Esempio:

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

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

Invece di avvolgere tutte le classi in JAXBElement Mi piacerebbe avere metodi semplici come setLastName (String newLastName). Ecco come sto chiamando l'attività 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> 

Il compito è definita in questo modo:

Qualcuno sa cosa devo impostare in modo che wsimport genera le classi come voglio? Grazie mille in anticipo !!!

risposta

25

Il motivo dell'utilizzo dei wrapper JAXBElement nei bean generati è probabilmente, che il WSDL dichiara il campo sia facoltativo che nillabile. Per distinguere tra "non presente" e "presente, ma null", il tipo di stringa non può essere utilizzato direttamente, poiché la stringa in entrambi i casi sarebbe nullo.

Se non è necessario distinguere tra le due situazioni, è possibile utilizzare configure the code generator per utilizzare il tipo di stringa. Non sono sicuro al 100% su come farlo con l'attività ant, ma probabilmente troverai le informazioni rilevanti nella documentazione delle attività ant.

+7

grazie, ho risolto utilizzando questo file rilegatura: dichiarata nel build.xml come segue: \t \t \t \t \t \t

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

+0

grazie, mi ha salvato un sacco di tempo –

+1

Per configurare il file jaxws attacchi, vedi questo link: http : //metro.1045641.n5.nabble.com/Generated-Code-with-minOccurs-0-and-nillable-true-contains-JAXBElement-tp1063625p1063626.html – GWTNewbie

0

Ho affrontato un problema simile.

Ho usato sotto XML vincolante mentre wsimport soffitto: con riferimento a questo link.

file di rilegatura

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

Esempio di comando wsimport:

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

Nota: employerServiceWSDL_binding.xjb contiene di sopra vincolante voce XML.

Spero che funzioni anche per gli altri.