TransformerFactory 和 Xalan Dependency Conflict

2022-09-04 20:17:20

我有以下代码:

javax.xml.transform.TransformerFactory factory = TransformerFactory.newInstance();
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
javax.xml.transform.Transformer transformer = factory.newTransformer();

这通常工作正常。但是,我还需要在我的pom中添加Xalan作为依赖项.xml,当我这样做时,上面的代码现在会抛出一个错误:

java.lang.IllegalArgumentException: Not supported: http://javax.xml.XMLConstants/property/accessExternalDTD

我认为这与Xalan的jar中有一个不同的Transformer实现有关。如何在不更改上述代码并将 Xalan 保留为依赖项的情况下解决此冲突?


答案 1

需要设置系统级属性,如下所示

System.setProperty("javax.xml.transform.TransformerFactory","com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl");

答案 2

从 Xalan 中排除 Xerces 可以解决此问题:

<dependency>
    <groupId>xalan</groupId>
    <artifactId>xalan</artifactId>
    <version>2.7.2</version>
    <exclusions>
        <exclusion>
            <groupId>xerces</groupId>
            <artifactId>xercesImpl</artifactId>
        </exclusion>
    </exclusions>
</dependency>

推荐