hyhos

  BlogJava :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理 ::
  2 随笔 :: 0 文章 :: 5 评论 :: 0 Trackbacks

访问AIX系统中部署在OC4J中的web 模块的页面时遇到这个错误:
  javax.xml.parsers.FactoryConfigurationError: Provider null could not be instantiated:         
    java.lang.NullPointerException
        at javax.xml.parsers.SAXParserFactory.newInstance(Unknown Source)
        at org.apache.commons.digester.Digester.getFactory(Digester.java:478)
        at org.apache.commons.digester.Digester.getParser(Digester.java:683)
        at org.apache.commons.digester.Digester.getXMLReader(Digester.java:891)
        at org.apache.commons.digester.Digester.parse(Digester.java:1591)
        at org.apache.struts.action.ActionServlet.initServlet(ActionServlet.java:1433)
        at org.apache.struts.action.ActionServlet.init(ActionServlet.java:466)
        at javax.servlet.GenericServlet.init(GenericServlet.java:256)
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpApplication.loadServlet(HttpApplication.java:2231)
        at com.evermind[Oracle Containers for J2EE 10g (10.1.3.0.0) ].server.http.HttpApplication.findServlet(HttpApplication.java:4617)
        ……
或者这样的异常:
  
javax.servlet.jsp.JspException: Can't get definitions factory from context.
     at org.apache.struts.taglib.tiles.InsertTag.processDefinitionName(InsertTag.java:583)
     at org.apache.struts.taglib.tiles.InsertTag.createTagHandler(InsertTag.java:487)
     at org.apache.struts.taglib.tiles.InsertTag.doStartTag(InsertTag.java:451)
     at _welcome._jspService(_welcome.java:54)
     [SRC:/welcome.jsp:4]

     ……
而当在Windows环境下部署时就没有问题。  

这里是因为IBMAIX系统使用的是IBMJDK。而出现这个问题正是因为IBMSUNJDK的差异。 具体是因为 $JAVA_HOME/jre/lib/jaxp.properties 这个文件。

这个文件以key=value的形式配置和指定实际使用的XML解析器实现类(譬如:javax.xml.parsers.SAXParserFactory=org.apache.xerces.jaxp.SAXParserFactoryImpl)。在XML解析器初始化之前,JDK首先会搜索Systemproperties寻找解析器的配置项,如果没有则会搜索 $JAVA_HOME/jre/lib 路径下的 jaxp.properties 文件,如果还没有,接下来会在classpath上的.jar包中寻找,仍然没有的话就会使用默认的解析器。

实际上这个文件在SUNJDK中是不存在的。在找不到文件的情况下,最终将使用默认解析器。在IBMJDK中存在 jaxp.properties这个文件。但是这个文件中默认所有的配置项是注释掉的,所以在搜索到此处时,不再继续向下搜索,但是由于读取不到配置项,所以会返回null ,于是出现了上文的第一个错误。第二个异常大概是因为访问使用tiles框架的页面时,由于XML解析器初始化出错,所以tiles框架的配置文件也就读取不了了。

参考文章: Java XML API 漫谈(http://robbin.javaeye.com/blog/75)

posted on 2007-10-21 00:40 hyhos 阅读(2413) 评论(3)  编辑  收藏 所属分类: IT

评论

# re: 关于jaxp.properties的问题 2008-11-30 10:52 QQ351156739
大哥,有什么解决办法啊!  回复  更多评论
  

# re: 关于jaxp.properties的问题 2008-12-09 15:46 兕尘
我也是同样的问题啊,有没解决方法啊  回复  更多评论
  

# re: 关于jaxp.properties的问题[未登录] 2014-09-01 15:56 King
static
{
// 使用SAX解析工厂
System.setProperty("javax.xml.parsers.SAXParserFactory",
"org.apache.xerces.jaxp.SAXParserFactoryImpl");
// 使用DOM解析工厂
System.setProperty("javax.xml.parsers.DocumentBuilderFactory",
"org.apache.xerces.jaxp.DocumentBuilderFactoryImpl");
}

不使用jdk默认的,直接设定为开源包xercesImpl.jar中的xml解析器。  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: