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”是遇到的意外元素的名称.换句话说,发送方向接收方发送了无效消息.

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

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

相关文章

vue阻止冒泡事件 阻止点击事件的执行 &lt;div @click=&a...
尝试过使用网友说的API接口获取 找到的都是失效了 暂时就使用...
后台我拿的数据是这样的格式: [ {id:1 , parentId: 0, name:...
JAVA下载文件防重复点击,防止多次下载请求,Cookie方式快速简...
Mip是什么意思以及作用有哪些