我有一个Web应用程序,该应用程序使用在Payara 5.1.3上运行的JSF Spring5 Jersey2.29.1(spring-jersey5)。DI部分由Spring处理,使用@Inject处理。
我的问题是,由于我已经从球衣端点上的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
我想它与执行注入(HK2)的库有关,该库在使用@Inject时试图解决依赖关系本身,而不是在春季寻找它。如果相反,我使用@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>
?
就我而言,问题与以下事实有关:在部署到Payara时,未禁用隐式cdi标志。一旦禁用它就可以了。