簡體   English   中英

了解JAX-WS中的@Oneway注釋

[英]Understanding @Oneway annotation in JAX-WS

根據javadoc:

表示給定的@WebMethod只有輸入消息而沒有輸出。 通常,單向方法在執行實際業務方法之前將控制線程返回給調用應用程序。 如果標記為@Oneway的操作具有返回值或Holder參數,則181處理器應報告錯誤,或聲明任何已檢查的異常。

那么我可以假設,如果我需要異常處理(選中或取消選中),建議不要使用此注釋嗎? 我沒有從業務邏輯中返回任何內容,但是我仍然有興趣了解超時和其他各種特定於調用SOAP方法的錯誤。 這個注釋是否意味着我無法訪問HTTP返回碼或拋出異常?

問題 :我最好自己進行線程化以獲得真正的異步調用,並刪除@Oneway注釋嗎?

@Oneway意味着什么都不會逃脫你的方法,既不回應也不例外。 這有兩個原因:

  • 技術上異常只是另一種類型的響應(SOAP錯誤),因此它不能從單向方法返回(它不能返回任何東西)

  • 通常單向方法由Web服務框架異步執行(我知道 odes)。 框架立即返回,因此即使在單向方法處理開始之前,您的客戶也可能收到空響應。 拋出異常時,原始HTTP連接早已消失。

因此,如果要傳播異常或超時,請使用帶有空響應*的標准SOAP方法,並顯式聲明很少的錯誤。 如果你想在一段時間后超時你的電話,你需要單獨的線程池和阻止等待響應gor給定的時間段。

*請不要將空的SOAP響應(沒有內容的XML文檔,只是根標記,包裝在SOAP信封中)與空HTTP響應混淆( 沒有發回任何內容 )。 請記住,SOAP不僅限於HTTP。 例如,如果您使用JMS或電子郵件傳輸,則普通雙向功能的空響應(或故障)是從服務器發送到客戶端的另一條消息。 單向方法只是一個最重要的消息, 沒有任何回送。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM