2017-06-22 29 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