【问题标题】:Configure max attribute size with woodstox使用woodstox 配置最大属性大小
【发布时间】:2026-01-02 11:00:01
【问题描述】:

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。升级版本是可能的,但即使使用较新的版本,它们似乎也有这个限制。

【问题讨论】:

    标签: java xml-parsing woodstox


    【解决方案1】:

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

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

    【讨论】:

    • 我正在查看这些类——我只是不确定如何使用该属性。我会试试看的!
    • 好的。 Stax 规范没有很多配置方法,所以setProperty() 几乎是做任何事情的唯一方法,配置方面。 :)
    【解决方案2】:

    虚拟机选项

    -Dxml.ws.maximum.AttributeSize=123456789
    

    或Java

    System.setProperty("xml.ws.maximum.AttributeSize", String.valueOf(123456789)); 
    

    【讨论】: