0

私は、restlet.org のライブラリを使用して RESTful URL を Spring Bean にマッピングするサードパーティ アプリケーションを使用しています。非常に単純な URL に一致する次のパターンを生成します。

URL パターン - /api/0/full/{action}/{paramsJSON}

生成された正規表現パターン

/api/0/preauthfull/((?:[a-zA-Z\d\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@]|(?:\%[\dABCDEFabcdef][\dABCDEFabcdef]))+)/((?:[a-zA-Z\d\-\.\_\~\!\$\&\'\(\)\*\+\,\;\=\:\@]|(?:\%[\dABCDEFabcdef][\dABCDEFabcdef]))+)

パターンが約 220 文字を超えるとすぐに失敗します。興味深いことに、これは両方が同じ jre で実行されているにもかかわらず、jetty ではなく tomcat サーバー環境でのみ失敗します。これを修正する方法が少しわかりません。正規表現はrestletによって動的に構築されます-

4

1 に答える 1

1

スレッドのデフォルトのスタック サイズで問題が発生している可能性があります。これは java.util.regex.Pattern の既知の問題です。深すぎる再帰に関するものであり、正直に言うと、この内部で何が起こっているかを深く調べようとはしませんでした。次のように JVM スタック サイズを増やしてみてください。

java -Xss1024k

パターンが幸せになるまで

于 2012-12-10T01:57:10.993 に答える