我使用以下方法创建了一个 Web 服务:
- Apache Axis 2 CodeGen 向导 v.1.6.2(绑定:ADB)
- 日蚀朱诺
- 雄猫 7
- 爪哇 6
该服务将自定义 Java 对象 (DataBean) 返回给客户端,但我偶然发现了客户端代码中的异常:
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {schemaTargetNs}message
根据我的研究,再过一遍……我认为这是一个非常普遍的问题,但还没有关于应该采取什么措施来纠正它的结论性答案。
此论坛和其他论坛上的一些帖子声明 WSDL 需要修改(某些名称空间),或者客户端存根需要修改。有些人甚至说亚行存在错误。这肯定是早期版本的 Axis 中的一个错误,但邮件存档中有许多帖子表明该错误已修复。这些邮件归档与 Axis2 的早期版本有关。
现在我的问题是:
- 它仍然是一个错误吗?
- 在 WSDL 或 Client stub 中究竟需要更改什么?
值得一提的是,我创建了一个类似的 Web 服务,它将“字符串”返回给客户端。它工作正常!因此,当涉及复杂数据类型时,它会失败。
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>
现在我该如何解决这个问题?我应该在这里包含一些其他代码片段吗?