This is an automated email from the ASF dual-hosted git repository.

fmariani pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-spring-boot.git


The following commit(s) were added to refs/heads/main by this push:
     new a01023db66d CAMEL-23191: Fix path parameter extraction with servlet 
context-path in platform-http
a01023db66d is described below

commit a01023db66d9314f86f17df2eb7b792702fe280b
Author: Croway <[email protected]>
AuthorDate: Fri Mar 13 12:39:31 2026 +0100

    CAMEL-23191: Fix path parameter extraction with servlet context-path in 
platform-http
---
 .../springboot/SpringBootPlatformHttpBinding.java  |   2 +-
 .../SpringBootPlatformHttpContextPathTest.java     | 103 +++++++++++++++++++++
 2 files changed, 104 insertions(+), 1 deletion(-)

diff --git 
a/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpBinding.java
 
b/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpBinding.java
index d74d4ab0c2e..7e92af3f625 100644
--- 
a/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpBinding.java
+++ 
b/components-starter/camel-platform-http-starter/src/main/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpBinding.java
@@ -72,7 +72,7 @@ public class SpringBootPlatformHttpBinding extends 
DefaultHttpBinding {
 
     protected void populateRequestParameters(HttpServletRequest request, 
Message message) {
         super.populateRequestParameters(request, message);
-        String path = request.getRequestURI();
+        String path = getRawPath(request);
         // skip leading slash
         if (path != null && path.startsWith("/")) {
             path = path.substring(1);
diff --git 
a/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpContextPathTest.java
 
b/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpContextPathTest.java
new file mode 100644
index 00000000000..9d3b87c163e
--- /dev/null
+++ 
b/components-starter/camel-platform-http-starter/src/test/java/org/apache/camel/component/platform/http/springboot/SpringBootPlatformHttpContextPathTest.java
@@ -0,0 +1,103 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.platform.http.springboot;
+
+import io.restassured.RestAssured;
+import org.apache.camel.CamelContext;
+import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.spring.boot.CamelAutoConfiguration;
+import org.apache.camel.test.spring.junit6.CamelSpringBootTest;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.boot.test.web.server.LocalServerPort;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import 
org.springframework.security.config.annotation.web.builders.HttpSecurity;
+import org.springframework.security.web.SecurityFilterChain;
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.Matchers.equalTo;
+
+@EnableAutoConfiguration
+@CamelSpringBootTest
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
+        classes = { CamelAutoConfiguration.class,
+                SpringBootPlatformHttpContextPathTest.class,
+                SpringBootPlatformHttpContextPathTest.TestConfiguration.class,
+                PlatformHttpComponentAutoConfiguration.class,
+                SpringBootPlatformHttpAutoConfiguration.class },
+        properties = { "server.servlet.context-path=/test", 
"camel.rest.context-path=/api" })
+public class SpringBootPlatformHttpContextPathTest {
+
+    @LocalServerPort
+    private Integer port;
+
+    @BeforeEach
+    void setUp() {
+        RestAssured.port = port;
+    }
+
+    @Configuration
+    public static class TestConfiguration {
+
+        @Bean
+        public SecurityFilterChain securityFilterChain(HttpSecurity http) 
throws Exception {
+            http.authorizeHttpRequests(auth -> auth.anyRequest().permitAll())
+                .csrf(csrf -> csrf.disable());
+            return http.build();
+        }
+
+        @Bean
+        public RouteBuilder contextPathRouteBuilder() {
+            return new RouteBuilder() {
+                @Override
+                public void configure() {
+                    rest("/message")
+                            .get("/{param}").to("direct:messageByParam");
+
+                    from("direct:messageByParam")
+                            .setBody().simple("${header.param}");
+
+                    from("platform-http:/greeting/{name}")
+                            .transform().simple("Hello ${header.name}");
+                }
+            };
+        }
+    }
+
+    @Test
+    public void testRestDslPathParamWithContextPath() {
+        given()
+                .when()
+                .get("/test/api/message/1234")
+                .then()
+                .statusCode(200)
+                .body(equalTo("1234"));
+    }
+
+    @Test
+    public void testPlatformHttpPathParamWithContextPath() {
+        given()
+                .when()
+                .get("/test/greeting/Camel")
+                .then()
+                .statusCode(200)
+                .body(equalTo("Hello Camel"));
+    }
+}

Reply via email to