WELD-001519 为抽象类"xxx"创建注入目标实现。将无法生成此类型的实例



我正在下面的环境中运行一个应用程序。

  • GlassFish服务器4.0
  • Mojarra 2.2.4
  • PrimeFaces 4.0最终版
  • PrimeFaces扩展1.1.0
  • OmniFaces 1.6.3

添加OmniFaces后,服务器终端上将出现以下警告。

WARNING:   WELD-001519 An InjectionTarget implementation is created for an abstract class org.omnifaces.eventlistener.DefaultServletContextListener. It will not be possible to produce instances of this type!    
WARNING:   WELD-001519 An InjectionTarget implementation is created for an abstract class org.omnifaces.filter.HttpFilter. It will not be possible to produce instances of this type!
//WARNING:   Class 'javax.ejb.PostActivate' not found, interception based on it is not enabled
//WARNING:   Class 'javax.ejb.PrePassivate' not found, interception based on it is not enabled
INFO:   Initializing Mojarra 2.2.4 ( 20131003-1354 https://svn.java.net/svn/mojarra~svn/tags/2.2.4@12574) for context '/Project-war'
WARNING:   WELD-001529 An InjectionTarget implementation is created for a class org.omnifaces.application.OmniApplicationFactory which does not have any appropriate constructor.
WARNING:   WELD-001529 An InjectionTarget implementation is created for a class org.primefaces.context.PrimeFacesContextFactory which does not have any appropriate constructor.
WARNING:   WELD-001529 An InjectionTarget implementation is created for a class org.omnifaces.context.OmniPartialViewContextFactory which does not have any appropriate constructor.
WARNING:   WELD-001529 An InjectionTarget implementation is created for a class org.primefaces.context.PrimePartialViewContextFactory which does not have any appropriate constructor.
INFO:   Running on PrimeFaces 4.0
INFO:   Running on PrimeFaces Extensions null
INFO:   Using OmniFaces version null
INFO:   Loading application [Project#Project-war.war] at [Project-war]
INFO:   Project was successfully deployed in 22,734 milliseconds.

在给定的环境中,OmniFaces有什么问题吗?

不,这些只是警告,而不是错误。Weld无法为抽象类或没有默认构造函数的类创建注入目标。注入目标需要能够毫无问题地执行Class.forName(className).newInstance()

记录中的这种干扰已被报告为焊接问题1547,因此警告级别自焊接2.1.1/2.2.0起降低至调试级别。

需要注意的是,还有另一个bug,很可能与GlassFish类加载有关。OmniFaces有一个VetoAnnotatedTypeExtension,它应该排除所有这些OmniFaces类作为CDI管理的bean进行不必要的扫描。当Weld在Tomcat7和JBoss6/7/8中使用时,这一点很好。也就是说,这些警告根本不会出现在OmniFaces类中。

最新更新