2016-05-04 9 views
1

配列を含むオブジェクトを返すwebserviceがあります。私がwsdl4jによって生成したBeanクラス。私がサービスを呼び出すと、オブジェクトは常に正しいフィールドを返しますが、配列には常に1つのエントリしかありません。 Webサービスの応答には2つのエントリがありますが、Axisのどこかに2番目のエントリが失われます。サービスはうまくいくようですが、Axisコード内の処理だけが間違っているようです。Axis 1.4は配列を逆シリアル化しません。

これは、だから、最後に、私は唯一のProjectDataResultのCentreBean配列に「Center2」を取得レスポンスボディの内容

[<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>] 

です。私はシングルステップのデバッグを試みましたが、成功しませんでした。

RPCElementのパラメータが間違っているメソッドRPCElement.publishToHandler()が見つかりました。このメソッドはいくつかのSAXイベント(org.apache.axis.message.SAX2EventRecorder)を再生し、両方のCentreBeansが処理されますが、最後のものだけが結果の一部になります。

誰でもこれを修正しましたか?

答えて

1

私は問題がウェブサービスの設計方法にあると思います。

センターは、複数のセンターデータを送信できる複合タイプである必要があります。 (のArrayType)

だから、理想的に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> 

]

を返すされている必要があります配列型の "Center" Beanと各Centerは文字列タイプ名を持ちます。

ウェブサービスがこのようにしてデータを返すように設計されている場合、軸は上記のようにスタブを生成し、配列として配列をフェッチできます。

これは両方のセンターを経由して実行され、配列型ではないため、Centre1の値は2番目の値を読み取るときにCentre2によってオーバーライドされます。

+0

可能ですが、私はサービスを変更することはできません。外部サイトによって管理されています。 – arothe

+0

私はhttp://stackoverflow.com/a/37549073/1503313でこの問題を解決しました。 – arothe

関連する問題