在启动Weblogic的服务器上获取WELD异常,就像在基于Jersey的应用程序中使用Google Guice for DI一样

时间:2019-01-24 11:00:37

标签: jersey-2.0 weblogic12c java-ee-7 weld guice-3

我将Weblogic 12b用作App服务器。我的应用程序在我的项目中将Jersey 2.5.1与Guice3一起使用。我有一个名为Application的类,该类是从org.glassfish.jersey.server.ResourceConfig派生的。在服务器启动时,出现如下错误:

Caused By: org.jboss.weld.exceptions.DeploymentException: WELD-001408: Unsatisfied dependencies for type ServiceLocator with qualifiers @Default
  at injection point [BackedAnnotatedParameter] Parameter 1 of [BackedAnnotatedConstructor] @Inject public Application(ServiceLocator)
  at Application.<init>(Application.java:22)

        at org.jboss.weld.bootstrap.Validator.validateInjectionPointForDeploymentProblems(Validator.java:359)
        at org.jboss.weld.bootstrap.Validator.validateInjectionPoint(Validator.java:281)
        at org.jboss.weld.bootstrap.Validator.validateProducer(Validator.java:417)
        at org.jboss.weld.injection.producer.InjectionTargetService.validateProducer(InjectionTargetService.java:36)
        at org.jboss.weld.manager.InjectionTargetFactoryImpl.validate(InjectionTargetFactoryImpl.java:135)

似乎用WELD代替了Google Guice for DI。

同一问题,我正在进入业务层,其中EJB类由Java类组成,并使用@Inject注入它们。

我什至试图更改他将@Inject导入Google注入,但异常已更改但未解决。

我试图在web-inf中使用beans.xml

@ApplicationPath("/")
public class Application extends ResourceConfig {

    @Inject
    public Application(final ServiceLocator serviceLocator) {
    }
}

1 个答案:

答案 0 :(得分:0)

您需要有效地禁用CDI。

您可以通过将WEB-INF / beans.xml文件添加到包含以下内容的应用程序来实现此目的:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
       bean-discovery-mode="none">
</beans>

请注意bean-discovery-mode="none"

如果您的项目包含带有可能看起来像CDI bean的类的其他jar,那么您还需要向其中添加类似的META-INF / beans.xml文件。

但是,我怀疑这可能会导致其他不相关的问题。通常,应用服务器喜欢控制类的生命周期,其中包括与JAX-RS相关的类。