zoukankan      html  css  js  c++  java
  • DocumentBuilderFactory.setFeature调用失败的问题分析、解决javax.xml.parsers.DocumentBuilderFactory.setFeature(Ljava/lang/String;Z)V异常

     mybatis启动报错

    1. DocumentBuilderFactory加载顺序

    • 使用 javax.xml.parsers.DocumentBuilderFactory 系统属性;
        System.setProperty("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");
    • 使用 JRE 文件夹中的属性文件 "lib/jaxp.properties"。此配置文件格式为标准的 java.util.Properties 且包含实现类的完全限定名,其中实现类的键是上述定义的系统属性。 JAXP 实现只读取一次 jaxp.properties 文件,然后缓存其值供以后使用。如果首次尝试读取文件时,文件不存在,则不会再次尝试检查该文件是否存在。首次读取 jaxp.properties 后,其中的属性值不能再更改;

    文件内容如下:

    javax.xml.parsers.DocumentBuilderFactory=com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
    • 使用 Services API(在 JAR 规范中进行了详细描述)来确定类名称。Services API 将查找在运行时可用的 jar 中 META-INF/services/javax.xml.parsers.DocumentBuilderFactory 文件中的类名;

    文件内容如下:

    com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
    • 最后使用平台默认的 DocumentBuilderFactory 实例;

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

    2. 引起问题的原因

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

     

    3. 尝试解决方法

    • 项目中去除xercesImpl依赖

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

    依赖xercesImpl的JAR

    commons-dbcp
    jaxen
    xtom

    • 在项目中增加Services API定义,把其设置为com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl

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

    • 调整DocumentBuilderFactory的创建方式
    DocumentBuilderFactory.newInstance("javax.xml.parsers.DocumentBuilderFactory", "com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl");

    验证结果:问题解决

    • 升级xercesImpl为有setFeature方法的高版本
  • 相关阅读:
    设置IIS7/IIS7.5的FTP支持断点续传
    win10图片打开方式里没有默认照片查看器的解决方法
    使用C#的HttpWebRequest模拟登陆网站
    在Raid模式下装Win10找不到固态硬盘怎么办
    C# String 前面不足位数补零的方法
    [SQL Server]无法创建 SSIS 运行时对象,请验证 DTS.dll 是否可用及是否已注册
    HTTPS协议说明
    技术晨读_20160217
    技术晨读_20160215
    fastcgi安装
  • 原文地址:https://www.cnblogs.com/kzd666/p/14364287.html
Copyright © 2011-2022 走看看