2014-02-05 59 views
1

我想解析一個XML文件,它是在Java中使用SAX解析器的1.23 GB。我正在使用Mac OS和JDK 1.7.0.51。不幸的是,我收到以下錯誤:如何增加使用SAX解析XML文件的entityExpansionLimit

The pasrser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK. 

我一直建議得到實體擴展擴展,但不知道如何做到這一點。任何人都可以在這個問題上幫助我。非常感謝您的幫助。

回答

1

這在https://jaxp.java.net/1.4/JAXP-Compatibility.html等討論。如果它處於活動狀態(可能是默認情況下),則需要關閉FEATURE_SECURE_PROCESSING,並將解析器屬性http://apache.org/xml/properties/entity-expansion-limit設置爲所需的大小。

請注意,安全問題,雖然。一般來說,任何正在做這麼多實體擴展的事情都必須被視爲可能的DOS攻擊。這就是爲什麼這個限制存在,並且實際上經常在實際系統中設置爲而不是較高的

無可否認,大於1GB的文檔是一個特例。但我建議您放寬處理該特定文檔的任務的限制只有。坦率地說,你可能想考慮這個文檔是否應該像實體一樣使用實體,以及是否有更好的方式來表達它需要說的內容。

+0

謝謝您的回覆。該網站上有一些代碼。我嘗試了他們,但不幸的是我仍然有同樣的問題。我試過這一個:SAXParserFactory spf = SAXParserFactory.newInstance(); spf.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING,false); – user2864315

2

我找到了解決此問題的解決方案。它目前正在與我合作。我正在使用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 

希望這可以幫助那些可能遇到此問題的人。