В настоящее время я переношу приложение JSF-1.2 в Wildfly 8 Final и застрял :(
Прежде всего, я прочитал много сообщений с похожими проблемами (например, https://community.jboss.org/message/845006 или Перенесите JSF 1.2 Соединить приложение с WildFly Beta 1), но предложенное решение (за исключением подсистемы сварки) мне не подходит.
Что я сделал:
- Я следовал руководству по функциям multi-jsf здесь и установил JSF 1.2 в качестве модуля для wildfly (чтобы а точнее 3 модуля).
- Следующим было то, что я добавил исключения для javax.faces.api и com.sun.jsf-impl (основные слоты), а также соответствующие зависимости для слотов 1.2 в мой jboss-deployment-structure.xml для моей войны.
- Поскольку приложение использует Tomahawk и Tomahawk Sandbox, которые я также развертываю с помощью уха, я также исключил основные слоты и включил слоты 1.2 обоих модулей для этих развертываний.
Моя проблема:
- Когда я пытаюсь вызвать начальную страницу развертывания (login.xhthml), я получаю следующую ошибку, вызванную модулем «org.jboss.as.jsf-injection» в слоте 1.2.
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, который содержится в банке сварки-ядра-jsf-2.1.2.Final.jar в модуле org.jboss.as.jsf-injection, который я также установил с модулями JSF 1.2. Этот класс по-прежнему ссылается на API JSF 2.2 и соответственно дает сбой.
Исключить подсистему сварки у томагавка и моей войны тоже не получилось. Я пробовал это:
<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>
Что я могу сделать еще?