zoukankan      html  css  js  c++  java
  • JIRA中自定义Dom4j依赖,引起”SAXParserFactoryImpl cannot be SAXParserFactory“ 异常

       最近在写JIRA插件,需要用到dom4j解析XML文件作为输入源。

          所以,毫不犹豫在pom.xml里面加上了:

    <dependency>
        <groupId>dom4j</groupId>
        <artifactId>dom4j</artifactId>
        <version>${dom4j.version}</version>
    </dependency>
    <dependency>
        <groupId>jaxen</groupId>
        <artifactId>jaxen</artifactId>
        <version>${jaxen.version}</version>
    </dependency>

    当atlas-debug --product jira --version 4.4.1启动Debug模式后,悲剧的出现了如下异常:

      java.lang.ClassCastException: org.apache.xerces.jaxp.SAXParserFactoryImpl cannot be cast to javax.xml.parsers.SAXParserFactory

    根据经验,很可能ClassLoader加载时,有多个版本的xercesImpl.jar:
    经过mvn dependency:tree分析,发现是由于dom4j依赖另外一个版本的xercesImpl引起的。
    又通过eclipse里面对pom.xml提供的“Dependency Hierarchy”发现,JIRA本身也用到了dom4j。
    到这里,解决办法有了:“不用额外在pom.xml中申明对dom4j的依赖”。

    后记:
    这里问题虽然解决了。
    但是,记得JIRA Plugin的ClassLoader与JIRA CORE的ClassLoader不是一个(可能是分级的,类似IBM websphere的那种ClassLoader父子机制),为什么会出现这种异常呢?
    如果下次因为某种情况,必须使用xercesImpl的另一个版本,该怎么处理呢?

    等有时间,一定得抽时间研究一下JIRA ClassLoader的机制。
     
  • 相关阅读:
    Mysql 重做日志及与二进制日志的区别
    【MySql】性能优化之分析命令
    ubuntu一些基本软件安装方法
    Linux学习笔记
    exp/imp三种模式——完全、用户、表
    Oracle学习日志20150302
    如何在macOS Sierra中运行CORE Keygen破解程序
    国内各大互联网公司技术站点集合
    React Native资料
    React Native集成到现有项目(非cocoa pods)
  • 原文地址:https://www.cnblogs.com/zhangqingsh/p/2954141.html
Copyright © 2011-2022 走看看