1

wsimport から生成されたクラスを使用して Web サービスを呼び出す JAX-WS クライアントを作成しました。クライアントをローカルでテストするために、Web サービスの実装を作成し、ローカルで公開して呼び出しました。すべてが期待どおりに機能しました。

私が気づいたことの 1 つは、クライアントがエンドポイントに接続して GET を発行し、続いて wsdl を探しているエンドポイントに対して GET を使用して別の接続を発行し、最後に同じ接続でペイロードを使用して POST を発行することです。

tcpmon の出力は次のとおりです (有罪を保護するために編集されています)。

GET /someWS HTTP/1.1
User-Agent: Java/1.7.0_03
Host: 127.0.0.1:9877
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

----------------------------------

GET /someWS?wsdl HTTP/1.1
User-Agent: Java/1.7.0_03
Host: 127.0.0.1:9877
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Connection: keep-alive

POST /someWS HTTP/1.1
Accept: text/xml, multipart/related
Content-Type: text/xml; charset=utf-8
SOAPAction: "document/http://someUrl"
User-Agent: JAX-WS RI 2.2.4-b01
Host: 127.0.0.1:9877
Connection: keep-alive
Content-Length: 610

<Valid Soap message here/>

これは標準的な動作ですか、それとも何かを台無しにしましたか? JAX-WS RI 2.2 を使用しています。これはローカルでは問題なく動作しますが、特定の本番 WS は最初の GET 要求に非常に不満を持っており、500 をスローします。私は、GET 要求を抑制して POST にスキップできることを望んでいました。

4

1 に答える 1

3

クライアントは wsdl ファイルをローカルにキャッシュしていないため、すべての POST の前に GET 要求が表示されます。GET は wsdl ファイルを取得するためのもので、POST は実際の Web サービス要求のためのものです。クライアントに wsdl をローカルにキャッシュして参照するように依頼します。

于 2013-05-09T14:25:20.717 に答える