编程语言
首页 > 编程语言> > DocumentBuilderFactory.setFeature调用失败的问题分析、解决javax.xml.parsers.DocumentBuilderFactory.setFeature(Lja

DocumentBuilderFactory.setFeature调用失败的问题分析、解决javax.xml.parsers.DocumentBuilderFactory.setFeature(Lja

作者:互联网

 mybatis启动报错

1. DocumentBuilderFactory加载顺序

 

 

    System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");

 

 

文件内容如下:

 

javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

 

 

文件内容如下:

 

com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

 

 

com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

 

2. 引起问题的原因

 

项目引入了xercesImpl,在该jar中有Services API的定义,导致DocumentBuilderFactory初始化为org.apache.xerces.jaxp.DocumentBuilderFactoryImpl,而在这个实现类中没有setFeature方法

 

 

3. 尝试解决方法

 

 

验证结果:无法解决
问题原因:好多地方有对xercesImpl的依赖,项目中去除对该JAR的直接依赖解决不了问题,如果完全去除会对其它功能有影响;

 

依赖xercesImpl的JAR

 

commons-dbcp
jaxen
xtom

 

 

验证结果:无法解决
问题原因:实际还是使用了xercesImpl中定义的Services API

 

 

DocumentBuilderFactory.newInstance("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");

 

验证结果:问题解决

 

标签:setFeature,lang,xerces,DocumentBuilderFactory,DocumentBuilderFactoryImpl,apache,
来源: https://www.cnblogs.com/kzd666/p/14364287.html