javax.xml.stream.XMLStreamException:超出最大元素深度限制(1000)

时间:2017-07-20 15:21:48

标签: java xml parsing exception

有没有人知道如何为ReaderConfig.class配置最大元素深度,默认情况下它使用此值https://github.com/FasterXML/woodstox/blob/master/src/main/java/com/ctc/wstx/api/ReaderConfig.java#L44,但无论如何我都无法改变它。

因为我有异常 javax.xml.stream.XMLStreamException:最大元素深度限制(1000)当我尝试解析一些大的XML文档时超过了。

更新 我对它进行了更深入的调查,以及我所看到的内容

    FileInputStream input = new FileInputStream(new File("...../some.xml"));
    InputStreamReader inputStreamReader = new InputStreamReader(input);

    XStream xstream = new XStream(new StaxDriver());
    xstream.fromXML(inputStreamReader);
在StaxDriver.java中我们有字段XMLInputFactory inputFactory;通过XMLInputFactory.newInstance()初始化StaxDriver.java#150,我无法传递XMLInputFactory的任何参数。

注意: 当我们使用com.ctc.wstx.stax.WstxInputFactory时,这个例外会有所不同。

我通过属性javax.xml.stream.XMLInputFactory = com.sun.xml.internal.stream.XMLInputFactoryImpl修复此问题

但对于WstxInputFactory,我没有看到任何解决方案。

2 个答案:

答案 0 :(得分:1)

ReaderConfig的实例

调用此方法
public void setMaxElementDepth(int value) {
    mMaxElementDepth = value;
}

答案 1 :(得分:0)

不,不要关注ReaderConfig(或WriterConfig)。 这是内部类:所有配置都应该通过setProperty()XMLInputFactory中的标准XMLOutputFactory方法。

使用的密钥在另一个类中定义;工厂级的标准Stax;对应的Stax2扩展(我认为XMLInputFactory2 / XMLOutputFactory2,或者可能是XMLStreamReader2 / XMLStreamWriter2);和Woodstox在WstxInputPropertiesWstxOutputProperties中拥有的属性。