Java EJB不明确依赖项:如何指定要注入的类

Java EJB不明确依赖项:如何指定要注入的类,java,jakarta-ee,dependency-injection,ejb,cdi,Java,Jakarta Ee,Dependency Injection,Ejb,Cdi,我试图在EJB中注入一个对象,如下所示: @Stateless @Path("/auth") public class Login { @Inject UsernamePasswordCredentials credentials; 问题是UsernamePasswordCredentials有一个子类,并且两个类都有相同的限定符,这会导致依赖项不明确。如何指定要注入父类而不是子类的实例?错误消息如下所示: @Stateless @Path("/auth") public class Log

我试图在EJB中注入一个对象,如下所示:

@Stateless
@Path("/auth")
public class Login {

@Inject
UsernamePasswordCredentials credentials;
问题是UsernamePasswordCredentials有一个子类,并且两个类都有相同的限定符,这会导致依赖项不明确。如何指定要注入父类而不是子类的实例?错误消息如下所示:

@Stateless
@Path("/auth")
public class Login {

@Inject
UsernamePasswordCredentials credentials;
UsernamePasswordCredentials类型与限定符@Default的依赖关系不明确

带有限定符[@Any@Default]的托管Bean[class org.picketlink.idm.credential.UsernamePasswordCredentials]

带有限定符[@Any@Default]的托管Bean[class org.picketlink.idm.credential.TOTPCredentials]


您可以使用编程查找机制来限制所需bean的实际类型:

@Inject
Instance<UsernamePasswordCredentials> credInst;

public UserNamePasswordCredentials getCredentials() {
  return credInst.select(UsernamePasswordCredentials.class).get();
}
@Inject
实例credInst;
公共用户名密码凭据getCredentials(){
返回credInst.select(UsernamePasswordCredentials.class).get();
}

除此之外,我不是纠察链接专家,但我认为您在框架上做了一些错误的事情。Picket Link CDI集成是精心设计的,因此我有点困惑您在标准使用中可能会遇到这样的问题。

我认为您应该在picketlink用户论坛上询问,如果我不得不猜测,您不打算注入这些类。JAR中没有beans.xml是它们的来源。这些类不是来自CDI集成。因为他们都是独立的,所以他们不会帮助你——你可能需要一个定制制作人。