Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found 问题排查

自定义的classLoader启动spring容器,遇到
Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not subtype (classpath下有类)

Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found(classpath下没有类)
两个异常信息。

这个问题比较诡异,缺少包和没有包都有问题,有包的情况下报 not subtype(这个应该是classLoader之间的问题,直接调整类的加载策略为双亲委派策略,问题解决),没包的情况报 not found。只能走上排查之路了。
先根据堆栈进入到源码,

Caused by: javax.xml.parsers.FactoryConfigurationError: Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found
at javax.xml.parsers.DocumentBuilderFactory.newInstance(Unknown Source)
at com.ibatis.common.xml.NodeletParser.createDocument(NodeletParser.java:165)
at com.ibatis.common.xml.NodeletParser.parse(NodeletParser.java:59)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:62)
at com.ibatis.sqlmap.engine.builder.xml.SqlMapConfigParser.parse(SqlMapConfigParser.java:55)
at org.springframework.orm.ibatis.SqlMapClientFactoryBean.buildSqlMapClient(SqlMapClientFactoryBean.java:338)
at org.springframework.orm.ibatis.SqlMapClientFactoryBean.afterPropertiesSet(SqlMapClientFactoryBean.java:291)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1648)
at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1585)
... 38 common frames omitted

xml的解析工具在实例化的时候出现了错误,比较奇怪的是,其他使用了相同框架的模块并不会出现这个问题。先打开日志输出的参数,在jvm的启动参数中增加 -Djaxp.debug=true

这个参数打开之后,可以输出 DocumentBuilderFactory 在实例化时会使用哪个具体的实现类去实例化。

JAXP: find factoryId =javax.xml.transform.TransformerFactory
JAXP: loaded from fallback value: com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl
JAXP: created new instance of class com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl using ClassLoader: null

JAXP: find factoryId =javax.xml.parsers.SAXParserFactory
JAXP: loaded from fallback value: com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl
JAXP: created new instance of class com.sun.org.apache.xerces.internal.jaxp.SAXParserFactoryImpl using ClassLoader: null

正常的情况下,会优先使用你的配置类。你可以在 systemProperty中配置具体使用哪个类。如果没有配置,会使用 com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl 的实现类,是jdk8中自带的实现类。

默认的 fallback类为:com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
注意这一小段代码,在classpath下寻找fallback类,如果没有找到,使用默认的fallback类,这个自动在包中搜索的,所以只要你的包中有相关的实现类,就会被加载并且实例化。

// Try Jar Service Provider Mechanism
T provider = findServiceProvider(type);
if (provider != null) {
return provider;
}

那问题其实已经很明确了,在classpath目录下找找是不是有相关的类,将相关的依赖包排除掉即可。

<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>

<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>

都让它使用默认的Factory类。排除掉之后,问题解决。

时间: 2024-11-09 06:47:29

Provider org.apache.xerces.jaxp.DocumentBuilderFactoryImpl not found 问题排查的相关文章

applicationContext.xml无错有红叉,Error occured processing XML &#39;Provider org.apache.xerces.parsers.解决方案

applicationContext.xml无错有红叉,网上讲的取消xml验证的方法没用... 甚至我的myeclipse10连windows-->perferences-->myeclipse-->validation 下的Build和Manual都找不到.. 虽然挂红叉能运行,但有个严重的问题是Hibernate逆向生成model和dao层的时候如果使用spirng来管理,则SessionFactoryId很可能是空的,就不能继续往下生成. 所幸在论坛瞥到一帖子说是因为插件冲突——s

java.lang.NoClassDefFoundError: org/apache/xerces/jaxp/datatype/XMLGregorianCalendarImpl$DaysInMonth

问题描述: 项目用到cxf和jaxb数据绑定,发布了一个webservice接口,打成war包部署在tomcate下运行,客户端调用没有任何问题,但是打成ear包部署到weblogic 10.3.6上,客户端调用报系统异常的错误,服务端异常如下: at org.apache.xerces.jaxp.datatype.XMLGregorianCalendarImpl.maximumDayInMonthFor(Unknown Source) at org.apache.xerces.jaxp.dat

ClassCastException: org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces

一.现象 有两应用,单独部署任意一个应用到weblogic下,正常运行.将两应用部署到一起,启动报: Caused by: java.lang.ClassCastException: org.apache.xerces.parsers.XML11Configuration cannot be cast to org.apache.xerces.xni.parser.XMLParserConfiguration at org.apache.xerces.parsers.DOMParser.<ini

C# ikvm 运行htmlunit Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not found

在使用 ikvm 去运行 htmlunit 中的 webclient Getpage的时候  报错说com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not found 查了半天 虽然不知道原因是什么但是 在使用 getpage 的时候 添加一条 [email protected] s = new [email protected](); 就可以了  原文地址 http://stackoverflow.com/q

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 3 无效。

org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from class path resource [scheduling.xml]; nested exception is com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的

HTTP Status 500 - org.apache.jasper.JasperException: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException

HTTP Status 500 - org.apache.jasper.JasperException: com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 2 字节的 UTF-8 序列的字节 2 无效. 当tomcat容器中仅仅有某个web应用不能访问,或者总是时不时出现错误,有可能在应用中某个重要使用的配置文件或者其他文件中存在无法解码的字符,就是乱码. 此次出现的异常如上,原因为 自定义标签库

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Invalid byte 2 of 2-byte 分类: Web Services 2011-08-17 22:04 11022人阅读 评论(3) 收藏 举报 bytexmlencoding com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: Inva

com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 x 无效

在启动Tomcat项目时,控制台报错:nested exception is com.sun.org.apache.xerces.internal.impl.io.MalformedByteSequenceException: 3 字节的 UTF-8 序列的字节 2 无效. 该错误是由于一些配置文件如:applicationContext.xml的编码原因. 在配置文件中引入了<?xml version="1.0" encoding="UTF-8"?>,

org.apache.xerces.dom.ElementNSImpl.setUserData(Ljava/lang/String;Ljava/lang

HTTP Status 500 - Handler processing failed; nested exception is java.lang.AbstractMethodError: org.apache.xerces.dom.ElementNSImpl.setUserData(Ljava/lang/String;Ljava/lang/Object;Lorg/w3c/dom/UserDataHandler;)Ljava/lang/Object; type Exception report