我使用以下方法创建了一个 Web 服务:
该服务将自定义 Java 对象 (DataBean) 返回给客户端,但我偶然发现了客户端代码中的异常:
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {schemaTargetNs}message
根据我的研究,再过一遍……我认为这是一个非常普遍的问题,但还没有关于应该采取什么措施来纠正它的结论性答案。
此论坛和其他论坛上的一些帖子声明 WSDL 需要修改(某些 namespace ),或者客户端 stub 需要修改。有些人甚至说亚行存在错误。这肯定是早期版本的 Axis 中的一个错误,但邮件存档中有许多帖子表明该错误已修复。这些邮件归档与 Axis2 的早期版本有关。
现在我的问题是:
值得一提的是,我创建了一个类似的 Web 服务,它将“字符串”返回给客户端。它工作正常!因此,当涉及复杂数据类型时,它会失败。
有一些关于 Apache's website 的信息,在标题“ 已知限制 ”下...
上面写着:“ ADB 是一个‘简单’的数据绑定(bind)框架,并不意味着编译所有类型的模式。以下限制是最突出的 。
那是问题吗?
以下是您可能感兴趣的 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>
现在我该如何解决这个问题?我应该在这里包含一些其他代码片段吗?
最佳答案
“意外的子元素”表示接收者收到的消息包含接收者不期望的 XML 元素。 “{schemaTargetNs}message”是它遇到的意外元素的名称。换句话说,发送方向接收方发送了无效消息。
如果服务器发出您报告的异常,则客户端向服务器发送了无效消息。如果客户端发出异常,则错误在服务器对客户端的响应中。
关于web-services - ADBException : Unexpected subelement,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16565647/