的WSDL看起來是這樣的:陣列包裹在複雜類型的Java代碼(軸1.4)被解開
<xsd:element name="Parent">
<xsd:complexType>
<xsd:sequence>
<xsd:element maxOccurs="unbounded" ref="tns:Child"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
預期的行爲
如果我讓軸1.4生成基於WSDL的Java代碼,我期待中的以下我的對象:
public class MyComplexObject {
private Parent parent;
}
的Parent
類將包括Child
對象的數組。
public class Parent {
private Child[] child;
}
實際行爲
的實際行爲是Child
對象列表被直接限定在父對象的層次:
public class MyComplexObject {
private Child[] parent;
}
當我們通過填充陣列調用web服務,這將導致以下XML:
<Parent>
...
</Parent>
<Parent>
...
</Parent>
造成服務器端出現故障。看來,Axis在複雜類型的嵌套數組中遇到了困難。任何人面臨同樣的問題,並知道任何解決方法/修復?
發現
經過一番調查,我能夠通過添加一個空場的XSD定義,產生預期的行爲:
<xsd:element name="Parent">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Dummy" type="xsd:string"/>
<xsd:element maxOccurs="unbounded" ref="tns:Child"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
看來,在這種情況下,軸正確地創建一個Parent
包裝對象:
public class Parent {
private String dummy;
private Child[] child;
}
我的XML輸出是正確的:
<Parent>
<Dummy>...</Dummy>
<Child>...</Child>
<Child>...</Child>
</Parent>
如此看來,這的確是在軸1.4的錯誤...
這並沒有做的伎倆,但不錯的嘗試:)好點,雖然進一步調查這些工具的參數。 – 2012-02-22 08:04:31