[英]Jersey 1.x to 2.x using CDI
我正在使用當前的Jersey 1.17和CDI(焊接2.4.1)進行網絡服務。 我在Tomcat8上運行。 我的ContextListener
和資源類已成功注入帶有@Inject
服務實現。 我正在嘗試遷移到Jersey 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>
盡管我的ContextListener
是事實,但我的資源類不再被注入。 我看到以下內容:
26-May-2017 12:03:42.596 WARNING [http-nio-8888-exec-2] org.glassfish.jersey.internal.Errors.logErrors The following warnings have been detected: WARNING: Unknown HK2 failure detected:
MultiException stack 1 of 3
org.glassfish.hk2.api.UnsatisfiedDependencyException: There was no object available for injection at SystemInjecteeImpl(requiredType=PlatformService,parent=PlatformResource,qualifiers={},position=-1,optional=false,self=false,unqualified=null,379054017)
我看到Weld日志消息,表明Weld看起來很高興,但我真的很茫然。
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>
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.