2010-02-01 2 views
21

У меня проблема: Я использую задачу wsimport ant для создания клиента webservice (для salesforce.com). Все работает нормально, но созданные классы используют этот странный класс JAXBElement для всех свойств bean.Избавиться от JAXBElement в классах, созданных wsimport, вызванных от ant

Например:

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

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

Вместо упаковки всех классов в JAXBElement Я хотел бы иметь простые методы, такие как setLastName (String newLastName). Вот как я вызываю задачу 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> 

Задача определяется следующим образом:

Кто-нибудь знает, что я должен установить так, что wsimport генерирует классы так, как я хочу? Большое спасибо!

ответ

25

Причина использования обертки JAXBElement в сгенерированных компонентах, вероятно, заключается в том, что WSDL объявляет поле как необязательным, так и nillable. Чтобы различать «нет» и «настоящий, но нулевой», тип String нельзя использовать напрямую, так как String в обоих случаях будет null.

Если вам не нужно различать две ситуации, вы можете использовать configure the code generator, чтобы использовать тип String. Я не уверен на 100%, как это сделать с помощью ant-задачи, но вы, вероятно, найдете соответствующую информацию в документации по муравьям.

+7

спасибо, я ее решил с помощью этого связывания файла: объявлен в build.xml следующим образом: \t \t \t \t \t \t <связывание DIR = "" включает в себя = "простой binding.xjb" \t \t \t \t \t \t \t \t /> \t \t \t \t \t MisterY

+0

спасибо, сэкономил мне много времени –

+1

Для настройки файла JAXWS привязок, смотрите по этой ссылке: HTTP : //metro.1045641.n5.nabble.com/Generated-Code-with-minOccurs-0-and-nillable-true-contains-JAXBElement-tp1063625p1063626.html – GWTNewbie

0

У меня возникла аналогичная проблема.

Я использовал ниже связывание XML в потолке wsimport: со ссылкой на это link.

Связывание файла

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

Пример команды wsimport:

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

Примечание: employerServiceWSDL_binding.xjb содержат от выше привязки записи XML.

Надеюсь, что это сработает и для других.

Смежные вопросы