2

背景を説明するために、SOAP を介してサードパーティと対話するクライアントを作成しようとしています。最初に、javax.xml.soap SAAJ を使用してこれを展開し始めましたが、SOAPConnection を作成するときにタイムアウトのオプションがないことに気付きました。

タイムアウトがあるAXISを検討しましたが、回避するように警告されており、パフォーマンスに関してはあまり優れていません。上層部はこれを最後の修復と考えているようです。

javax.xml.ws Web サービス ルートは、それが Web サービスである場合にのみ、コンテキスト プロパティにタイムアウト設定を入れることができるため、うまく機能することを示唆する人もいます。

これが状況です。私がリクエストを送信しているサードパーティには、実際には WSDL ファイルまたは URL がありません。元のアイデアは、SOAP リクエストを作成して送信することでした。SAAJ にタイムアウト設定があればうまく機能したでしょう。 .

だから私は考えているのですが、私の無知を許してください.SAAJ javax.xml.soapメソッドのリクエストを構築する代わりに、Webサービスのような通信をモデル化して実装することはできますか? もしそうなら、誰かが本当に私を指摘できますか?私が見つけたほとんどの文書は、WSDL からのスタブとクラスの生成に依存しているようです。

これはすべて、このサードパーティ SOAP API への接続のタイムアウト設定を設定するためのものです。

また、タイムアウトを設定できる HttpConnection のように扱うことを提案する人もいますが、私が見つけた欠点は、SOAPMessage タイプのオブジェクトを返さなくなったことです。

だから基本的に私はこれを変更しようとしています:

    SOAPMessage soapMessage       = messageFactory.createMessage();
    SOAPConnection soapConnection = soapConnectionFactory.createConnection();

    SOAPPart soapPart         = soapMessage.getSOAPPart();
    SOAPEnvelope soapEnvelope = soapPart.getEnvelope();
    SOAPHeader soapHeader     = soapEnvelope.getHeader();
    SOAPBody soapBody         = soapEnvelope.getBody();
    ....
    soapConnection.call(soapMessage, url);

これを行うことができるように、よりWebサービスに似たものにします。

requestContext.put(BindingProviderProperties.REQUEST_TIMEOUT, 2000); 
requestContext.put(BindingProviderProperties.CONNECT_TIMEOUT, 2000);

myService.callMyRemoteMethodWith(myParameter1, myparameter2);

私は javax.ws フレームワークに関する知識が本当に不足しているので、軽く行ってください:)

4

1 に答える 1

0

クライアント jar ファイル (スタブ) は、WSDL なしでは作成できません。簡単に言えば、WSDL はあらゆる Web サービス実装の中核です。

リモート サービスの WSDL を作成することは、リモート サービスが公開するまではお勧めできません。長期的には実行できない可能性があるからです。明日、このサード パーティ リクエストのパラメータが変更された場合、対応する WSDL の変更に労力と時間を費やしてもよろしいですか? それは十分なメンテナンスにつながります。

あなたの基本的な必要性は、 SOAPMessage タイプのオブジェクトを返す必要があることだと思います。現在のアプローチをそのまま維持してタイムアウトを実装する方法を検討する必要があると思います。

于 2012-09-25T19:30:19.563 に答える