使用woodstox配置最大属性大小

时间:2017-06-22 16:19:37

标签: java xml-parsing woodstox

由于某些奇怪的原因,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。升级版本是可能的,但即使使用较新的版本,它们似乎也有这种约束。

1 个答案:

答案 0 :(得分:1)

是的,有办法改变这种状况。错误信息真的应该提到它,但因为它不...让我们看看。常量在WstxInputProperties中定义(对于Woodstox特定的,而不是标准的Stax),您需要的属性是P_MAX_ATTRIBUTE_SIZE。 要有效禁用检查,请使用Integer.MAX_VALUE的值。 通过调用XMLInputFactory.setProperty方法来改变价值。

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