我正在尝试使用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.
我被建议扩展实体扩展,但不知道如何做到这一点。有谁可以帮我解决这个问题。非常感谢您的帮助。
答案 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文件是特例。但是我建议你放宽限制仅来处理该特定文档的任务。坦率地说,您可能想要考虑该文档是否应该尽可能多地使用实体,以及是否有更好的方式来表达它需要说的内容。