在restlet引擎中具有长字符串的Pattern.match的StackoverflowError

时间:2012-12-10 00:13:20

标签: java regex tomcat jetty restlet

我正在使用第三方应用程序,该应用程序使用restlet.org的库将restful url映射到spring bean。它生成以下模式以匹配一个非常简单的URL:

url pattern - / api / 0 / full / {action} / {paramsJSON}

生成的正则表达式

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

一旦模式超过220个字符,它就会失败。有趣的是,这只能在tomcat服务器环境中失败,而不是jetty,即使它们都运行相同的jre。我有点不知道如何纠正这个问题,正则表达式是由restlet动态构建的 -

1 个答案:

答案 0 :(得分:1)

您可能遇到线程默认堆栈大小的问题。这是java.util.regex.Pattern的一个已知问题,它是关于太深的递归,从来没有尝试过,说实话,深入了解这个内容的内容,只是尝试增加JVM堆栈大小,如

java -Xss1024k

直到Pattern很开心