JavaJDK1.6和Xerces? 2 周,1 日 Questions & Answers 22647 在我当前的项目中,我们的目标是JDK1.6运行时环境。对于遗留rasons,Xerces JAR文件捆绑在应用程序中 这些已经不需要了,对吗?JDK(有一段时间)在JDK中捆绑了XML解析库
# 1 楼答案 认可的标准覆盖机制运行良好。贾瓦。赞同。dirs=path_to_folder_包含_new_library_jars将解决JDK 1.6的问题 我已经在百里香叶的背景下验证了上述解决方案。在某些情况下,如果您选择LEGACYHTML5模式,并且如果您使用NekoHtml解析器自动更正未关闭的html标记, Neko依赖Xerces罐子。设置类路径并不能解决问题 谢谢s-n-ushakov
# 2 楼答案 这些XML服务使用所谓的“服务提供者”机制插入应用程序环境 其工作原理如下: 它试图找到正好指向应该使用的工厂类的系统属性。例如-Djavax.xml.parsers.SAXParserFactory=<some class>李> 如果未找到系统属性FactoryFinder在特殊属性文件中查找属性。例如${java.home}/lib/jaxp.properties李> 如果未找到文件属性,FactoryFinder将在类路径META-INF/services/<some service>中查找服务描述,例如META-INF/services/javax.xml.parsers.SAXParserFactory。 它是一个应该包含工厂类名的文件,例如org.apache.xerces.jaxp.SAXParserFactoryImpl李> 如果类路径中没有这样的文件,java将使用默认的工厂实现李> 所以,如果您没有指向工厂类的系统属性,java将悄悄地选择合适的实现
# 4 楼答案 JDK中的解析器是Xerces的分支,但它有很多缺陷。我建议生产应用程序优先使用Apache版本的解析器。这些漏洞很少见,但它们是不可预测的,它们不仅影响现实生活中看不到的角落案例;我见过很多情况,解析非常无聊的XML文档,并将损坏的数据传递给应用程序以获取属性值。Sun/Oracle对解决该问题没有兴趣。每次都使用Apache Xerces 更新(2018) 据我所知,Xerces的JDK版本的问题似乎已经在Java8中得到了解决,所以这个建议已经过时了
# 1 楼答案
认可的标准覆盖机制运行良好。贾瓦。赞同。dirs=path_to_folder_包含_new_library_jars将解决JDK 1.6的问题
我已经在百里香叶的背景下验证了上述解决方案。在某些情况下,如果您选择LEGACYHTML5模式,并且如果您使用NekoHtml解析器自动更正未关闭的html标记, Neko依赖Xerces罐子。设置类路径并不能解决问题
谢谢s-n-ushakov
# 2 楼答案
这些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将悄悄地选择合适的实现
# 3 楼答案
自从1.4版本将JAXP添加到JRE之后,就没有必要绑定XML解析器了。您应该使用JAXP,而不是直接调用Xerces。在内部,JRE绑定并使用Xerces(前缀为“com.sun”)
# 4 楼答案
JDK中的解析器是Xerces的分支,但它有很多缺陷。我建议生产应用程序优先使用Apache版本的解析器。这些漏洞很少见,但它们是不可预测的,它们不仅影响现实生活中看不到的角落案例;我见过很多情况,解析非常无聊的XML文档,并将损坏的数据传递给应用程序以获取属性值。Sun/Oracle对解决该问题没有兴趣。每次都使用Apache Xerces
更新(2018)
据我所知,Xerces的JDK版本的问题似乎已经在Java8中得到了解决,所以这个建议已经过时了