首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Mojarra2.0.4问题将JBoss配置为7.1.1

用Mojarra2.0.4问题将JBoss配置为7.1.1
EN

Stack Overflow用户
提问于 2012-05-22 08:28:14
回答 1查看 4K关注 0票数 2

我有一个在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

代码语言:javascript
复制
<?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>

这导致在部署时引发以下异常

代码语言:javascript
复制
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

我引用了链接并修改了我的依赖项,如下所示

代码语言:javascript
复制
<?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>

它消除了部署时的错误,但引入了以下运行时异常

代码语言:javascript
复制
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)

代码语言:javascript
复制
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]

我想(当然,通过谷歌搜索)异常通常是由三种原因引起的。

  1. xhtml中使用的无效/未关闭标记(错误传播的异常)
  2. 会话超时(错误传播的异常)
  3. Tomcat中POST参数的no限制

不幸的是,前两个并不是原因。我通过验证器运行错误的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的结合导致了这一切。有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-01 05:17:00

终于来了!据这里报道,这一问题与Mojarra2.1.7的一个bug有关。

解决方案是将名称属性赋予<h:form>中包含的每个纯html组件。我无法理解这个bug似乎与Mojarra 2.1.7有关的部分。我为我的应用程序配置的jars版本为2.0.4版本,但出现了错误。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10698401

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档