Я создал веб-сервис, используя:
- Apache Axis 2 CodeGen Wizard v.1.6.2 (Binding: ADB)
- Eclipse Juno
- Tomcat 7
- Java 6
Служба возвращает пользовательский объект Java (DataBean) обратно клиенту, но я наткнулся на исключение в клиентском коде:
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {schemaTargetNs}message
Из того, что я исследовал, над n снова... Я думаю, что это очень распространенная проблема, но еще не получила окончательного ответа относительно того, что нужно сделать, чтобы исправить ее.
В некоторых сообщениях на этом и других форумах указано, что WSDL необходимо изменить (какое-то пространство имен), или клиенту необходимо изменить его. Некоторые даже утверждают, что в ADB есть ошибка. Это была ошибка в более ранних версиях Axis, но в почтовых архивах есть много сообщений о том, что ошибка исправлена. Эти почтовые архивы были связаны с более ранними версиями Axis2.
Теперь мои вопросы:
- Это все еще ошибка?
- Что именно нужно изменить в WSDL или клиенте?
Следует отметить, что я создал аналогичную веб-службу, которая возвращает "String" обратно клиенту. Он отлично работает! Таким образом, он терпит неудачу, когда задействован сложный тип данных.
На веб-сайте Apache появилась некоторая информация под заголовком Известные ограничения"...
Он гласит: " ADB предназначен для" простой "структуры привязки данных и не предназначен для компиляции всех типов схем. Ниже перечислены наиболее важные ограничения.
- Расширения и ограничения сложных типов.
Это проблема?
Ниже приведен фрагмент из файла WSDL, который может вас заинтересовать...
<wsdl:types>
<xs:schema xmlns:ax26="http://mywebservice/xsd" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="schemaTargetNs">
<xs:import namespace="http://mywebservice/xsd"/>
<xs:element name="getMsg">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="reqData" nillable="true" type="ax25:DataBean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="getMsgResponse">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="0" name="return" nillable="true" type="ax25:DataBean"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
<xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://mywebservice/xsd">
<xs:complexType name="DataBean">
<xs:sequence>
<xs:element minOccurs="0" name="message" nillable="true" type="xs:string"/>
<xs:element minOccurs="0" name="name" nillable="true" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</wsdl:types>
Теперь, как я могу исправить проблему? Должен ли я включать некоторые другие фрагменты кода здесь?