WELD-001408类型[LdapService]的不满意依赖关系,注入点带有限定符[@Named]

时间:2014-11-18 15:51:30

标签: java-ee dependency-injection ejb cdi weblogic12c

您好我试图将EAR部署到我的Weblogic服务器12c(12.1.3)但没有成功。

我的LdapService类是一个无状态EJB,默认没有args构造函数(这个项目是一个ejb包)

@Stateless
public class LdapService {

@Inject
public LdapService() {

} ...

我试图将它注入另一个类,如:

public class UserService {

private static final Logger logger = LoggerFactory.getLogger(UserService.class.getCanonicalName());
@Inject
private LdapService registerService;

@EJB(beanName = "Janus-session-1.0.jar#UserBean")
private TUserBean userBean;

...}

使用@EJB注释的bean被CDI识别,但是注入点引发了我关于@Inject的错误:

  

部署失败。消息是:org.jboss.weld.exceptions.DeploymentException:   WELD-001409带有限定符的类型[LdapService]的模糊依赖关系   [@Default]在注入点[[field] @Inject net.ab4cus.project.business.TransactionService.registerService]。   可能的依赖[[Session bean [class net.ab4cus.project.auth.LdapService   有限定词[@Any @Default];本地接口是[LdapService]]

如果在LdapService中使用@Named(" LdapService")然后在注入点使用:

@Inject @Named("LdapService") private LdapService registerService;

然后我收到了这个错误:

  

部署失败。消息是:org.jboss.weld.exceptions.DeploymentException:WELD-001408不满意   注入时带有限定符[@Named]的类型[LdapService]的依赖项   point [[field] @Inject @Named net.ab4cus.project.business.UserService.registerService]

如何解决此错误并消除歧义?或者@Inject到其他bean的正确方法是什么?

谢谢。

修改------------------------------------------- -------------------------------------------------- -

我设法部署了EAR,但现在还有其他涉及CDI的错误。

我的EAR内容是:EJB模块(带有bean和所有业务逻辑)和两个WAR(一个用于Web服务,一个用于使用Vaadin的Web FronEnd)。

WebServices是RESTFull,无论我尝试使用哪种WS,都会遇到这样的错误:

java.lang.NullPointerException
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactory.<init>(CDIComponentProviderFactory.java:94)
at com.sun.jersey.server.impl.cdi.CDIComponentProviderFactoryInitializer.initialize(CDIComponentProviderFactoryInitializer.java:76)
at com.sun.jersey.spi.container.servlet.WebComponent.configure(WebComponent.java:572)
at com.sun.jersey.spi.container.servlet.ServletContainer$InternalWebComponent.configure(ServletContainer.java:314)
at com.sun.jersey.spi.container.servlet.WebComponent.load(WebComponent.java:604)
Truncated. see log file for complete stacktrace

如果我尝试使用前端,那么无论何时加入bean都会出现此错误(对于每个bean):

SEVERE: 
java.lang.IllegalArgumentException: Can not set net.ab4cus.project.session.TUserBean field net.ab4cus.project.business.UserService.userBean to net.ab4cus.project.session.UserBean_o7pydo_NoIntfViewImpl
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:164)
    at sun.reflect.UnsafeFieldAccessorImpl.throwSetIllegalArgumentException(UnsafeFieldAccessorImpl.java:168)

我试图解决这个问题,但现在不知道:/

1 个答案:

答案 0 :(得分:7)

我的第一个错误的解决方案是:

- 从LdapService和默认构造函数

中删除@Stateless和@Inject
public class LdapService {

}...

为LdapService创建一个接口,并将此接口注入UserService

public class UserService {

private static final Logger logger = LoggerFactory.getLogger(UserService.class.getCanonicalName());
@Inject
private LdapServiceInterface registerService;

@EJB(beanName = "Janus-session-1.0.jar#UserBean")
private TUserBean userBean;

...}