如何强制使用特定的XML解析器

das*_*asp 4 java xml parsing

我在应用程序的类路径中都有Xerces和Oracle XML解析器(不要问为什么)。

当我创建一个new时javax.xml.parsers.DocumentBuilderFactory,类加载器会自动选择Oracle XML解析器。但是,这不是完整/正确的实现,因此让我头疼。

在构造文档构建器工厂时,是否有一种方法可以强制/告诉类加载器使用Xerces parces?

KJP*_*KJP 5

对于我的大型项目,skaffman的答案在大多数情况下会起作用,但并非所有时间都起作用,因为我们有多个依赖于这些库的子项目。我们查看了javax.xml.transform.TransformerFactory.newInstance()的源代码,发现它使用了javax.xml.transform.FactoryFinder.find(“ javax.xml.transform.TransformerFactory”,...)。然后,此方法查看系统参数以确定正确的实现。

我们最终通过在运行时添加-D参数来强制正确的类来对其进行修复:

-Djavax.xml.transform.TransformerFactory = org.apache.xalan.processor.TransformerFactoryImpl -Djavax.xml.parsers.SAXParserFactory = org.apache.xerces.jaxp.SAXParserFactoryImpl -Djavax.xml.parsers.DocumentBuilderFactory = org.apache.xerces .jaxp.DocumentBuilderFactoryImpl