2017-06-22 22 views
0

对于一些离奇的原因,woodstox-core-asl似乎对属性值的最大大小有限制为512KB。所以XML解析失败,出现错误(524288下面是512KB限制):使用woodstox配置最大属性大小

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

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

这些限制是为防范各种拒绝服务(DoS)攻击而添加的:有几个;你可以在WstxInputProperties看到。设置是非常保守的,看看你是否真的需要处理512kB的属性值...... :)

+0

我在看那些类 - 我只是不知道如何使用该属性。我会试一下! – mystarrocks

+0

好的。 Stax规范没有很多配置方法,所以'setProperty()'几乎是配置方面的唯一方法。 :) – StaxMan