在我目前的项目中,我们的目标是JDK 1.6运行时环境。对于遗留rasons,Xerces JAR文件捆绑在应用程序中。
这些不再需要了,对吧?JDK已经(有一段时间)在JDK中捆绑了XML解析库?
发布于 2011-10-17 21:21:51
当JAXP被添加到JRE中时,捆绑XML解析器从1.4开始就不再是必要的。您应该使用JAXP,而不是直接调用Xerces。在内部,JRE无论如何都捆绑和使用Xerces (带有"com.sun“前缀)。
发布于 2011-10-17 21:35:49
这些XML服务使用所谓的“服务提供者”机制插入应用程序环境中。
它的工作原理如下:
-Djavax.xml.parsers.SAXParserFactory=<some class>.FactoryFinder在特殊属性文件中查找属性。例如,找不到${java.home}/lib/jaxp.properties.META-INF/services/<some service>中查找服务描述,例如META-INF/services/javax.xml.parsers.SAXParserFactory。它是一个应该包含工厂类名的文件,例如,org.apache.xerces.jaxp.SAXParserFactoryImpl.因此,如果您没有指向明显的工厂类的系统属性,java将会悄悄地选择合适的实现。
发布于 2011-10-18 00:27:29
JDK中的解析器是Xerces的分支,但它有很多but。我建议生产应用程序始终优先使用Apache版本的解析器。这些bug很少见,但它们是不可预测的,而且它们不仅影响现实生活中看不到的极端情况;我见过许多解析非常无聊的XML文档,并将损坏的数据传递给应用程序以获取属性值的情况。Sun/Oracle没有表现出解决该问题的兴趣。每次都使用Apache Xerces。
更新(2018)
据我所知,JDK版本的Xerces的问题似乎已经在Java 8中解决了,所以这个建议已经过时了。
https://stackoverflow.com/questions/7794281
复制相似问题