[英]Test @Webservice EJB with WebServiceContext (Arquillian)
我從這個答案中遇到了同樣的問題,但是我的環境使用Arquillian而不是OpenEJB進行測試。
我的問題是我以編程方式獲取了用戶主體名稱,盡管這在正在運行的應用程序中運行良好,但此調用在測試執行過程中失敗並出現以下異常:
javax.ejb.EJBException: java.lang.IllegalStateException
at org.jboss.ws.common.injection.ThreadLocalAwareWebServiceContext.getWebServiceContext(ThreadLocalAwareWebServiceContext.java:88)
at org.jboss.ws.common.injection.ThreadLocalAwareWebServiceContext.getUserPrincipal(ThreadLocalAwareWebServiceContext.java:74)
有什么辦法可以使這項工作嗎? 通過模擬WebServiceContext或其他方式...
我今天進行測試時遇到了同樣的問題。 從我可以看到的角度來看,處理程序沒有Web服務狀態的視圖。 如果這是Arquillian特有的,我不確定。
但是,這不是問題,因為handleMessage
方法的SOAPMessageContext
參數擴展了MessageContext
接口,因此您應該能夠直接從SOAPMessageContext
訪問幾乎所需的任何內容,而無需訪問WebServiceContext
。 我可以看到的唯一明顯的例外是用戶主體。
@Override
public boolean handleMessage(SOAPMessageContext soapMessageContext) {
String value = (String) soapMessageContext.get("myKey");
}
如果您想將一個對象放入MessageContext
映射中並且還希望它在端點內可用,則只需添加一條注釋,請確保設置范圍:
soapMessageContext.put("myKey", "someValue");
soapMessageContext.setScope("myKey", MessageContext.Scope.APPLICATION);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.