【问题标题】:java.lang.IllegalArgumentException: Multiple entries with same key: interface javax.validation.constraints.Minjava.lang.IllegalArgumentException:具有相同键的多个条目:接口 javax.validation.constraints.Min
【发布时间】:2023-03-29 11:11:01
【问题描述】:

我在 JBoss WildFly 8.2.0.Final 和 JSF 2.2 和 RichFaces 4.5.2.Final 中运行 EJB + EJB + WAR 部署的 EAR。我的问题是,所有 RichFaces 资源都无法在客户端中正确加载。生成的 URL 无法解析并返回 HTTP 404。

部署建立在 Maven 之上,结果如下:

在 EJB 模块而不是 WAR 中使用 <scope>compile</scope> 的原因是我需要从我的 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

我该如何解决这个问题?

【问题讨论】:

标签: jsf deployment richfaces jsf-2.2


【解决方案1】:

前端工件不属于 EAR 的 /lib。它们属于 WAR 的/WEB-INF/lib。否则,它将使后端(EJB)在其他前端(其他 WAR)上完全不可重用,例如 Spring MVC、JAX-RS RESTful、“普通香草”JSP/Servlet 等。使用/导入 JSF @987654324 @ 和 EJB 类中的 Servlet 的 HttpServletRequest 等朋友已经是一个严重的大红色警报。你不应该那样做。

将该代码移至 WAR。或者,如果您打算使其在各种 WAR 中可重用,请将其设为 Web 片段项目,然后最终可以作为 /WEB-INF/lib 中的另一个 JAR。

另见:

【讨论】:

  • 我知道这不是我们想要的架构,但我们在这个 6 年历史的项目中讨论了 300.000+ 行代码,其中大约有 120 个组件类使用 UIComponent 子类化。我会调查是否可以将其中一些移到 WAR 模块中……但我担心这会破坏这次升级的发布时间表。
  • 祝你好运。不要担心日程安排。只需告诉他们架构已严重损坏,需要修复才能继续。
  • 我喜欢 Eclipse...它允许我使用重构工具移动代码。移动代码花了 3 小时……现在它按预期启动并加载资源。但是清理这些东西需要几天的时间......从现在开始这是渐进的。项目构建并正常启动。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-04-08
  • 2016-03-07
  • 1970-01-01
  • 2022-10-03
  • 2018-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多