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的机制。
     
  • 相关阅读:
    Linux常用命令之 查找命令 find —— 细说 -atime,-mtime,-ctime
    centos设置静态ip
    Linux中vim的基本操作
    Linux中/和~的区别
    Linux安装vmtools工具
    关于 [lambda x: x*i for i in range(4)] 理解
    Ubuntu虚拟环境的搭建
    tomcat的中的Apache的apr是个啥东东???
    什么是web资源????
    Handlebars学习第一天
  • 原文地址:https://www.cnblogs.com/zhangqingsh/p/2954141.html
Copyright © 2011-2022 走看看