在CDI/Weld下使用Apache CXF的JAX-WS



我在CDI下看到了关于CXF的其他问题,但它们似乎都是针对JAX-RS风格的web服务的。

JAX-WS在这种配置中可能吗?如果没有,我如何在非EE容器(Tomcat8)中使用CDI/Weld公开JAX-WS服务?

如果您想在Tomcat中使用CDI和JAX-WS,那么最简单的方法就是使用ApacheTomEE。

TomEE基本上是一个标准的Apache Tomcat,但包含了许多JavaEE库。它带来了一个完整的CDI容器、JAX-RS、JAX-WS等。对于JAX-WS,您应该采用"加号"变体。

如果你想让它真正嵌入或更小(在大小上,而不是在功率上),那么你也可以看看Apache Meecroave,并将CXF的JAX-WS部分绑定到它上。

Meecroave是一款基于EE8技术的小型(9MB)应用服务器,可以独立使用或嵌入使用(通过Meecroave#bake())。它是纯Apache:Tomcat(Servlet-4.0)、OpenWebBeans(CDI-2.0)、Johnzon(JSON-P-1.1、JSON-B-1.0)、CXF、log4j2。

首先,您必须在tomcat上启用CDI。请参见此处。

在我的例子中,@Inject不适用于使用@WebService的类,但我可以使用CDI.current().select(MyClass.class).get()注入。

虽然它在@PostConstruct上不起作用,但您可以在@WebMethod中使用它。

[注意]我使用的是Metro而不是Apache CXF

最新更新