簡體   English   中英

JAX-WS-將WebServiceContext注入僅具有@Oneway方法的@WebService中

[英]JAX-WS - inject WebServiceContext into @WebService that only has @Oneway methods

我使用的是SAP NetWeaver 7.3 EHP 1(已通過JEE5認證),並且已經為現有WSDL生成了Web服務框架。 此Webservice中的所有方法都是非阻塞的,因此使用@Oneway注釋。 該服務本身工作正常。

我還需要訪問注入的WebServiceContext ,這是麻煩開始的地方。 我可以很好地注入上下文,但是對它的每次調用都只能在特定於服務器的NPE或ISE中結束。 我有點理解,因為非阻塞調用是由SAP的JAX-WS實現異步執行的。 但是,我嘗試通過查看JAX-WS規范來驗證此行為。 現在我要么是盲人,要么規范中沒有明確指出WebServiceContext不能在非阻塞Web方法中使用。 實際上,在該規范最新版本的第5.3章中,沒有一次提到@Oneway 主要描述是

javax.xml.ws.WebServiceContext接口使端點實現對象以及可能共享其執行上下文的任何其他對象可以訪問與正在服務的請求有關的信息。 在調用其Web服務方法之一之外的組件的WebServiceContext上調用任何方法的結果是不確定的。 如果實現檢測到這種用法,則應拋出java.lang- .IllegalStateException。

我想重點是“正在處理的請求”的定義。 在SOAP操作的異步處理時,HTTP請求已經完成。 但是話又說回來,我沒有訪問上下文“如果調用它的Web服務方法之外”。 我糊塗了...

你們是否有人知道是否應允許我以非阻塞的Web方法訪問WebServiceContext 謝謝!

您是對的:規范對此限制一無所知-只是隱含地暗示。

從JAX-WS規范(2.2 Rev A):

WebServiceContext被視為可注入的資源,可以在初始化端點時進行設置。 然后,WebServiceContext對象將使用線程本地信息返回正確的信息,而不管同時使用多少個線程來服務尋址到同一終結點對象的請求。

應該在存在端點的情況下才可操作,但僅當在與建立請求上下文信息並將其存儲到線程本地內存存儲的同一線程中使用時才可使用。 假定WebServiceContext主要是MessageContext信息,它是HTTP請求/ Servlet請求/ WSDL操作設置,則線程本地上下文信息可能需要由最初編組SOAP / HTTP請求的線程填充,這意味着以后的異步處理線程沒有此信息可用。 僅基於閱讀-尚未測試此組合。

暫無
暫無

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

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