Избавиться от JAXBElement в классах, созданных wsimport, вызванных из ant
У меня есть следующая проблема:
Я использую задачу wsimport ant для создания клиента webservice (для salesforce.com).
Все работает нормально, но созданные классы используют этот странный класс JAXBElement для всех свойств bean.
Например:
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 генерировал классы так, как я хочу?
Большое спасибо заблаговременно!
Ответы
Ответ 1
Причиной использования оболочек JAXBElement в сгенерированном beans, вероятно, является то, что WSDL объявляет поле как необязательным, так и nillable. Чтобы различать "нет" и "настоящее, но ноль", тип String нельзя использовать напрямую, так как String в обоих случаях будет null.
Если вам не нужно различать две ситуации, вы можете сконфигурировать генератор кода, чтобы вместо этого использовать тип String. Я не уверен на 100%, как это сделать с задачей ant, но вы, вероятно, найдете соответствующую информацию в документации по ant.
Ответ 2
Вам нужно настроить привязку.
Ответ 3
У меня возникла аналогичная проблема.
Я использовал ниже связывание XML в потоке wsimport: со ссылкой на ссылку .
Файл привязки
<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
Примечание: работодательServiceWSDL_binding.xjb содержит вышеперечисленную запись xml.
Надеюсь, что это сработает и для других.