使用WebServiceContext测试@Webservice EJB(Arquillian)

时间:2014-08-08 17:43:44

标签: java web-services jax-ws jboss-arquillian

我遇到同样的问题来自this answer,但我的环境使用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或其他东西......

1 个答案:

答案 0 :(得分:0)

我今天在测试时遇到了同样的问题。从我所看到的,处理程序没有Web Service状态的视图。如果这是Arquillian特有的,我不确定。

但是,这不是问题,因为SOAPMessageContext方法的handleMessage参数扩展了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);