簡體   English   中英

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

[英]JSF 1.2 on Wildfly 8 Final - weld-core-jsf is still referencing JSF 2.2 API

我目前正在將一個JSF-1.2應用程序遷移到Wildfly 8 Final並且卡住了:(

首先,我已經閱讀了許多相關問題的帖子(例如https://community.jboss.org/message/845006遷移JSF 1.2 Seam應用程序到WildFly Beta 1 )但是建議的解決方案(不包括焊接子系統)沒有不適合我。

我做了什么:

  • 我跟着多JSF特征教程這里和安裝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: 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中的jar weld-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>

我還能做什么?

簡而言之,這個問題是由焊接和JSF 1.2的不兼容引起的,在將來的版本中將不會修復(參見此處 )。

在我看來,有三種方法可以:

  1. 升級您的應用程序代碼以使用JSF 2.x.
  2. 必要時排除焊接子系統(可能需要重新配置wildfly的default-cdi設置)。
  3. 適當地修補ConversationAwareViewHandler類,以便在舊的JSF API的情況下采取不同的行動。

對我來說,只有選擇修補JSF注入模塊,因為無法進行應用程序升級,選項2需要對應用程序進行更大的重組。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM