XMLSchema的解决方法不支持maxOccurs大于5000

mzy*_*iol 6 java xsd jaxp xerces xml-parsing

我的问题是解析具有maxOccurs大于5000(但不是unbounded)的元素的XSD架构.

这实际上是Xerces(我正在使用的版本2.9.1)或JAXP中的一个已知问题,如下所述:http://bugs.sun.com/view_bug.do;jsessionid=85335466c2c1fc52f0245d20b2e?bug_id= 4990915

我已经知道,如果我将XSD中的maxOccurs数字从大于5000的数字更改为unbounded一切正常.遗憾的是,在我的情况下,这不是一个选项(我不能插入XSD文件).

我的问题是:

  • 有人知道Xerces中有关此问题的其他一些解决方法吗?要么
  • 有人可以推荐另一个没有此限制的XML解析器吗?

谢谢!

小智 12

我有同样的问题.我用过这个:

System.setProperty("jdk.xml.maxOccurLimit", "XXXXX");
Run Code Online (Sandbox Code Playgroud)

  • 根据https://docs.oracle.com/javase/tutorial/jaxp/limits/limits.html,该属性应该是“jdk.xml.maxOccurLimit”,我想这就是答案被否决的原因。 (2认同)

mzy*_*iol 6

我找到了一个不需要更改解析器的解决方案.

有一个FEATURE_SECURE_PROCESSING功能可以对maxOccurs(以及其他几个)进行5000限制.

以下是描述限制的文档:http://docs.oracle.com/javase/7/docs/technotes/guides/xml/jaxp/JAXP-Compatibility_160.html#JAXP_security

  • 示例代码: `SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI); schemaFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, Boolean.FALSE);` (2认同)

Min*_* Yu 6

xjc在控制台中使用命令时,我在寻找此问题的解决方案时遇到了这个线程。

对于使用xjc命令解析 xsd 的任何人,这对我有用:

$ xjc -nv foo.xsd
Run Code Online (Sandbox Code Playgroud)

但请注意:

默认情况下,XJC 绑定编译器在处理之前对源模式执行严格的验证。使用此选项可禁用严格的架构验证。这并不意味着绑定编译器不会执行任何验证,而是意味着它将执行不太严格的验证。

因此,如果您认为您的 xsd 来自一个好的来源,那么使用不太严格的验证应该不是问题。