TransformerFactory 和 Xalan 依赖冲突

Vel*_*rot 10 java xml xalan maven

我有以下代码:

javax.xml.transform.TransformerFactory factory = TransformerFactory.newInstance();
factory.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
javax.xml.transform.Transformer transformer = factory.newTransformer();
Run Code Online (Sandbox Code Playgroud)

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

java.lang.IllegalArgumentException: Not supported: http://javax.xml.XMLConstants/property/accessExternalDTD
Run Code Online (Sandbox Code Playgroud)

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

小智 14

需要设置系统级属性如下

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


Vel*_*rot 5

从 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>
Run Code Online (Sandbox Code Playgroud)

  • 我已经排除了 xerces 库,但仍然遇到相同的错误。我怎么知道还有什么可能与 TransformerFactory 发生冲突? (5认同)