Web services 使用WebServiceContext测试@Webservice EJB(使用OpenEJB?)

Web services 使用WebServiceContext测试@Webservice EJB(使用OpenEJB?),web-services,testing,jax-ws,cxf,openejb,Web Services,Testing,Jax Ws,Cxf,Openejb,我有一些EJB作为JAX-WS Web服务: @WebService @Stateless @Remote(MobileFacade.class) public class MobileFacadeBean implements MobileFacade { ... @Resource WebServiceContext wsc; ... } 在此Web服务类中,通过@Resource注入WebServiceContext。我使用这个WebServiceCon

我有一些EJB作为JAX-WS Web服务:

@WebService
@Stateless
@Remote(MobileFacade.class)
public class MobileFacadeBean implements MobileFacade {
    ... 

   @Resource
   WebServiceContext wsc;

    ...
}
在此Web服务类中,通过@Resource注入WebServiceContext。我使用这个WebServiceContext来获取实现中的主体。这很有效,但现在我想知道如何对这个类进行单元测试

到目前为止,我正在使用OpenEJB测试我的EJB。因为Web服务类也是一个无状态会话Bean,所以我真的希望在这里使用相同的方法。然而,它的工作并没有那么容易——当然,它抱怨说,如果不作为Web服务调用,就没有WebServiceContext

所以第一个问题是:有没有办法在OpenEJB中模拟WebServiceContext

如果没有,您会选择什么方法来测试这种Web服务类

干杯, Frank

OpenEJB示例zip文件中有一些@WebService单元测试示例。你想要的一切都应该很好

webservice安全示例听起来与您想要的完全一样。在线版本使用@RolesAllowed使容器进行安全检查,而不是在代码中进行检查,但是可以在代码中检查原则。下面是对该示例的一个稍加修改的版本,它对我来说没有任何问题

豆子 测试 图书馆 如果使用maven,请将正常的openejb核心依赖项切换为openejb cxf,如下所示。这将把apachecxf和OpenEJB/CXF集成代码添加到类路径中

<dependency>
  <groupId>org.apache.openejb</groupId>
  <artifactId>openejb-cxf</artifactId>
  <version>3.1.4</version>
  <scope>test</scope>
</dependency>

如果不使用maven,最简单的方法就是从OpenEJB zip文件的lib/目录添加所有JAR。

David,在CalculatorTest中的回答中,您使用了CalculatorWs.class,它的接口是否与webservice端实现中使用的接口相同。我们必须创建web服务客户端吗

同样在David的例子中,而不是


QName calcServiceQName = new QName("http://superbiz.org/wsdl", "CalculatorWsService");
使用


谢谢你的回答。听起来是个好办法。我会尽快试一试。
<dependency>
  <groupId>org.apache.openejb</groupId>
  <artifactId>openejb-cxf</artifactId>
  <version>3.1.4</version>
  <scope>test</scope>
</dependency>

QName calcServiceQName = new QName("http://superbiz.org/wsdl", "CalculatorWsService");

QName calcServiceQName = new QName("http://superbiz.org/wsdl", "CalculatorPort");