Wildfly 8 Final 上的 JSF 1.2 -weld-core-jsf 仍然引用 JSF 2.2 API

2023-12-09

我目前正在将 JSF-1.2 应用程序迁移到 Wildfly 8 Final,但遇到了困难:(

首先,我读过很多有关相关问题的帖子(例如https://community.jboss.org/message/845006 or 将 JSF 1.2 Seam 应用程序迁移到 WildFly Beta 1)但建议的解决方案(不包括焊接子系统)对我不起作用。

我做了什么:

  • 我遵循了多jsf功能教程here并安装了 JSF 1.2 作为 Wildfly 的模块(准确地说,是 3 个模块)。
  • 接下来,我将 javax.faces.api 和 com.sun.jsf-impl(主槽)的排除项以及 1.2 槽的相应依赖项添加到我的 jboss-deployment-struction.xml 中。
  • 由于该应用程序使用 Tomahawk 和 Tomahawk Sandbox,我也用我的耳朵进行部署,因此我还排除了主插槽,并为这些部署包含了两个模块的 1.2 插槽。

我的问题:

  • 当我尝试调用部署的初始页面(login.xhtml)时,出现以下错误,该错误是由插槽 1.2 中的模块“org.jboss.as.jsf-injection”引起的


ERROR [request] UT005023: Exception handling request to /backoffice/login.faces: java.lang.NoSuchMethodError: javax.faces.context.FacesContext.getAttributes()Ljava/util/Map;
     [exec]     at org.jboss.weld.jsf.ConversationAwareViewHandler.getActionURL(ConversationAwareViewHandler.java:103)
     [exec]     at javax.faces.application.ViewHandlerWrapper.getActionURL(ViewHandlerWrapper.java:147)
     [exec]     at com.sun.facelets.FaceletViewHandler.getActionURL(FaceletViewHandler.java:807)
     [exec]     at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRenderer.getActionUrl(HtmlRenderer.java:77)
     [exec]     at org.apache.myfaces.custom.form.HtmlFormRenderer.getActionUrl(HtmlFormRenderer.java:45)
     [exec]     at org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlFormRendererBase.encodeBegin(HtmlFormRendererBase.java:102)
     [exec]     at org.apache.myfaces.custom.form.HtmlFormRenderer.encodeBegin(HtmlFormRenderer.java:134)
     [exec]     at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:816)
     [exec]     at javax.faces.component.UIComponent.encodeAll(UIComponent.java:928)
     [exec]     at javax.faces.component.UIComponent.encodeAll(UIComponent.java:933)
     [exec]     at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:594)
     [exec]     at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
     [exec]     at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
     [exec]     at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
     [exec]     at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
     [exec]     at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:85)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:130)
     [exec]     at com.jamonapi.JAMonFilter.doFilter(JAMonFilter.java:57)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:190)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at org.apache.myfaces.custom.conversation.ConversationServletFilter.doFilter(ConversationServletFilter.java:78)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at org.apache.myfaces.custom.requestParameterProvider.RequestParameterServletFilter.doFilter(RequestParameterServletFilter.java:66)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at de.voebzvd.indra.backoffice.webapp.AvoidCachingFilter.doFilter(AvoidCachingFilter.java:53)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at org.securityfilter.filter.SecurityFilter.doFilter(SecurityFilter.java:188)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at de.voebzvd.logging.BaseFilter.doFilter(BaseFilter.java:44)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at de.voebzvd.logging.NDCFilter.doFilter(NDCFilter.java:50)
     [exec]     at io.undertow.servlet.core.ManagedFilter.doFilter(ManagedFilter.java:56)
     [exec]     at io.undertow.servlet.handlers.FilterHandler$FilterChainImpl.doFilter(FilterHandler.java:132)
     [exec]     at io.undertow.servlet.handlers.FilterHandler.handleRequest(FilterHandler.java:85)
     [exec]     at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:61)
     [exec]     at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
     [exec]     at org.wildfly.extension.undertow.security.SecurityContextAssociationHandler.handleRequest(SecurityContextAssociationHandler.java:78)
     [exec]     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
     [exec]     at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:113)
     [exec]     at io.undertow.security.handlers.AuthenticationCallHandler.handleRequest(AuthenticationCallHandler.java:52)
     [exec]     at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:45)
     [exec]     at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:61)
     [exec]     at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:70)
     [exec]     at io.undertow.security.handlers.SecurityInitialHandler.handleRequest(SecurityInitialHandler.java:76)
     [exec]     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
     [exec]     at org.wildfly.extension.undertow.security.jacc.JACCContextIdHandler.handleRequest(JACCContextIdHandler.java:61)
     [exec]     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
     [exec]     at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:25)
     [exec]     at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:240)
     [exec]     at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)
     [exec]     at io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:73)
     [exec]     at io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:146)
     [exec]     at io.undertow.server.Connectors.executeRootHandler(Connectors.java:168)
     [exec]     at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:687)
     [exec]     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
     [exec]     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
     [exec]     at java.lang.Thread.run(Thread.java:744)
  

