我使用創建的Web服務:ADBException:意外子元件
- Apache Axis的2的CodeGen嚮導v.1.6.2(綁定:ADB)
- 的Eclipse朱諾
- 的Tomcat 7
- Java 6的
服務返回客戶端的自定義Java對象(DataBean),但我偶然發現客戶端代碼中的異常:
org.apache.axis2.AxisFault: org.apache.axis2.databinding.ADBException: Unexpected subelement {schemaTargetNs}message
從我所研究的結果來看,再重複一次......我認爲這是一個非常普遍的問題,但還沒有得出確鑿的答案,應該如何糾正它。
此論壇和其他論壇上的一些帖子聲明WSDL需要修改(某些名稱空間),或者客戶端存根需要修改。有人甚至表示亞行有一個漏洞。這肯定是早期版本的Axis中的一個bug,但是郵件歸檔中有很多帖子指出bug已修復。這些郵件歸檔與早期版本的Axis2相關。
現在我的問題是:
- 這還算是一種錯誤嗎?
- 究竟需要在WSDL或客戶端存根中更改什麼?
值得一提的是,我創建了一個類似的Web服務,它將「String」返回給客戶端。它工作正常!所以,當涉及複雜的數據類型時,它會失敗。
有上Apache's website一些信息,標題爲「已知限制」下...
記載:「亞行意味着是一個‘簡單’的數據綁定框架,並不意味着所有的編譯模式類型。以下限制是最突出。
- 複雜類型的擴展和限制。」
是這樣的問題嗎?
以下是這可能是一些你感興趣的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,對我來說似乎很好。 –
那麼,如果您要在調試器中運行客戶端,和/或如果您有org.apache.axis2.AxisFault的堆棧跟蹤,那麼您可以在消息解析器中找到引發錯誤的特定代碼行。這一點應該很明顯,它期望的是什麼因素。 – Kenster
這可能要歸結爲客戶端基於WSDL的錯誤副本生成的事實。所以服務器發送的響應與客戶預期的不匹配。 – Kenster