#soap #wsdl #code-generation #axis2
#soap #wsdl #генерация кода #axis2
Вопрос:
У меня есть веб-сервис, встроенный в .NET (я полагаю, 2.0), и WSDL для него был автоматически сгенерирован фреймворком. Я пытаюсь создать для него Java-клиент и использую wsdl2java от Axis2 для генерации классов-заглушек с привязкой данных ADB (в первую очередь потому, что ведущий партнер для этого клиента делал то же самое для сервисов, написанных на Java).
WSDL содержит ряд сложных типов, которые выглядят следующим образом … фрагмент:
<s:sequence>
<s:element minOccurs="1" maxOccurs="1" name="ID" type="s:long" />
<s:element minOccurs="0" maxOccurs="1" name="PRODUCT_NAME">
<s:complexType mixed="true">
<s:sequence>
<s:any />
</s:sequence>
</s:complexType>
</s:element>
...
В сообщениях SOAP все эти поля будут иметь теги CDATA—
<PRODUCT_NAME><![CDATA[test]]></PRODUCT_NAME>
Когда wsdl2java генерирует код для использования этой службы, эти поля определяются как имеющие типы, подобные PRODUCT_NAME_type0, и они ожидают найти PRODUCT_NAME_type0 в качестве тега в ответе SOAP. Наличие его в Java-коде — это облом, но ожидание, что он будет в ответе SOAP, вызывает ошибки. Есть ли флаг для wsdl2java, который изменил бы это поведение? Должен ли я использовать другую привязку? Другой инструмент?
Ответ №1:
Вау, я думал, что это был бы простой вопрос для кого-то там…
В итоге я решил, что ADB, вероятно, не предназначен для поддержки WSDL, который у меня был, и переключился на использование утилиты wsimport от JAX-WS, которая, похоже, работает.