我遇到了 Xerces 库的一些问题,我依赖的第三方库使用了它。
Xerces 尚不支持 JAXP 1.5,JAXP 1.5 包含在最新版本的 JDK 1.7 和 JDK 8 中。如果将 Xerces 用作 XML 解析器,这会导致一些问题,当系统知道多个 XML 解析器时可能会发生这种情况。删除 xercesImpl-v2.9.0.jar
立即解决了问题,但随后第 3 方库不再工作。
我可以看到该问题的两种解决方案:
org.apache.xerces.util.XMLCatalogResolver
,用于 CustomResolver.java
.目录解析器是否有其他选项而不是 Xerces 选项? 我发现了以下三个属性:
-Djavax.xml.transform.TransformerFactory
-Djavax.xml.parsers.SAXParserFactory
-Djavax.xml.parsers.DocumentBuilderFactory
不过,这会导致两个问题:
最佳答案
xerces
会导致您的第 3 方库之一中断)。 因此,首先,决定您是否可以避免使用该第 3 方库,并使用对 Xerces 没有硬依赖关系的替代库。由于 JAXP 现在已经相当成熟,对 Xerces 的硬依赖的唯一合理场景是如果您的第 3 方库使用一些非常特定的 Xerces 功能来完成其工作。
如果您可以避免使用该 3rd 方库,那么请这样做。
否则,您可以设置这三个系统属性,并将 Xerces 保留在类路径中。然后会发生的是:
如果 Xerces 和新解析器之间存在与类加载相关的冲突,那么您仍有可能遇到问题。在那种情况下,恐怕你很不走运(除非你能以某种方式确保两个解析器的两种用法是在不同的类加载器下完成的)。
关于java - Xerces 中缺少 JAXP 1.5 支持 - 可能的解决方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21827340/