我有一个Web应用程序,该应用程序使用在Payara 5.1.3上运行的JSF Spring5 Jersey2.29.1(spring-jersey5)。 DI部分由Spring处理,使用@Inject处理。
我的问题是,由于我是从Jersey终结点上的Jersey2.25 Spring-Jersey4和Payara 4.1.9.2迁移而来的,因此我无法对弹簧豆使用@Inject,因此必须使用@Autowired。
我收到的错误是:
Severe: Exception while loading the app : java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type MyService with qualifiers @Default
at injection point [BackedAnnotatedField] @Inject private my.company.rest.internal.workflowengine.LeaveFlowEndpoint.myService
我猜想这与正在执行injection(HK2)的库有关,该库在使用@Inject时试图解决依赖关系本身,而不是在spring中寻找它。
如果相反,我使用@Autowired就像一个魅力。
有什么主意我为什么要得到这个?
PS hk2版本为2.29.1
web.xml配置:
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>my.company.endpoints.rest</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
我是否必须在这里使用其他(可识别弹簧的)类:
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
?
答案 0 :(得分:0)
就我而言,问题与以下事实有关:在部署到Payara时,未禁用隐式cdi标志。一旦禁用它就可以了。