我创建了一个Web服务:
> Apache Axis 2 CodeGen向导v.1.6.2(绑定:ADB)
> Eclipse Juno
> Tomcat 7
> Java 6
该服务将自定义Java对象(DataBean)返回给客户端,但是我在客户端代码中偶然发现一个异常:
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {schemaTargetNs}message
从我所研究的,再过一遍,我认为这是一个很常见的问题,但还没有一个确切的答案,应该做些什么来纠正.
这个和其他论坛上的一些帖子声明需要修改WSDL(某些名称空间),或客户端存根需要修改.有些甚至说ADB有一个bug.这在Axis的早期版本当然是一个错误,但在邮件档案馆中有很多帖子说明该错误已修复.这些邮件归档与Axis2的早期版本相关.
现在我的问题是:
>它还是一个bug吗?
>在WSDL或Client存根中需要进行什么改变?
值得一提的是,我创建了一个类似的Web服务,它将一个“String”返回给客户端.它工作正常!因此,当涉及到复杂的数据类型时,会失败.
有关于Apache’s website的一些信息,在“已知限制”标题下…
它说:“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>