Лучший способ использовать веб-сервисы .NET в Java - PullRequest
4 голосов
/ 11 марта 2009

Я пытаюсь использовать некоторые веб-сервисы .NET, используя JAX-WS. Я сгенерировал классы Java с помощью инструмента wsimport. Однако, когда я пытаюсь использовать эти (собственные, не общедоступные) веб-сервисы в Java, я замечаю, что большинство методов и свойств, предоставленных поставщиком в его примерах C #, недоступны в сгенерированных классах (несмотря на то, что они не сталкивались с ошибками). при создании классов Java из файла WSDL). Подключение к веб-сервисам также работает в основном.

Когда я пытался сгенерировать класс C # с помощью wsdl.exe из .NET SDK, все методы были сгенерированы правильно.

Каков наилучший способ использования веб-служб .NET, чтобы в Java были доступны все функции, и почему wsimport генерирует только небольшую часть всех методов и свойств, описанных в файле WSDL?

Пример: в WSDL-файле UserManagement.wsdl есть фрагмент

<code>
<s:schema elementFormDefault="qualified" targetNamespace="<a href="http://www.initechsystems.com/initech7/initechws/" rel="nofollow noreferrer">http://www.initechsystems.com/initech7/initechws/</a>">
  <s:element name="UserSecurityContext" type="s2:UserSecurityContext"/>
  <s:complexType name="UserSecurityContext">
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="Token" type="s2:UserToken"/>
    </s:sequence>
  </s:complexType>
  <s:complexType name="UserToken">
    <s:sequence>
      <s:element minOccurs="0" maxOccurs="1" name="Value" type="s:string"/>
    </s:sequence>
  </s:complexType>
</s:schema>

В C # я могу получить доступ к UserSecurityContext следующим образом:

<code>
UserManagement userMgmt = new UserManagement();
userMgmt.UserSecurityContextValue = new SampleWS.UserRef.UserSecurityContext();
Однако в Java я могу создать объект UserManagement

<code>
UserManagement userMgmt = new UserManagement();

, но сгенерированный объект UserManagement не имеет ни доступного объекта SecurityContext, ни методов получения или установки для такого частного объекта.

Ответы [ 2 ]

2 голосов
/ 21 марта 2009
1 голос
/ 11 марта 2009

Мне бы хотелось увидеть пример, о котором вы говорите, поскольку он звучит так, как будто этот пример отправляет объекты с поведением по проводам, а не только модели (или сообщения, если вы предпочитаете более хороший термин SOA).

Когда вы отправляете объект, который отформатирован как модель данных, или сообщение, он не будет содержать методов для использования. А с помощью взаимодействия не имеет большого смысла настраивать поведение (методы) для передачи по проводам.

Что касается того, что вы можете сделать, поскольку вы сериализуете, вы можете создавать поведенческие методы, если они имеют смысл на вашей стороне. Лично я бы создал поведение в других объектах и ​​сохранил бы модели / сообщения как контейнеры состояний. Но ваш пробег может отличаться. ; -)

...