关于Wildfly 8 Final的JSF 1.2 – weld-core-jsf仍在引用JSF 2.2 API

我正在将一个JSF-1.2应用程序迁移到Wildfly 8 Final并且卡住了:(

首先,我已经阅读了许多相关问题的post(例如https://community.jboss.org/message/845006或迁移JSF 1.2 Seam应用程序到WildFly Beta 1 )但是建议的解决方案(不包括焊接子系统)没有不适合我。

我做了什么:

  • 我按照这里的multi-jsffunction教程安装了JSF 1.2作为wildfly的模块(确切地说,3个模块)。
  • 接下来是我为javax.faces.api和com.sun.jsf-impl(主插槽)添加了排除项,以及我的jboss-deployment-structure.xml的1.2插槽的相应依赖项。
  • 由于该应用程序正在使用Tomahawk和Tomahawk Sandbox,我也在用我的耳朵部署,我也排除了主要插槽,并包括这两个模块的1.2插槽用于这些部署。

我的问题:

  • 当我尝试调用部署的初始页面(login.xhthml)时,我得到以下错误,该错误是由插槽1.2中的模块“org.jboss.as.jsf-injection”引起的
 ERROR [request] UT005023:对/backoffice/login.faces的exception处理请求: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]在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]在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中的jar weld-core-jsf-2.1.2.Final.jar中,我也使用JSF 1.2模块安装。 此类仍引用JSF 2.2 API并相应地失败。

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

                                                   

我还能做什么?

简而言之,这个问题是由焊接和JSF 1.2的不兼容引起的,在将来的版本中将不会修复(参见此处 )。

在我看来,有三种方法可以:

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

对我来说,只有选择修补JSF注入模块,因为无法进行应用程序升级,选项2需要更大的应用程序重组。