该错误是由 ConversationAwareViewHandler 引起的,它包含在模块 org.jboss.as.jsf-injection 中的 jarweld-core-jsf-2.1.2.Final.jar 中,我也随 JSF 1.2 模块一起安装了该模块。该类仍然引用 JSF 2.2 API,因此会失败。

从战斧和我的战争中排除焊接子系统也不起作用。我试过这个:

<sub-deployment name="myfaces-tomahawk-core.jar">
  <exclude-subsystems>
    <subsystem name="weld" />
  </exclude-subsystems>
  <exclusions>
    <module name="javax.faces.api" slot="main" />
    <module name="com.sun.jsf-impl" slot="main" />
  </exclusions>
  <dependencies>
    <module name="com.sun.jsf-impl" slot="1.2" />
    <module name="javax.faces.api" slot="1.2" />
    <module name="org.apache.commons.beanutils" />
    <module name="org.apache.commons.lang" />
    <module name="org.apache.commons.logging" />
  </dependencies>
</sub-deployment>
<sub-deployment name="myfaces-tomahawk-sandbox.jar">
  <exclude-subsystems>
    <subsystem name="weld" />
  </exclude-subsystems>
  <exclusions>
    <module name="javax.faces.api" slot="main" />
    <module name="com.sun.jsf-impl" slot="main" />
  </exclusions>
  <dependencies>
    <module name="com.sun.jsf-impl" slot="1.2" />
    <module name="javax.faces.api" slot="1.2" />
    <module name="org.apache.commons.beanutils" />
    <module name="org.apache.commons.collections" />
    <module name="org.apache.commons.lang" />
    <module name="org.apache.commons.logging" />
  </dependencies>
</sub-deployment>
<sub-deployment name="backoffice.war">
  <exclude-subsystems>
    <subsystem name="weld" />
  </exclude-subsystems>
  <exclusions>
    <module name="javax.faces.api" slot="main" />
    <module name="com.sun.jsf-impl" slot="main" />
  </exclusions>
  <dependencies>
    <module name="com.sun.jsf-impl" slot="1.2" />
    <module name="javax.faces.api" slot="1.2" />
    <module name="net.sourceforge.jamonapi" />
    <module name="org.apache.commons.beanutils" />
    <module name="org.apache.commons.codec" />
    <module name="org.apache.commons.lang" />
    <module name="org.apache.commons.logging" />
  </dependencies>
</sub-deployment>

我还能做什么?


简而言之,这个问题是由weld 和 JSF 1.2 不兼容引起的,在未来的版本中不会修复(请参阅here).

在我看来,可以采取三种方式:

  1. 升级您的应用程序代码以使用 JSF 2.x。
  2. 必要时排除焊接子系统(可能需要重新配置 wildfly 的默认 cdi 设置)。
  3. 修补类ConversationAwareViewHandler在旧的 JSF API 中适当地采取不同的行为。

