由于某些奇怪的原因,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
。升级版本是可能的,但即使使用较新的版本,它们似乎也有这种约束。
答案 0 :(得分:1)
是的,有办法改变这种状况。错误信息真的应该提到它,但因为它不...让我们看看。常量在WstxInputProperties
中定义(对于Woodstox特定的,而不是标准的Stax),您需要的属性是P_MAX_ATTRIBUTE_SIZE
。
要有效禁用检查,请使用Integer.MAX_VALUE
的值。
通过调用XMLInputFactory.setProperty
方法来改变价值。
这些限制被添加以防止各种拒绝服务(DoS)攻击:有一些;您可以在WstxInputProperties
中看到可用的内容。设置非常保守,看看你是否真的需要处理512kB属性值可能很有意义......:)