【发布时间】:2013-05-10 01:26:48
【问题描述】:
我使用以下方法创建了一个 Web 服务:
- Apache Axis 2 CodeGen 向导 v.1.6.2(绑定:ADB)
- Eclipse 朱诺
- 雄猫 7
- Java 6
Service 将自定义 Java 对象 (DataBean) 返回给客户端,但我偶然发现客户端代码中出现异常:
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {schemaTargetNs}message
根据我的研究,一遍遍……我认为这是一个非常普遍的问题,但对于应该采取什么措施来纠正它,还没有一个确凿的答案。
此论坛和其他论坛上的一些帖子声明 WSDL 需要修改(某些名称空间),或者客户端存根需要修改。有些人甚至说亚行存在错误。这肯定是早期版本的 Axis 中的一个错误,但邮件存档中有许多帖子指出该错误已修复。这些邮件归档与 Axis2 的早期版本有关。
现在我的问题是:
- 这还是一个错误吗?
- WSDL 或客户端存根中究竟需要更改哪些内容?
值得一提的是,我创建了一个类似的 Web 服务,它将“字符串”返回给客户端。它工作正常!因此,当涉及复杂数据类型时,它会失败。
有一些关于Apache's website 的信息,在“已知限制”标题下...
上面写着:“ADB 旨在成为一个‘简单’的数据绑定框架,并不意味着编译所有类型的模式。以下限制最为突出。
- 复杂类型扩展和限制。”
这是问题吗?
以下是您可能感兴趣的 WSDL 文件中的 sn-p...
<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>
现在我该如何解决这个问题?我应该在这里包含一些其他代码 sn-ps 吗?
【问题讨论】:
标签: web-services exception axis2