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