对于我来说,只有修补 JSF 注入模块的选项,因为应用程序升级是不可能的,并且选项 2 需要对应用程序进行更大的重组。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Wildfly 8 Final 上的 JSF 1.2 -weld-core-jsf 仍然引用 JSF 2.2 API 的相关文章

  • 用于解析和构建逻辑表达式的 Java 库

    我正在寻找一个 Java 开源库来解析和构建类似 SQL 的表达式 例如评估表达式的有效性 例如 a x or y and b z 另外我想要一个用于构建或扩展表达式的 API 就像是 Expression exp new Expressi
  • java.lang.VerifyError:JVMVRFY012堆栈形状不一致;

    在 WAS 8 5 5 中部署 Maven 项目时出现以下错误 我在WAS中安装了JDK 1 6和1 7 错误500 org springframework web util NestedServletException 处理程序处理失败
  • 策略模式还是命令模式?

    假设我有一个金融交易列表 我需要针对这些交易执行一系列验证规则 一个例子是我有一笔购买产品的交易 但是首先我需要验证交易中的帐户是否有足够的可用资金 产品没有售完等 由于这些规则 交易将是标记为拒绝 并应指定错误代码 当然 我正在考虑用一个
  • 将 MouseListener 添加到面板

    我正在尝试将鼠标操作添加到我的面板中 这就是程序应该做的事情 编写一个程序 允许用户通过按三下鼠标来指定一个三角形 第一次按下鼠标后 画一个小点 第二次按下鼠标后 绘制一条连接前两个点的线 第三次按下鼠标后 绘制整个三角形 第四次按下鼠标会
  • 在 Java 正则表达式中获取多个模式的重叠匹配

    我有同样的问题这个链接 https stackoverflow com questions 18751486 matching one string multiple times using regex in java 但有多种模式 我的正
  • 在 Java 中使用 Batik 检查和删除 SVG 中的属性

    这个问题基本上说明了一切 如何检查 SVG 是否具有 viewBox 属性 我正在使用蜡染库 我需要这个 因为我需要 至少 通知用户有一个 viewBox 属性 我可以删除它吗 使用 org w3c dom 类 您可以按照以下方式做一些事情
  • 如何在url请求中发送数组

    我的要求如下 我想给出演员姓名 开始日期 结束日期并获取他在该时期出演的所有电影 因此 我的服务请求是这样的 http localhost 8080 MovieDB GetJson name Actor startDate 20120101
  • 如何作为应用程序发布到页面?

    所以 我有一个应用程序 Facebook 应用程序实体 并且我有一个页面 我想使用应用程序通过java代码 通过restfb或任何其他建议 发布到页面 看起来我错过了页面授予应用程序发布权限的阶段 不知道该怎么做 谢谢你们 乌里 您只能 作
  • 使用 Apache POI Excel 写入特定单元格位置

    如果我有一个未排序的参数 x y z 列表 是否有一种简单的方法将它们写入使用 POI 创建的 Excel 文档中的特定单元格 就好像前两个参数是 X 和Y 坐标 例如 我有如下行 10 4 100 是否可以在第 10 行第 4 列的单元格
  • 从 Spring MVC XML 文件转移到 javaconfig。我真的对我的数据库 XML 文件感到困惑

    我从 Spring MVC XML 文件转移到 javaconfig 我真的对我的数据库 XML 文件感到困惑 我不知道如何让 Hibernate4 工作以及我的 JBoss JNDI 数据源工作 有人可以告诉我如何使 javaconfig
  • 查询 MongoDB 集合中的字段。

    我正在尝试查询 mongodb 集合中的特定字段 这是我的代码和输出 Mongo m new Mongo DB db m getDB mydb DBCollection coll db getCollection student addin
  • 即使在轴上进行自动量程调整,我也可以保留积分刻度线吗?

    我 偷 了一些代码here http fxexperience com 2012 01 curve fitting and styling areachart 拥有一个AreaChart我在 FXML 中使用了 平滑线条 它的工作原理如下
  • 如何在 MSSQL 中获取 CURRENT_DATE?

    我正在使用 jpa 3 o 和 Hibernate 我有一个命名查询 SELECT COUNT wt id FROM WPSTransaction wt WHERE wt createdDate gt CURRENT DATE WPSTra
  • 在尝试使用 GPS 之前如何检查 GPS 是否已启用

    我有以下代码 但效果不好 因为有时 GPS 需要很长时间 我该如何执行以下操作 检查GPS是否启用 如果启用了 GPS 请使用 GPS 否则请使用网络提供商 如果 GPS 时间超过 30 秒 请使用网络 我可以使用时间或 Thread sl
  • 如何在不反编译的情况下更改已编译的.class文件?

    我想更改 class 文件方法 我安装 JD Eclipse Decompiler 并打开 class 文件 我添加了一些代码并保存 class 文件 但是 class 文件没有改变 我不知道如何使用反编译器 如果可能的话 如何在不使用反编
  • java中使用多线程调用同一类的不同方法

    我有一个类 如下所示 具有三种方法 public class MyRunnable implements Runnable Override public void run what code need to write here to c
  • java.lang.IllegalStateException - 提交响应后无法创建会话

    我在我的项目中使用 JSF PrimeFaces 我为此准备了一个Maven项目 当我编译项目并加载主页后 我收到以下异常 java lang IllegalStateException Cannot create a session af
  • 如何建立与 FileZilla Server 1.2.0 的 FTPS 数据连接

    使用 Apache commons net 的 Java FTPSClient 进行会话恢复是一个已知问题 会话恢复是 FTPS 服务器数据连接所需的一项安全功能 Apache FTPSClient 不支持会话恢复 并且 JDK API 使
  • Java中单例的其他方式[重复]

    这个问题在这里已经有答案了 只是我在考虑编写单例类的其他方法 那么这个类是否被认为是单例类呢 public class MyClass static Myclass myclass static myclass new MyClass pr
  • java中void的作用是什么?

    返回类型 方法返回值的数据类型 如果方法不返回值 则返回 void http download oracle com javase tutorial java javaOO methods html http download oracle

随机推荐