背景を説明するために、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 フレームワークに関する知識が本当に不足しているので、軽く行ってください:)