如何增加entityExpansionLimit以使用SAX解析XML文件

时间:2014-02-05 21:12:28

标签: java xml parsing sax

我正在尝试使用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 个答案:

答案 0 :(得分: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 :(得分:1)

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

请注意安全问题。通常,任何正在进行这么多实体扩展的东西都必须被视为可能的DOS攻击。这就是为什么存在此限制的原因,实际上在实际系统中通常设置 lower 而不是更高。

不可否认,> 1GB文件是特例。但是我建议你放宽限制来处理该特定文档的任务。坦率地说,您可能想要考虑该文档是否应该尽可能多地使用实体,以及是否有更好的方式来表达它需要说的内容。