繁体   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