2013-05-20 119 views
4

我的問題是解析具有大於5000(但不是unbounded)的maxOccurs的元素的XSD架構。XMLSchema的解決方法不支持maxOccurs大於5000

其實,這是在任何一個的Xerces已知問題(我使用的是哪個版本2.9.1)或JAXP,如下所述:http://bugs.sun.com/view_bug.do;jsessionid=85335466c2c1fc52f0245d20b2e?bug_id=4990915

我已經知道,如果我在XSD改變了maxOccurs的數字從大於5000的數字到unbounded都運行良好。可悲的是,在我的情況下,這不是一個選項(我不能插手XSD文件)。

我的問題是:

  • 是否有人知道的Xerces對於這個問題一些其他的解決方法嗎?或
  • 有人可以推薦另一個沒有此限制的XML解析器嗎?

謝謝!

+1

該錯誤報告顯示實際限制爲2147483647. –

+0

在Xerces中加載模式時從解析方法拋出的異常明確指出: FATAL:org.xml.sax.SAXParseException:解析器的當前配置不允許一個maxOccurs屬性值應設置爲大於值5,000.' – mzywiol

+1

請注意「當前配置」字樣,並且不要將「配置」與「實施」混淆。 –

回答

6

我發現了一個不需要更改解析器的解決方案。

有一個FEATURE_SECURE_PROCESSING feature它把maxOccurs的5000限制(以及其他幾個)。

這裏是描述限制文檔:http://docs.oracle.com/javase/7/docs/technotes/guides/xml/jaxp/JAXP-Compatibility_160.html#JAXP_security

+0

你說得對,我更新了它們。第二篇鏈接文章的新版本沒有提及5000的限制(我認爲只有64000的限制和不同的限制),但是已經過了四年,也許事情已經發生了變化。 – mzywiol

7

我有同樣的問題。我用這個:

System.setProperty("jdk.xml.maxOccurLimit", "XXXXX"); 
+1

根據https://docs.oracle。com/javase/tutorial/jaxp/limits/limits.html該屬性應該是'jdk.xml.maxOccurLimit',我想這就是爲什麼答案被低估了。 – Boris

1

我碰到這個線程來尋找這個問題的解決方案時,在控制檯中使用xjc命令時。

對於誰在使用xjc命令解析XSD任何人,這對我的作品:

$ xjc -nv foo.xsd 

要知道,雖然:

默認情況下,XJC綁定編譯器執行源的嚴格驗證模式在處理它之前。使用此選項禁用嚴格的模式驗證。這並不意味着綁定編譯器不會執行任何驗證,但意味着它將執行不太嚴格的驗證。

所以,如果你認爲你的xsd是一個很好的來源,使用較不嚴格的驗證應該不成問題。

相關問題