2017-06-22 9 views
0

woodstox-core-aslは奇妙な理由から属性値の最大サイズが512KBに制限されているようです。だから、XML解析は、エラー(下記524288は、512キロバイトの上限である)で失敗します。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) 

この最大属性サイズを設定したり、それを完全に無効にする方法はありますか? (しかし、属性値がそれほど大きなものでなければならない理由は何ですか?私はそれについて何ができるのかを見なければなりません)。

私はソースコードを見ようとしましたが、それは仕事中のギブスを閲覧することはできません。 docsにはポインタもありません。

私が使用しているライブラリのバージョンは4.2.0です。バージョンをアップグレードすることは可能ですが、新しいバージョンでもこの制約があるようです。

答えて

1

はい、それを変更する方法があります。エラーメッセージは本当にそれを言及すべきですが、それはないので...見てみましょう。定数はWstxInputProperties(Woodstox特有のもので標準Staxのものではない)で定義されており、必要なプロパティはP_MAX_ATTRIBUTE_SIZEです。 有効にチェックを無効にするには、値Integer.MAX_VALUEを使用します。 XMLInputFactory.setPropertyメソッドを呼び出すと値が変更されます。

これらの制限は、さまざまなDoS(サービス拒絶)攻撃から保護するために追加されたものです。あなたはWstxInputPropertiesで利用可能なものを見ることができます。設定はかなり控えめで、実際に512kBの属性値を処理する必要があるかどうかを確認するのには意味があります。:)

+0

私はこれらのクラスを見ていました。私はそれを試してみましょう! – mystarrocks

+0

Staxの仕様にはさまざまな設定方法がないので、 'setProperty()'はconfig-wiseを実行する唯一の方法です。 :) – StaxMan

関連する問題