WELD-001408:GlassFish + Jersey 2中类型的不满足依赖性

时间:2019-04-01 01:05:16

标签: dependency-injection glassfish jersey-2.0 hk2

我试图使用在GlassFish上运行的HK2将类注入到我的Jersey JAX-RS应用程序中。

但是当我尝试运行我的应用程序时,出现此错误:

  

com.sun.enterprise.admin.remote.RemoteFailureException:部署期间发生错误:加载应用程序时发生异常:java.lang.IllegalStateException:ContainerBase.addChild:开始:org.apache.catalina.LifecycleException:org.apache。 catalina.LifecycleException:org.jboss.weld.exceptions.DeploymentException:WELD-001408:带限定符@Default的UsersDAO类型的依赖关系未满足     在注入点[BackedAnnotatedParameter] [BackedAnnotatedConstructor]的参数1 @Inject public com.myapp.users.resources.UserResource(UsersDAO)

Searching the web我发现GlassFish中的CDI正在与HK2竞争DI,因此,为了解决这个问题,我应该将此jar添加到我的类路径中(我正在使用Gradle):

implementation ("org.glassfish.jersey.containers.glassfish:jersey-gf-cdi:2.14")

但是它不起作用,它给了我另一个神秘的错误:

  

java.io.IOException:com.sun.enterprise.admin.remote.RemoteFailureException:部署期间发生错误:加载应用程序时发生异常:CDI部署失败:WELD-001409:类型为WebAppExceptionHolder的含糊不清的依赖项,带有限定符@Default     在注入点[UnbackedAnnotatedField] @Inject org.glassfish.jersey.gf.cdi.internal.WebAppExceptionInterceptor.store     在org.glassfish.jersey.gf.cdi.internal.WebAppExceptionInterceptor.store(WebAppExceptionInterceptor.java:0)     可能的依赖关系:     -org.glassfish.jersey.ext.cdi1x.internal.CdiComponentProvider$Hk2Bean@60e01611,     -具有限定符[@Any @Default]的托管Bean [类org.glassfish.jersey.gf.cdi.internal.WebAppExceptionHolder]   。有关更多详细信息,请参阅server.log。

这是我的AbstractBinder实现:

public class UsersDependencyBinder extends AbstractBinder {    
    private static final Logger LOG = LoggerFactory.getLogger(UsersDependencyBinder.class);

    @Override
    protected void configure() {
        try {
            // Acts as a Singleton
            bind(new UsersDAO(new CachedDbConnector()));
        } catch (ClassNotFoundException e) {
            LOG.error("Error registering the DB Driver Manager", e);
        }
    }
}

然后我使用register(new UsersDependencyBinder());注册它。

我没有使用任何web.xml,我想只使用注释来清除*.xml

0 个答案:

没有答案