微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Web服务 – ADBException:意外的子元素

我创建了一个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>

现在我如何解决这个问题?我应该在此附加一些其他代码片段吗?

解决方法

“意外的子元素”表示接收者收到的消息包含接收者不期待的XML元素. “{schemaTargetNs} message”是遇到的意外元素的名称.换句话说,发送方向接收方发送了无效消息.

>发件人可能已经包含了一个它不应该的元素.
>发件人可能已经省略了一个强制性元素.
>发件人可能将元素放在错误的顺序.
>发件人可能发送了完全不正确的消息.

如果服务器发出您报告的异常,则客户端向服务器发送无效消息.如果客户端发出异常,那么错误是从服务器到客户端的响应.

原文地址:https://www.jb51.cc/html/224641.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