java.lang.IllegalArgumentException:具有相同键的多个条目:接口 javax.validation.constraints.Min
java.lang.IllegalArgumentException: Multiple entries with same key: interface javax.validation.constraints.Min
我是 运行 一个 EJB + EJB + WAR 部署在 JBoss WildFly 8.2 中的 EAR。0.Final 使用 JSF 2.2 和 RichFaces 4.5。2.Final.我的问题是,所有 RichFaces 资源都无法在客户端正确加载。生成的 URL 无法解析并且 return 带有 HTTP 404。
部署基于 Maven 并产生以下结构:
在 EJB 模块中使用 <scope>compile</scope>
而不是 WAR 的原因是我需要从我的 EJB 模块中扩展 RichFaces 类。我们已经基于一些组件构建了一个动态表单生成器。
只要我在 WAR 模块中使用 <scope>compile</scope>
而不是 <scope>provided</scope>
将 JAR 添加到 EAR/lib/
和 WAR/WEB-INF/lib/
,我就会得到以下堆栈跟踪启动应用程序服务器时:
Caused by: java.lang.IllegalArgumentException: Multiple entries with same key: interface javax.validation.constraints.Min=org.richfaces.javascript.LibraryFunctionImplementation@c77af4e and interface javax.validation.constraints.Min=org.richfaces.javascript.LibraryFunctionImplementation@5a903150
at com.google.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:150)
at com.google.common.collect.RegularImmutableMap.checkNoConflictInBucket(RegularImmutableMap.java:104)
at com.google.common.collect.RegularImmutableMap.<init>(RegularImmutableMap.java:70)
at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:254)
at org.richfaces.javascript.ClientServiceConfigParser.parseConfig(ClientServiceConfigParser.java:75)
at org.richfaces.application.ValidatorModule.createClientScriptService(ValidatorModule.java:65)
at org.richfaces.application.ValidatorModule.configure(ValidatorModule.java:60)
at org.richfaces.application.ServicesFactoryImpl.init(ServicesFactoryImpl.java:60)
at org.richfaces.application.InitializationListener.createFactory(InitializationListener.java:110)
at org.richfaces.application.InitializationListener.onStart(InitializationListener.java:69)
at org.richfaces.application.InitializationListener.processEvent(InitializationListener.java:167)
at javax.faces.event.SystemEvent.processListener(SystemEvent.java:108)
at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2190)
at com.sun.faces.application.ApplicationImpl.invokeListenersFor(ApplicationImpl.java:2163)
at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:303)
at org.jboss.as.jsf.injection.weld.ForwardingApplication.publishEvent(ForwardingApplication.java:294)
at com.sun.faces.config.ConfigManager.publishPostConfigEvent(ConfigManager.java:692)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:260)
... 9 more
我该如何解决这个问题?
前端工件不属于 EAR 的 /lib
。他们属于 WAR 的 /WEB-INF/lib
。否则会使后端(EJB)在其他前端(其他 WARs)上完全不可重用,例如 Spring MVC、JAX-RS RESTful、“Plain vanilla”JSP/Servlet, 等等..等等.. Using/importing JSF FacesContext
和诸如EJB class 中的Servlet HttpServletRequest
之类的朋友已经是一个严重的大红色警报。你不应该那样做。
将该代码移至 WAR。或者,如果您打算使其可在各种 WAR 中重复使用,请将其设为 Web 片段项目,然后它可以作为 /WEB-INF/lib
中的另一个 JAR 结束。
另请参阅:
- JSF Service Layer
我是 运行 一个 EJB + EJB + WAR 部署在 JBoss WildFly 8.2 中的 EAR。0.Final 使用 JSF 2.2 和 RichFaces 4.5。2.Final.我的问题是,所有 RichFaces 资源都无法在客户端正确加载。生成的 URL 无法解析并且 return 带有 HTTP 404。
部署基于 Maven 并产生以下结构:
在 EJB 模块中使用 <scope>compile</scope>
而不是 WAR 的原因是我需要从我的 EJB 模块中扩展 RichFaces 类。我们已经基于一些组件构建了一个动态表单生成器。
只要我在 WAR 模块中使用 <scope>compile</scope>
而不是 <scope>provided</scope>
将 JAR 添加到 EAR/lib/
和 WAR/WEB-INF/lib/
,我就会得到以下堆栈跟踪启动应用程序服务器时:
Caused by: java.lang.IllegalArgumentException: Multiple entries with same key: interface javax.validation.constraints.Min=org.richfaces.javascript.LibraryFunctionImplementation@c77af4e and interface javax.validation.constraints.Min=org.richfaces.javascript.LibraryFunctionImplementation@5a903150
at com.google.common.collect.ImmutableMap.checkNoConflict(ImmutableMap.java:150)
at com.google.common.collect.RegularImmutableMap.checkNoConflictInBucket(RegularImmutableMap.java:104)
at com.google.common.collect.RegularImmutableMap.<init>(RegularImmutableMap.java:70)
at com.google.common.collect.ImmutableMap$Builder.build(ImmutableMap.java:254)
at org.richfaces.javascript.ClientServiceConfigParser.parseConfig(ClientServiceConfigParser.java:75)
at org.richfaces.application.ValidatorModule.createClientScriptService(ValidatorModule.java:65)
at org.richfaces.application.ValidatorModule.configure(ValidatorModule.java:60)
at org.richfaces.application.ServicesFactoryImpl.init(ServicesFactoryImpl.java:60)
at org.richfaces.application.InitializationListener.createFactory(InitializationListener.java:110)
at org.richfaces.application.InitializationListener.onStart(InitializationListener.java:69)
at org.richfaces.application.InitializationListener.processEvent(InitializationListener.java:167)
at javax.faces.event.SystemEvent.processListener(SystemEvent.java:108)
at com.sun.faces.application.ApplicationImpl.processListeners(ApplicationImpl.java:2190)
at com.sun.faces.application.ApplicationImpl.invokeListenersFor(ApplicationImpl.java:2163)
at com.sun.faces.application.ApplicationImpl.publishEvent(ApplicationImpl.java:303)
at org.jboss.as.jsf.injection.weld.ForwardingApplication.publishEvent(ForwardingApplication.java:294)
at com.sun.faces.config.ConfigManager.publishPostConfigEvent(ConfigManager.java:692)
at com.sun.faces.config.ConfigureListener.contextInitialized(ConfigureListener.java:260)
... 9 more
我该如何解决这个问题?
前端工件不属于 EAR 的 /lib
。他们属于 WAR 的 /WEB-INF/lib
。否则会使后端(EJB)在其他前端(其他 WARs)上完全不可重用,例如 Spring MVC、JAX-RS RESTful、“Plain vanilla”JSP/Servlet, 等等..等等.. Using/importing JSF FacesContext
和诸如EJB class 中的Servlet HttpServletRequest
之类的朋友已经是一个严重的大红色警报。你不应该那样做。
将该代码移至 WAR。或者,如果您打算使其可在各种 WAR 中重复使用,请将其设为 Web 片段项目,然后它可以作为 /WEB-INF/lib
中的另一个 JAR 结束。
另请参阅:
- JSF Service Layer