2010-02-01 10 views
21

Mam następujący problem: Korzystam z zadania wsimport ant, aby utworzyć klienta usługi WWW (dla salesforce.com). Wszystko działa poprawnie, ale wygenerowane klasy używają tej dziwnej klasy JAXBElement dla wszystkich właściwości komponentu bean.Pozbyć się JAXBElement w klasach generowanych przez wsimport wywoływane z ant

Np

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

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

Zamiast owijania wszystkie zajęcia w JAXBElement Chciałbym mieć prostych metod, takich jak setLastName (String newLastName). W ten sposób wywołuję zadanie 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> 

Zadanie jest zdefiniowana w ten sposób:

czy ktoś wie co mam tak ustawione, że wsimport generuje klas drodze chcę? Bardzo dziękuję z góry !!!

Odpowiedz

25

Powodem użycia wrapperów JAXBElement w wygenerowanych komponentach bean jest prawdopodobnie to, że WSDL deklaruje, że pole ma być opcjonalne i można je nillable. Aby odróżnić "nieobecny" i "obecny, ale zerowy", typu String nie można użyć bezpośrednio, ponieważ łańcuch w obu przypadkach byłby zerowy.

Jeśli nie ma potrzeby rozróżniania tych dwóch sytuacji, można użyć configure the code generator, aby zamiast tego użyć typu Ciąg. Nie jestem w 100% pewny, jak to zrobić z zadaniem ant, ale prawdopodobnie znajdziesz odpowiednie informacje w dokumentacji zadania Ant.

+7

dzięki, I rozwiązać go za pomocą tego pliku Oprawa: zadeklarowane w build.xml następująco: \t \t \t \t \t \t \t \t \t \t \t MisterY

+0

dzięki, zaoszczędziło mi dużo czasu –

+1

Aby skonfigurować plik JAXWS Wiązania zobaczyć ten link: http : //metro.1045641.n5.nabble.com/Generated-Code-with-minOccurs-0-and-nillable-true-contains-JAXBElement-tp1063625p1063626.html – GWTNewbie

0

Mam podobny problem.

Użyłem poniżej wiązania XML podczas suibportu wsib: w odniesieniu do tego link.

Oprawa plik

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

Próbka wsimport polecenie:

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

Uwaga: employerServiceWSDL_binding.xjb zawierać od powyżej wiązania wpis xml.

Mam nadzieję, że będzie działać również dla innych.

Powiązane problemy