如何使用SAX解析XML文件时增加entityExpansionLimit呢?

3
我正在尝试使用Java中的SAX解析器解析一个大小为1.23 GB的XML文件。我正在使用Mac OS和JDK 1.7.0.51。不幸的是,我遇到了以下错误:
The pasrser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK.

我被建议扩展实体扩展,但不知道如何做。请问有人能帮我解决这个问题吗?非常感谢您的帮助。

2个回答

3

我找到了解决这个问题的方法,目前它正与我一起工作。我正在使用Eclipse。以下是步骤:

1- Right-click on the project in Eclipse
2- Select Run -> Run Configurations
3- Select Arguments 
4- In the VM arguments, add the following:  -DentityExpansionLimit=2500000

希望这篇文章能帮助遇到这个问题的人。

1

这个问题在https://jaxp.java.net/1.4/JAXP-Compatibility.html等其他地方都有讨论。如果FEATURE_SECURE_PROCESSING处于激活状态(默认情况下可能是),则需要将其关闭,并将解析器属性http://apache.org/xml/properties/entity-expansion-limit设置为所需大小。

请注意安全问题。一般来说,任何进行如此多实体扩展的内容都必须被视为可能的DOS攻击。这就是为什么存在这个限制,并且实际上在真实系统中通常会将其设置得更低。

不可否认,一个大于1GB的文档是一个特殊情况。但我建议您只为处理该特定文档的任务放宽限制。而且,坦率地说,您可能需要考虑该文档是否应该像它明显那样使用实体,以及是否有更好的方式来表达它所需表达的内容。


谢谢您的回复。那个网站上有一些代码,我尝试了它们,但不幸的是我仍然遇到同样的问题。我尝试了这个:SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,false); - Mod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接