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

javax.xml.stream.XMLStreamException:超出最大元素深度限制(1000),java,xml,parsing,exception,Java,Xml,Parsing,Exception,有人知道我如何为ReaderConfig.class配置最大元素深度吗?默认情况下,它使用此值,但我无法更改它 因为我有异常javax.xml.stream.XMLStreamException:当我试图解析某个大xml文档时,超出了最大元素深度限制(1000) 更新: 我已经深入调查过了,我看到的 FileInputStream input = new FileInputStream(new File("...../some.xml")); InputStreamReader

有人知道我如何为ReaderConfig.class配置最大元素深度吗?默认情况下,它使用此值,但我无法更改它

因为我有异常javax.xml.stream.XMLStreamException:当我试图解析某个大xml文档时,超出了最大元素深度限制(1000)

更新: 我已经深入调查过了,我看到的

    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,我看不到任何解决方案。

为您的
ReaderConfig
实例调用此方法:

public void setMaxElementDepth(int value) {
    mMaxElementDepth = value;
}

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


要使用的键在其他类中定义;工厂级标准Stax;对应的Stax2扩展(我认为是
XMLInputFactory2
/
XMLOutputFactory2
,或者可能是
XMLStreamReader2
/
XMLStreamWriter2
);Woodstox在
WstxInputProperties
WstxOutputProperties

中拥有自己的属性。是的,我是在调试模式下完成的,但我想通过属性或更合适的方式对其进行配置。因此,通过读取属性并在代码中调用该方法来配置它。FWIW,对于从配置文件配置STAX解析器,似乎没有任何std支持。STAX API不支持这一点。但是在
XMLInputFactory
上调用
setProperty()
的官方机制是以某种可移植的方式实现的(遗憾的是,没有标准机制来检测哪些属性需要支持)。我想通过属性或其他更合适的方式对其进行配置。您确定文档合法地具有如此深的嵌套吗?设置当然可以更改,但似乎有点极端……例如,每个嵌套级别都会有一些额外的资源使用,可能会在几万或几十万个级别出现问题。没关系,可能看起来很奇怪,但实际上我们有这么深的嵌套。生存是一种痛苦。好吧,我想我会提到它,有时候开发人员最终解决了一个症状,然后发现了另一个根本原因。但我希望嵌套仍然是有限的。无论哪种方式,设置都可以更改,比如说
Integer.MAX_VALUE
,以有效地消除同样,fwtw,这些限制被添加为对拒绝服务攻击的保护:这种特定设置不太可能被使用,但其他一些设置(如实体的嵌套级别)已被报告为实际存在的攻击。这只是一个背景。可能应该放松默认设置…我想知道报告的最高实际嵌套是什么:例如,将其设置为10000可能不会对DoS保护产生太大影响。我使用了-Dcom.ctc.wstx.maxEntityDepth,但它不起作用。@AlexPriadko这将是设置一个“系统属性”,而Stax不使用这些属性进行配置(尽管允许它连接输入/输出工厂)。您需要通过
XMLInputFactory
/
XMLOutputFactory
instance显式地以编程方式设置值。嗨@staxman,我为该主题添加了一些更新,请看一看?