Dave Riseley created CAMEL-20763:
------------------------------------

             Summary: Rest template with underscore fails after Camel 4.2.0
                 Key: CAMEL-20763
                 URL: https://issues.apache.org/jira/browse/CAMEL-20763
             Project: Camel
          Issue Type: Bug
          Components: camel-core
    Affects Versions: 4.2.0
         Environment: Camel 4.2.0 or later
            Reporter: Dave Riseley


We have a camel route, which in it's simplified form looks like this:
{code:java}
@Component
public class CamelRouteBuilder extends RouteBuilder{

    @Override
    public void configure() throws Exception {

        restConfiguration().component("servlet");

        rest("/hello")
            .get("/{first_name}")
            .to("direct:helloworld");

        from("direct:helloworld")
            .transform()
            .simple("Hi ${header.first_name}");
    }
}
{code}
This works fine on Spring Boot 3.1.11 / Camel 4.0.5 . When we upgrade to Camel 
4.2.0 or later, it fails on startup with the following exception:
 
{code:java}
Caused by: java.util.regex.PatternSyntaxException: named capturing group is 
missing trailing '>' near index 17
\/hello\/(?<first_name>[^\/]+)
                 ^
        at java.base/java.util.regex.Pattern.error(Pattern.java:2028) ~[na:na]
        at java.base/java.util.regex.Pattern.groupname(Pattern.java:2945) 
~[na:na]
        at java.base/java.util.regex.Pattern.group0(Pattern.java:2990) ~[na:na]
        at java.base/java.util.regex.Pattern.sequence(Pattern.java:2124) 
~[na:na]
        at java.base/java.util.regex.Pattern.expr(Pattern.java:2069) ~[na:na]
        at java.base/java.util.regex.Pattern.compile(Pattern.java:1783) ~[na:na]
        at java.base/java.util.regex.Pattern.<init>(Pattern.java:1430) ~[na:na]
        at java.base/java.util.regex.Pattern.compile(Pattern.java:1069) ~[na:na]
        at 
org.apache.camel.support.RestConsumerContextPathMatcher.register(RestConsumerContextPathMatcher.java:255)
 ~[camel-support-4.2.0.jar:4.2.0]
        at 
org.apache.camel.http.common.CamelServlet.connect(CamelServlet.java:424) 
~[camel-http-common-4.2.0.jar:4.2.0]
        at 
org.apache.camel.component.servlet.CamelHttpTransportServlet.connect(CamelHttpTransportServlet.java:100)
 ~[camel-servlet-4.2.0.jar:4.2.0]
....
{code}
I believe this is due to a change introduced by 
https://issues.apache.org/jira/browse/CAMEL-8306 in which the following method:
{code:java}
    /**
     * Pre-compiled consumer path for wildcard match
     *
     * @param consumerPath a consumer path
     */
    public static void register(String consumerPath) {
        // Convert URI template to a regex pattern
        String regex = consumerPath
                .replace("/", "\\/")
                .replace("{", "(?<")
                .replace("}", ">[^\\/]+)");

        // Add support for wildcard * as path suffix
        regex = regex.replace("*", ".*");

        // Match the provided path against the regex pattern
        Pattern pattern = Pattern.compile(regex);
        PATH_PATTERN.put(consumerPath, pattern);
    }
{code}
 
does not allow for underscore (and other regex special characters) in the 
parameter name. I could not find any documentation that describes limits on the 
characters that can be used in rest templates.

Our production code has many, many rest routes with many parameters with 
underscores in them.

I will prepare a PR with a proposed fix



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to