2016-04-14 24 views
0

JAVAでプレーフレームワークアプリケーションをビルドしています。
SOAPサービスと通信する必要があります。 wsにはSOAPクライアントがないので、wsimportツールを使用してjax-wsを使用しているコードを生成しています。 wsimportの使用コールバックメソッドを持つ非同期クライアントコードを生成することができました。playframeworkで非同期クライアントを使用するSOAPサービスを使用する

getDataAsync(getDataReq,asyncHandler) 

asynHandler{ 
@Override 
    public void handleResponse(GetAccountBalanceRs) { 

    } 
} 

asynHandlerは、私はgetDatAsyncが完了するとhandleResponseが呼び出されると仮定し、コールバック関数です。

ここで問題はどのようにこれを利用してCompletionStage<Result> i JAVAを返すことができるかです。

私はスケーラ向けの別の類似スレッドを見つけました (Java/Scala Future driven by a callback)。

答えて

0

ビットグーグルで解決策が見つかりました。 asyncHandlerで

(関数コールバック)

CompletableFuture<?> future = new CompletableFuture<>(); 

を作成し、コントローラには、この未来を返します。

後で要求が正常に完了すると、結果が未来に設定されます。 これは "handleResponse"関数で行うことができます。

もう1つ覚えておいていただきたいのは、デフォルトのWS実装を使用する場合、ブロック(jax-ws)です。しかし、この問題は、非ブロックメソッドリクエストを持つapache cxcライブラリを使用することで解決できます。そのためには、Apacheのcxc依存関係を追加するだけです。

http://web.archive.org/web/20141026094403/http://czechscala.wordpress.com/2013/05/13/non-blocking-soap-web-services-invocation

関連する問題