我有一个在JBoss上工作的webapp,作为5.1.0GA。它使用Mojarra 2.0.4罐。我正在将其迁移到JBoss上,作为7.1.1。这个版本的JBoss随2.1.7一起提供。因此,我通过为2.0.4定义槽,并在META-INF/jboss-deployment-structure.xml中将它们与其他依赖项一起引用为依赖关系,从而降低了Mojarra版本的级别。
jboss-deployment-structure.xml
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<exclusions>
<module name="javax.faces.api" slot="main"/>
<module name="com.sun.jsf-impl" slot="main"/>
<module name="javax.faces.api" slot="1.2"/>
<module name="com.sun.jsf-impl" slot="1.2"/>
</exclusions>
<dependencies>
<module name="org.hibernate.validator" export="true"/>
<module name="javax.validation.api" export="true"/>
<module name="com.google.gson" export="true"/>
<module name="org.codehaus.jettison" export="true"/>
<module name="org.jboss.resteasy.resteasy-jaxrs" export="true"/>
<module name="org.jboss.resteasy.resteasy-jackson-provider" export="true"/>
<module name="org.apache.log4j" export="true"/>
<module name="org.jboss.as.web" slot="main" export="true"/>
<module name="javax.faces.api" slot="2.0.4" export="true"/>
<module name="com.sun.jsf-impl" slot="2.0.4" export="true"/>
</dependencies>
</deployment>
</jboss-deployment-structure>这导致在部署时引发以下异常
12:51:18,761 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-3) Initializing Mojarra 2.0.4 (FCS b09) for context ''
12:51:20,355 INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-3) Unsanitized stacktrace from failed start...: javax.faces.FacesException: Class org.jboss.as.web.deployment.jsf.JandexAnnotationProvider is not an instance of com.sun.faces.spi.AnnotationProvider我引用了这链接并修改了我的依赖项,如下所示
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
<deployment>
<exclusions>
<module name="javax.faces.api" slot="main"/>
<module name="com.sun.jsf-impl" slot="main"/>
<module name="javax.faces.api" slot="1.2"/>
<module name="com.sun.jsf-impl" slot="1.2"/>
<module name="org.jboss.as.web" slot="main" />
</exclusions>
<dependencies>
<module name="org.hibernate.validator" export="true"/>
<module name="javax.validation.api" export="true"/>
<module name="com.google.gson" export="true"/>
<module name="org.codehaus.jettison" export="true"/>
<module name="org.jboss.resteasy.resteasy-jaxrs" export="true"/>
<module name="org.jboss.resteasy.resteasy-jackson-provider" export="true"/>
<module name="org.apache.log4j" export="true"/>
<module name="org.jboss.as.web" slot="main" export="true"/>
<module name="javax.faces.api" slot="2.0.4" export="true"/>
<module name="com.sun.jsf-impl" slot="2.0.4" export="true"/>
<module name="org.jboss.as.web" slot="main">
<imports>
<include path="/org/**" />
<exclude path="/META-INF/**" />
</imports>
</module>
</dependencies>
</deployment>
</jboss-deployment-structure>它消除了部署时的错误,但引入了以下运行时异常
12:59:19,434 ERROR [stderr] (http--0.0.0.0-8080-4) java.lang.IllegalArgumentException: null source
12:59:19,435 ERROR [stderr] (http--0.0.0.0-8080-4) at java.util.EventObject.<init>(EventObject.java:38)
12:59:19,436 ERROR [stderr] (http--0.0.0.0-8080-4) at javax.faces.event.SystemEvent.<init>(SystemEvent.java:71)
12:59:19,444 ERROR [stderr] (http--0.0.0.0-8080-4) at javax.faces.event.ComponentSystemEvent.<init>(ComponentSystemEvent.java:73)和
12:59:19,489 ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/].[Faces Servlet]] (http--0.0.0.0-8080-4) Servlet.service() for servlet Faces Servlet threw exception: java.lang.NullPointerException
at com.sun.faces.context.PartialViewContextImpl.createPartialResponseWriter(PartialViewContextImpl.java:431) [jsf-impl.jar:2.0.4-b09]
at com.sun.faces.context.PartialViewContextImpl.access$300(PartialViewContextImpl.java:72) [jsf-impl.jar:2.0.4-b09]
at com.sun.faces.context.PartialViewContextImpl$DelayedInitPartialResponseWriter.getWrapped(PartialViewContextImpl.java:559) [jsf-impl.jar:2.0.4-b09]我想(当然,通过谷歌搜索)异常通常是由三种原因引起的。
不幸的是,前两个并不是原因。我通过验证器运行错误的xhtml页面,发现标记是有效的,我的会话也没有过期。我还将org.apache.tomcat.util.http.Parameters.MAX_COUNT提高到了standalone.xml中的5000,以解决第三个问题。错误仍然存在。
我还尝试迁移到默认的捆绑Mojarra 2.7.1版本。这防止了第一个运行时异常,但第二个运行时异常仍然存在。导致这个错误的那些页面唯一奇怪的地方是它们中有ajax调用。有趣的是,这个应用程序在AS 5.1.0GA上运行得很好,所以如果我的标记是错误的,它也会给我在5.1.0上的困难时期,但它没有。所以无效的标记是不可能的。任何指点都非常感谢!
UPDATE:刚刚在PartialViewContextImpl.java:431上发现一行显示ctx.getRenderKit()正在计算null。不知道为什么
UPDATE2:只有在表单中使用纯html输入组件(即<input type="text">, <select>等)时,才会发现问题。如果从<h:form>中删除这些组件或将它们转换为相应的JSF标记,它就能正常工作。什么地方出了大错。我不知道这是由jboss,Mojarra,特别是我的应用引起的。我试用了一个普通的普通JSF应用程序,无论我是否使用html输入标记,它都没有错误。所以是我的应用程序和JBoss7.x的结合导致了这一切。有什么想法吗?
发布于 2012-06-01 05:17:00
终于来了!据这里报道,这一问题与Mojarra2.1.7的一个bug有关。
解决方案是将名称属性赋予<h:form>中包含的每个纯html组件。我无法理解这个bug似乎与Mojarra 2.1.7有关的部分。我为我的应用程序配置的jars版本为2.0.4版本,但出现了错误。
https://stackoverflow.com/questions/10698401
复制相似问题