1

サーバーWSDLからクライアントスタブを生成するためにAxis2フレームワークを使用したSOAPベースの統合にひどく行き詰まっています。シナリオは次のとおりです。

  1. 最初にログインAPI呼び出しが常にあり、SOAP本文でSuccess応答を返し、HTTPヘッダーでTemporaryRedirectを返します。HTTPヘッダーの[場所]フィールドにセッションIDを含むURLも提供します。
  2. 次のAPI呼び出しは、このリダイレクト場所で行う必要があります。同じTCP接続で、適切な応答を取得します。
    1. 問題は、Axis2で生成されたスタブを使用したWebサービス実装の一部として、このリダイレクトURLをリロードし、--- "stub = new Stub(newurl)"として再インスタンス化する必要があることです。
    2. これが行われるとすぐに、新しいTCP接続が作成されるため、次のリクエストでは、ログインAPIと同期していないため、「セッションIDが無効です」という応答が返されます。

私はこのフォーラムで解決策として言及されているすべてを試しましたが、何もうまくいきません。たとえば-


MultiThreadedHttpConnectionManager httpConnectionManager = new MultiThreadedHttpConnectionManager();
            HttpClient httpClient = new HttpClient(httpConnectionManager);


            ServiceClient serviceClient = stub._getServiceClient();
            Options opts = stub._getServiceClient().getOptions();

            opts.setTo(new EndpointReference(prop.getProperty("target_end_point_url")));
            opts.setProperty(HTTPConstants.REUSE_HTTP_CLIENT, Constants.VALUE_TRUE);
            opts.setProperty(HTTPConstants.CACHED_HTTP_CLIENT, httpClient);

            serviceClient.setOptions(opts);

            stub._setServiceClient(serviceClient);

同様に、私は他の多くのオプションも試しました。しかし、それはまったく役に立ちません。

4

1 に答える 1

0

まったく同じ問題に直面しました。次の手順で問題が解決しました。1. HttpClient を使用してログインします。ログインを実行するためにスタブ オブジェクトを使用しないでください。2. ロケーション ヘッダー URL を使用して、新しいスタブ オブジェクトを作成します。つまり、stub = new Stub(locationURL) です。(既存のオプション設定を保持する必要があります。) 3. サーバーが TCP 接続を切断するデフォルトのタイムアウトがあります。私の場合は50秒でした。したがって、ステップ 1 でログインを実行するとすぐに、40 秒ごとにタイマーを実行して、同じ HttpClient オブジェクトの HeadMethod を使用して空のリクエストを新しい場所の URL に送信します。

于 2013-06-01T06:14:18.053 に答える