Я работаю со сторонним приложением, которое использует библиотеку restlet.org для сопоставления URL-адресов без остановки и компонентов Spring. Оно генерирует следующий шаблон для сопоставления очень простого 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-
1 ответ
Возможно, у вас возникла проблема с размером стека по умолчанию для потоков. Это известная проблема с java.util.regex.Pattern, она касается слишком глубоких рекурсий, никогда не пробовала, честно говоря, чтобы глубже изучить, что происходит внутри этой штуки, просто попробуйте увеличить размер стека JVM, например
java -Xss1024k
Пока узор не будет счастлив
Похожие вопросы
Новые вопросы
java
Java — это высокоуровневый объектно-ориентированный язык программирования. Используйте этот тег, если у вас возникли проблемы с использованием или пониманием самого языка. Этот тег часто используется вместе с другими тегами для библиотек и/или фреймворков, используемых разработчиками Java.