2016-04-14 48 views
0

我正在用JAVA構建一個玩框架應用程序。
我必須與SOAP服務進行通信。由於play ws沒有SOAP客戶端,我正在使用wsimport工具生成使用jax-ws的代碼。 使用wsimport我設法生成具有回調方法的異步客戶端代碼。在玩框架中使用異步客戶端SOAP服務

getDataAsync(getDataReq,asyncHandler) 

asynHandler{ 
@Override 
    public void handleResponse(GetAccountBalanceRs) { 

    } 
} 

現在asynHandler是回調函數,我認爲handleResponse將被調用一次getDatAsync完成。

現在的問題是如何利用這個來返回CompletionStage<Result>我JAVA。

我發現了另一個類似的線程,它是scala (Java/Scala Future driven by a callback)。

回答

0

經過一番Google搜索,我找到了解決辦法。

在異步處理(回調函數)創建

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

,這將來返回到控制器。

稍後當請求成功完成將結果設置。 這可以在「handleResponse」函數中完成。

還有一點要記住的是,如果我們使用默認的WS實現阻塞(jax-ws)。但是這個問題可以通過使用具有非阻塞方法請求的apache cxc庫來解決。爲此,我們只需要添加apache cxc dependancies

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