web-services - ADBException : Unexpected subelement

标签 web-services exception axis2

我使用以下方法创建了一个 Web 服务:

  • Apache Axis 2 CodeGen 向导 v.1.6.2(绑定(bind):ADB)
  • eclipse 朱诺
  • Tomcat 7
  • Java 6

  • 该服务将自定义 Java 对象 (DataBean) 返回给客户端,但我偶然发现了客户端代码中的异常:
    org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {schemaTargetNs}message
    

    根据我的研究,再过一遍……我认为这是一个非常普遍的问题,但还没有关于应该采取什么措施来纠正它的结论性答案。

    此论坛和其他论坛上的一些帖子声明 WSDL 需要修改(某些 namespace ),或者客户端 stub 需要修改。有些人甚至说亚行存在错误。这肯定是早期版本的 Axis 中的一个错误,但邮件存档中有许多帖子表明该错误已修复。这些邮件归档与 Axis2 的早期版本有关。

    现在我的问题是:
  • 它仍然是一个错误吗?
  • 在 WSDL 或 Client stub 中究竟需要更改什么?

  • 值得一提的是,我创建了一个类似的 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/

    相关文章:

    c# - Web 服务拒绝接收参数并以 JSON 格式回复

    java - Resteasy Client 在方法抛出异常后保持连接分配

    java - 即使抛出异常,Lambda 返回 200

    android - 在 Android 中全局处理捕获的异常

    c# - WP7 中 IsolatedStorageSettings 中的参数异常

    java - 将自定义命名空间定义为从 wsdl - Axis2 eclipse 生成的文件的包映射

    iphone - 如何将一种货币值(value)转换为另一种货币值(value)

    生成的客户端 stub 中的 Java Axis2 IllegalStateException

    java - wsdl2java 在没有服务的情况下使用 Apache Axis2 for WSDL

    c++ - 我如何(优雅地)终止 gSOAP 服务器?