Проблема создания клиента веб-служб Java SOAP с помощью инструмента JDK wsimport из WSDL, созданного приложением .NET 2.0 - PullRequest
39 голосов
/ 24 апреля 2009

Я пытаюсь сгенерировать клиента для некоторых веб-сервисов SOAP с помощью инструмента JDK 6 wsimport. WSDL был создан приложением .NET 2.0. Для приложений .NET 3.X работает нормально.

Когда я бегу

wsimport -keep -p mypackage http://myservice?wsdl

показывает несколько сообщений об ошибках, таких как:

[ОШИБКА] Класс / интерфейс с тем же именем «mypackage.SomeClass» уже используется. Используйте настройку класса для разрешения этого конфликта. линия ?? http://myservice? wsdl

Когда я генерирую клиент веб-служб с помощью Axis 1.4 (с помощью подключаемого модуля Eclipse WebTools).

Кто-нибудь знает, что я могу сделать, чтобы использовать инструмент wsimport? Я действительно не понимаю, что такое «настройка класса».

Ответы [ 4 ]

87 голосов
/ 16 сентября 2009

Я не знаю, было ли это когда-нибудь решено, но я потратил некоторое время на поиски решения этой же проблемы.

Я нашел здесь исправление - https://jax -ws.dev.java.net / questions / show_bug.cgi? Id = 228

Решение - запустить wsimport с -B-XautoNameResolution (без пробелов)

21 голосов
/ 13 марта 2012

Для тех, кто читает это с помощью maven, это как добавить его в файл .pom. Обратите внимание на аргументы в разделе конфигурации. Это не очень легко найти в документации. Большое спасибо Исааку Стивенсу за помощь в этом.

<!-- definition for ERPStandardWork service -->
<execution>
  <id>ERPStandardWorkService</id>
  <goals>
    <goal>wsimport</goal>
  </goals>
  <configuration>
    <!-- this resolves naming conflicts within the wsdl - there are several copies of fault report objects which clash otherwise. -->
    <args>
       <arg>-B-XautoNameResolution</arg>
    </args>
    <wsdlDirectory>${basedir}/src/main/resources/META-INF/wsdl</wsdlDirectory>
    <wsdlFiles>
        <wsdlFile>ERPStandardWork.wsdl</wsdlFile>
    </wsdlFiles>
      <wsdlLocation>${basedir}/src/main/resources/META-INF/wsdl/ERPStandardWork.wsdl
    </wsdlLocation>
    <staleFile>${project.build.directory}/jaxws/ERPStandardWork/.staleFlag
    </staleFile>
  </configuration>
</execution>
0 голосов
/ 09 марта 2016

Принятый ответ выше решит вашу проблему, но не устранит основную причину.

Проблема возникает из-за того, что операция в вашем файле wsdl имеет то же имя, что и xsd: complexType в вашем файле xsd - как в примере ниже. Все типы и операции должны иметь уникальные имена.

<xsd:complexType name="SearchDocuments">
      <xsd:sequence>
        <xsd:element name="document" type="ns0:SearchDocumentById" maxOccurs="unbounded"/>
      </xsd:sequence>
</xsd:complexType>

<operation name="SearchDocuments">
      <input wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsRequest" message="tns:searchDocumentsRequest"/>
      <output wsam:Action="http://controller.xxx.xxx.com/DocumentWS/searchDocumentsResponse" message="tns:searchDocumentsResponse"/>
</operation>

Так что проверяйте свои операции и типы. Убедитесь, что ни одно из них не имеет одинакового имени, т.е. нет повторяющихся имен.

0 голосов
/ 24 апреля 2009

Возможно, вы генерируете все классы из файла WSDL в одном пакете. Если это так, попробуйте указать разные целевые пакеты для каждого файла WSDL с параметром -p wsimport.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...