我在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