Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 泽西1.x到2.x使用CDI_Java_Cdi_Jersey 2.0_Tomcat8_Weld - Fatal编程技术网

Java 泽西1.x到2.x使用CDI

Java 泽西1.x到2.x使用CDI,java,cdi,jersey-2.0,tomcat8,weld,Java,Cdi,Jersey 2.0,Tomcat8,Weld,我正在使用Jersey 1.17和CDI(Weld 2.4.1)开发一个web服务。我用的是Tomcat8。我的ContextListener和资源类正在成功地注入标有@Inject的服务实现。我正试图搬到泽西2.x,但我遇到了一个路障 我唯一的变化是在我的pom.xml和web.xml中 - <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>

我正在使用Jersey 1.17和CDI(Weld 2.4.1)开发一个web服务。我用的是Tomcat8。我的
ContextListener
和资源类正在成功地注入标有
@Inject
的服务实现。我正试图搬到泽西2.x,但我遇到了一个路障

我唯一的变化是在我的
pom.xml
web.xml

-        <servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
+        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
         <init-param>
-            <param-name>com.sun.jersey.config.property.packages</param-name>
+            <param-name>jersey.config.server.provider.packages</param-name>
我看到焊接日志消息,表明焊接似乎很愉快,但我真的很茫然

2017-05-26 12:03:19,870 [RMI TCP Connection(2)-127.0.0.1] INFO  o.j.w.e.servletWeldServlet {} - WELD-ENV-001008: Initialize Weld using ServletContainerInitializer 
2017-05-26 12:03:19,894 [RMI TCP Connection(2)-127.0.0.1] INFO  o.j.w.Version {} - WELD-000900: 2.4.1 (Final) 
2017-05-26 12:03:20,173 [RMI TCP Connection(2)-127.0.0.1] INFO  o.j.w.Bootstrap {} - WELD-000101: Transactional services not available. Injection of @Inject UserTransaction not available. Transactional observers will be invoked synchronously. 
2017-05-26 12:03:20,503 [RMI TCP Connection(2)-127.0.0.1] INFO  o.j.w.e.servletTomcat {} - WELD-ENV-001100: Tomcat 7+ detected, CDI injection will be available in Servlets, Filters and Listeners. 

添加这个依赖项似乎解决了这个问题

<dependency>
    <groupId>org.glassfish.jersey.ext.cdi</groupId>
    <artifactId>jersey-cdi1x</artifactId>
    <version>2.23</version>
</dependency>

org.glassfish.jersey.ext.cdi
jersey-cdi1x
2.23

另外,您所展示的例外情况并非来自Weld,而是来自HK2(您可能知道,HK2不是一个完整的CDI impl)。我将进一步指出,HK2根本不是CDI实现。它可以与CDI一起使用(就像Jersey所做的那样)但这不是CDI本身,我想我真正困惑的是,这是在1.17上工作。
<dependency>
    <groupId>org.glassfish.jersey.ext.cdi</groupId>
    <artifactId>jersey-cdi1x</artifactId>
    <version>2.23</version>
</dependency>