Entfernen Sie JAXBElement in Klassen, die von wsimport generiert wurden und von ant aufgerufen wurden

StackOverflow https://stackoverflow.com/questions/2177153

Frage

Ich habe folgendes Problem:Ich verwende die Ant-Aufgabe wsimport, um einen Webservice-Client (für salesforce.com) zu erstellen.Alles funktioniert einwandfrei, aber die generierten Klassen verwenden alle diese seltsame JAXBElement-Klasse für alle Bean-Eigenschaften.

Z.B:

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

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

Anstatt alle Klassen in JAXBElement einzuschließen, hätte ich gerne einfache Methoden wie setLastName(String newLastName).So nenne ich die wsimport-Aufgabe.

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

Die Aufgabe ist folgendermaßen definiert:

Weiß jemand, was ich einstellen muss, damit wsimport die Klassen so generiert, wie ich es möchte?Vielen Dank im Voraus!!!

War es hilfreich?

Lösung

Der Grund für die Verwendung von Jaxbelement -Wrappern in den erzeugten Bohnen ist wahrscheinlich, dass die WSDL das Feld für optional und nillbar erklärt. Um zwischen "nicht vorhanden" und "vorhanden, aber null" zu unterscheiden, kann der String -Typ nicht direkt verwendet werden, da die Zeichenfolge in beiden Fällen null wäre.

Wenn Sie nicht zwischen den beiden Situationen unterscheiden müssen, können Sie Konfigurieren Sie den Codegenerator Verwenden Sie stattdessen den String -Typ. Ich bin mir nicht zu 100% sicher, wie ich dies mit der ANT -Aufgabe geht, aber Sie werden wahrscheinlich die relevanten Informationen in der Ant -Task -Dokumentation finden.

Andere Tipps

Sie müssen müssen Passen Sie die Bindung an.

Ich hatte ein ähnliches Problem.

Ich habe unten verbindliches XML während der Decke wsimport verwendet: unter Bezugnahme darauf Verknüpfung.

Bindungsdatei

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

Beispiel für einen wsimport-Befehl:

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

Notiz : EmployerServiceWSDL_binding.xjb enthält den oben genannten verbindlichen XML-Eintrag.

Ich hoffe, dass es auch für andere funktioniert.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top