Подтвердить что ты не робот

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

4b9b3361

Ответ 1

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

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

Ответ 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.

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