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的机制。
     
  • 相关阅读:
    年底送书活动:送出6本技术书籍,价值372元!
    (7)ASP.NET WEB服务器控件
    (6)DataTable 转换成 Json
    (9)C#连mysql
    (8)C#连sqlserver
    VM虚拟机
    (7)C#连DB2---oledb方式
    (48)C#网络4 web
    远程桌面
    (47)C#运行时序列化
  • 原文地址:https://www.cnblogs.com/zhangqingsh/p/2954141.html
Copyright © 2011-2022 走看看