2016-05-04 66 views
1

我有一個webservice,它返回一個包含數組的對象。我由wsdl4j生成的Bean類。如果我調用服務,對象始終返回正確的字段,但數組始終只有一個條目。 web服務響應有兩個條目,但Axis中的第二個條目將丟失。該服務似乎很好,只有在Axis代碼中的處理似乎是錯誤的。Axis 1.4不會反序列化數組right

這是響應主體

[<projectDataReturn xsi:type="ns4:ProjectDataResult" xmlns:ns4="http://results.ws.appserver.secutrial.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <errorCode xsi:type="xsd:int">0</errorCode> 
    <message xsi:type="soapenc:string" xsi:nil="true" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/> 
    <statusCode xsi:type="xsd:int">1</statusCode> 
    <project xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">HAHA</project> 
    <centres xsi:type="ns5:CentreBean" xmlns:ns5="http://beans.eo.secutrial.de"><name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center1</name></centres> 
    <centres xsi:type="ns6:CentreBean" xmlns:ns6="http://beans.eo.secutrial.de"><name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center2</name></centres> 
</projectDataReturn>] 

的所以在最後我只ProjectDataResult的CentreBean陣列中獲得「中心2」的內容。我試過單步調試,但沒有成功。

我發現方法RPCElement.publishToHandler()之後RPCElement的參數是錯誤的。該方法重放一些SAX事件(org.apache.axis.message.SAX2EventRecorder),兩個CentreBeans都被處理,但只有最後一個將成爲結果的一部分。

有沒有人解決這個問題?

回答

1

我想問題是如何設計web服務。

這些中心應該是一個可以發送多箇中心數據的複雜類型。 (數組類型)

因此理想情況下,網絡服務應該已經返回

[<projectDataReturn xsi:type="ns4:ProjectDataResult" xmlns:ns4="http://results.ws.appserver.secutrial.de" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
<errorCode xsi:type="xsd:int">0</errorCode> 
<message xsi:type="soapenc:string" xsi:nil="true" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"/> 
<statusCode xsi:type="xsd:int">1</statusCode> 
<project xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">HAHA</project> 
<centres xsi:type="ns5:CentreBean" xmlns:ns5="http://beans.eo.secutrial.de"> 
    <centre> 
     <name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center1</name> 
    </centre> 
    <centre> 
     <name xsi:type="soapenc:string" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">Center1</name> 
    </centre> 
</centres> 

]

那麼我想這裏是說,在「中心」應該是有一個bean數組類型的「中心」豆和每個中心將具有字符串類型名稱。

如果web服務被設計成這種方式來返回數據,那麼軸會像我上面提到的那樣生成存根,並且您可以將數組作爲一個數組。

現在發生的事情是它通過兩個中心,並且因爲它不是陣列類型,Centre2的值將在Centre2讀取第二個值時被其覆蓋。

+0

這是可能的,但我無法更改服務,它由外部網站管理。 – arothe

+0

我已經用http://stackoverflow.com/a/37549073/1503313解決了這個問題 – arothe