Избавьтесь от JAXBElement в классах, сгенерированных wsimport, вызываемым из ant - PullRequest
23 голосов
/ 01 февраля 2010

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

Например:

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 генерировал классы так, как я хочу? Заранее большое спасибо !!!

Ответы [ 3 ]

27 голосов
/ 01 февраля 2010

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

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

4 голосов
/ 01 февраля 2010

Вам придется настроить привязку .

1 голос
/ 12 июля 2017

Я столкнулся с подобной проблемой.

Я использовал нижепривязывающий 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

Примечание: EmployerServiceWSDL_binding.xjb содержит вышеуказанную обязательную XML-запись.

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

...