Domanda

Ho il seguente problema: sto usando l'attività di Ant WSIMport per creare un client WebService (per Salesforce.com). Tutto funziona bene, ma le classi generate usano tutte questa strana classe JAXBELEment per tutte le proprietà di Bean.

Per 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). È così che chiamo l'attività di 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>

L'attività è definita in questo modo:

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

È stato utile?

Soluzione

Il motivo per l'uso di involucri jaxbelement nei fagioli generati è probabilmente che il WSDL dichiara che il campo sia opzionale e 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 null.

Se non hai bisogno di distinguere tra le due situazioni, puoi configurare il generatore di codice Per utilizzare invece il tipo di stringa. Non sono sicuro al 100% di come farlo con l'attività di Ant, ma probabilmente troverai le informazioni pertinenti nella documentazione dell'attività ANT.

Altri suggerimenti

Ho affrontato un problema simile.

Ho usato di seguito XML vincolante durante il soffitto Wsimport: con riferimento di questo collegamento.

File vincolante

<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 : datore di lavoro DEMBERSERVICEWSDL_BINDING.XJB contenere della voce XML rilegata sopra.

Spero che funzioni anche per gli altri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top