簡體   English   中英

使用WebServiceContext測試@Webservice EJB(Arquillian)

[英]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.

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