2010-02-01 16 views
21

aufgerufen Ich habe das folgende Problem: Ich benutze die wsimort ant Aufgabe, um einen Webservice-Client (für salesforce.com) zu erstellen. Alles funktioniert gut, aber die generierten Klassen verwenden alle diese seltsame JAXBElement-Klasse für alle Bean-Eigenschaften.JAXBElement in Klassen von wsimport von ant

ZB:

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

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

Anstatt alle Klassen in JAXBElement von Verpackungs I einfachen Methoden wie setLastName (String newLastName) haben möchten. So rufe ich die wsimport Aufgabe auf.

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

ist die Aufgabe, auf diese Weise definiert:

Weiß jemand, was ich die Klassen, so dass wsimport erzeugt gesetzt haben, wie ich will? Vielen Dank im Voraus !!!

Antwort

25

Der Grund für die Verwendung von JAXBElement-Wrappern in den generierten Beans ist wahrscheinlich, dass die WSDL das Feld als optional und nillable deklariert. Um zwischen "nicht vorhanden" und "vorhanden, aber null" zu unterscheiden, kann der String-Typ nicht direkt verwendet werden, da der String in beiden Fällen null wäre.

Wenn Sie nicht zwischen den beiden Situationen unterscheiden müssen, können Sie stattdessen configure the code generator den String-Typ verwenden. Ich bin nicht 100% sicher, wie man das mit der ant-Aufgabe macht, aber Sie werden wahrscheinlich die relevanten Informationen in der ant-Task-Dokumentation finden.

+7

danke, ich löste es diese Bindung Datei: in build.xml erklärt wie folgt: \t \t \t \t \t \t \t \t \t \t \t MisterY

+0

Dank, mich gerettet viel Zeit –

+1

die jaxws Bindungsdatei zu konfigurieren, finden Sie unter diesem Link: http : //metro.1045641.n5.nabble.com/Generated-Code-with-minOccurs-0-and-nillable-true-contains-JAXBElement-tp1063625p1063626.html – GWTNewbie

0

Ich habe ähnliches Problem konfrontiert.

Ich habe unten verbindlich XML verwendet, während Decke wsimport: mit Bezug auf diese link.

Einbindemappe

<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 wsimport Befehl:

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

Hinweis: employerServiceWSDL_binding.xjb enthalten von oben xml Eintrag zu binden.

Ich hoffe, es wird auch für andere arbeiten.