0

出于某种奇怪的woodstox-core-asl原因,似乎属性值的最大大小限制为 512KB。所以 XML 解析失败并出现错误(下面的 524288 是 512KB 限制):

com.ctc.wstx.exc.WstxParsingException: Maximum attribute size (524288) exceeded
 at [row,col {unknown-source}]: [1,898330]
    at com.ctc.wstx.sr.StreamScanner.constructWfcException(StreamScanner.java:606)
    at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:479)
    at com.ctc.wstx.sr.StreamScanner.throwParseError(StreamScanner.java:464)
    at com.ctc.wstx.sr.BasicStreamReader.parseAttrValue(BasicStreamReader.java:1959)
    at com.ctc.wstx.sr.BasicStreamReader.handleNsAttrs(BasicStreamReader.java:3063)

有没有办法配置这个最大属性大小甚至完全禁用它?(不过,为什么属性值必须那么大是一个不同的论点——我必须看看我能做些什么。)

我试图查看源代码,但我只能有限地访问它 - 无法在工作中浏览 github。他们的文档中也没有任何指针。

我正在使用的库版本是4.2.0. 升级版本是可能的,但即使使用较新的版本,它们似乎也有这个限制。

4

1 回答 1

1

是的,有一种方法可以改变这一点。错误消息确实应该提到它,但既然它没有......让我们看看。常量在WstxInputProperties(针对 Woodstox 特定的,而不是标准的 Stax 的)中定义,您需要的属性是P_MAX_ATTRIBUTE_SIZE. 要有效禁用检查,请使用Integer.MAX_VALUE. 值是通过调用XMLInputFactory.setProperty方法改变的。

添加这些限制是为了防止各种拒绝服务 (DoS) 攻击:有一些;您可以在WstxInputProperties. 设置非常保守,看看您是否真的需要处理 512kB 属性值可能很有意义...... :)

于 2017-06-23T00:58:37.737 回答