2014-11-04 93 views
2

我有點在以下情況下丟失:響應後請求權?

我的web服務使用表單數據消費POST請求。我必須回答200 OK,否則發件人認爲請求失敗。

在回答200之後,我想繼續在遠程主機上調用另一個web服務,並使用我剛收到的一些數據。

我的web服務使用POST請求和@GET註釋。這可以工作,我可以閱讀所有的表單數據。要調用另一個Web服務,我使用了Jersey Client API。這也很好。

我只是不知道如何切換從一個電話切換到另一個。所有東西都使用Jersey 2進行編程並部署在Tomcat中,因此沒有真正的應用服務器。沒有完整的Java EE堆棧可用。

我是否缺少一些中間件?我是否需要實現自定義事件循環或某個消息代理?

回答

1

不知道是否有任何「標準」來處理這種方式,但有一個CompletionCallback我們可以用AyncResponse註冊。

CompletionCallback:

接收請求處理完成事件的請求的處理的回調。

當整個請求處理結束時,即一旦對請求的響應已處理併發送回客戶端,或者當未映射的異常或錯誤傳播到容器時,就會調用完成回調。

AsyncResponse意味着異步處理請求,但我們可以馬上撥打resume把它當作是同步的。一個簡單的例子是像

@Path("/callback") 
public class AsyncCallback { 
    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public void postWithAsync(@Suspended AsyncResponse asyncResponse, 
             SomeObject object) { 

     asyncResponse.register(new CompletionCallback() { 
      @Override 
      public void onComplete(Throwable error) { 
       if (error == null) { 
        System.out.println("Processing new Request"); 
       } else { 
        System.out.println("Exception in Request handling"); 
       } 
      } 
     }); 
     Response response = Response.ok("Success").build(); 
     // Carry on like nothing happened 
     asyncResponse.resume(response); 
    } 
} 

你可以看到更多的解釋在Asynchronous Server-side Callbacks

+0

謝謝!我甚至讀過這一章,但完全忽略了這一部分。剛試過了。這可能是我需要的。 – raupach 2014-11-04 21:04:11