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 个字符,它就会失败。有趣的是,这只在 tomcat 服务器环境中失败,而不是在码头,即使它们都使用相同的 jre 运行。我有点不知道如何纠正这个问题,正则表达式是由restlet动态构建的-

4

1 回答 1

1

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

java -Xss1024k

直到 Pattern 开心

于 2012-12-10T01:57:10.993 回答