6

jboss のローカル マシンでアプリケーションを実行しています。
wsdl ファイルをダウンロードし、Eclipse で Java コードを生成しました。実行して例外があります:

リクエストの処理中に例外がキャッチされました: デシリアライゼーション エラー: java.lang.NumberFormatException: For input string: ""

(アプリケーションは別の単純な WS で正しく動作します)。

いくつかのグーグル検索の後、コードが間違った xml を生成することがわかりました:
期待:

<soapenv:Body>
    <ns1:setLevel soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        xmlns:ns1="###">
        <id xsi:type="xsd:string">x2148</id>
        <level xsi:type="xsd:long">5</level>
    </ns1:setLevel>
</soapenv:Body>

しかし、TCPMon/Fiddler を通じて、私のリクエストが次のようになっていることがわかりました。

<soapenv:Body>
    <ns1:setLevel soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        xmlns:ns1="###">
        <id xsi:type="xsd:string">x2148</id>
        <level href="#id0" />
    </ns1:setLevel>
    <multiRef id="id0" soapenc:root="0"
        soapenv:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
        xsi:type="xsd:long" xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/">5</multiRef>
</soapenv:Body>  

グーグルで調べた後、解決策が変更であることがわかりました

<parameter name="sendMultiRefs" value="true"/>

サーバー側の server-config.wsdd ファイルで false をオンにします。しかし、私はこのファイルを持っていません。
解決策はありますか?実行時にxmlファイルを変更するという1つの解決策しかありませんが、それは良くありません。

4

1 に答える 1

1

server-config.wsdd ファイルは、リモート サービス記述の一部です。ダウンロードした WSDL を公開したエンティティ (サービス プロバイダ) は、WSDL を変更して再デプロイする必要があります。サービスを公開した場合は幸運です...変更できます。サードパーティと取引する場合は不運です。

レスポンスにスタイルシートを適用して複数参照を平坦化することで、同様の問題に対処しました。実際、StackOverflow からスタイルシートを取得しました [こちら][1] multiRef でエンコードされた SOAP メッセージを平坦化するための XSLT 変換の作成

期待していたスキーマに応答を平坦化するために、そのままでかなりうまく機能します。ただし、multiRefs の multiRefs を処理しないことに注意してください。私はそれに対する解決策を自分で必要としています。

于 2013-02-05T22:01:16.583 に答える