使用 woodstox 配置最大属性大小
Configure max attribute size with 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
。升级版本是可能的,但即使是更新的版本,他们似乎也有这个限制。
是的,有一种方法可以改变它。错误消息确实应该提到它,但既然它没有……让我们看看。常量在 WstxInputProperties
中定义(对于 Woodstox 特定的,而不是标准的 Stax 的)并且 属性 你需要的是 P_MAX_ATTRIBUTE_SIZE
。
要有效地禁用检查,请使用 Integer.MAX_VALUE
的值。
通过调用 XMLInputFactory.setProperty
方法更改值。
添加这些限制是为了防止各种拒绝服务 (DoS) 攻击:有一些;您可以在 WstxInputProperties
中看到可用的。设置非常保守,看看您是否真的需要处理 512kB 属性值可能很有意义...:)
虚拟机选项
-Dxml.ws.maximum.AttributeSize=123456789
或Java
System.setProperty("xml.ws.maximum.AttributeSize", String.valueOf(123456789));
由于某些奇怪的原因,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
。升级版本是可能的,但即使是更新的版本,他们似乎也有这个限制。
是的,有一种方法可以改变它。错误消息确实应该提到它,但既然它没有……让我们看看。常量在 WstxInputProperties
中定义(对于 Woodstox 特定的,而不是标准的 Stax 的)并且 属性 你需要的是 P_MAX_ATTRIBUTE_SIZE
。
要有效地禁用检查,请使用 Integer.MAX_VALUE
的值。
通过调用 XMLInputFactory.setProperty
方法更改值。
添加这些限制是为了防止各种拒绝服务 (DoS) 攻击:有一些;您可以在 WstxInputProperties
中看到可用的。设置非常保守,看看您是否真的需要处理 512kB 属性值可能很有意义...:)
虚拟机选项
-Dxml.ws.maximum.AttributeSize=123456789
或Java
System.setProperty("xml.ws.maximum.AttributeSize", String.valueOf(123456789));