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

davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git

commit ce4a3f44c5552e7955c7814a876d8156c887f6f1
Author: Claus Ibsen <claus.ib...@gmail.com>
AuthorDate: Thu May 8 09:55:56 2025 +0200

    CAMEL-21965: camel-rest-openapi: Fix when configured explicit base-path 
then this path are used in the http endpoint registry. Added docs to rest-dsl 
how to configure this.
---
 .../openapi/DefaultRestOpenapiProcessorStrategy.java   |  5 +++--
 .../component/rest/openapi/RestOpenApiProcessor.java   |  2 +-
 .../rest/openapi/RestOpenapiProcessorStrategy.java     |  4 +++-
 .../rest/openapi/RestOpenapiProcessorStrategyTest.java |  2 +-
 .../modules/ROOT/pages/rest-dsl-openapi.adoc           | 18 ++++++++++++++++++
 5 files changed, 26 insertions(+), 5 deletions(-)

diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
index c931dc20102..00de0c570b1 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/DefaultRestOpenapiProcessorStrategy.java
@@ -75,7 +75,8 @@ public class DefaultRestOpenapiProcessorStrategy extends 
ServiceSupport
     private final List<String> uris = new ArrayList<>();
 
     @Override
-    public void validateOpenApi(OpenAPI openAPI, PlatformHttpConsumerAware 
platformHttpConsumer) throws Exception {
+    public void validateOpenApi(OpenAPI openAPI, String basePath, 
PlatformHttpConsumerAware platformHttpConsumer)
+            throws Exception {
         List<String> ids = new ArrayList<>();
         for (var e : openAPI.getPaths().entrySet()) {
             for (var o : e.getValue().readOperationsMap().entrySet()) {
@@ -115,7 +116,7 @@ public class DefaultRestOpenapiProcessorStrategy extends 
ServiceSupport
         // enlist open-api rest services
         PlatformHttpComponent phc = camelContext.getComponent("platform-http", 
PlatformHttpComponent.class);
         if (phc != null) {
-            String path = RestOpenApiHelper.getBasePathFromOpenApi(openAPI);
+            String path = basePath != null ? basePath : 
RestOpenApiHelper.getBasePathFromOpenApi(openAPI);
             if (path == null || path.isEmpty() || path.equals("/")) {
                 path = "";
             }
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java
index d52dfdd1fc4..aa67c225306 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiProcessor.java
@@ -189,7 +189,7 @@ public class RestOpenApiProcessor extends 
DelegateAsyncProcessor implements Came
         ServiceHelper.initService(restOpenapiProcessorStrategy);
 
         // validate openapi contract
-        restOpenapiProcessorStrategy.validateOpenApi(openAPI, 
platformHttpConsumer);
+        restOpenapiProcessorStrategy.validateOpenApi(openAPI, basePath, 
platformHttpConsumer);
     }
 
     private RestBindingConfiguration createRestBindingConfiguration(Operation 
o) throws Exception {
diff --git 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategy.java
 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategy.java
index 7c639071633..96443f0cc2d 100644
--- 
a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategy.java
+++ 
b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategy.java
@@ -56,10 +56,12 @@ public interface RestOpenapiProcessorStrategy {
      * Validates the OpenAPI specification on startup
      *
      * @param  openAPI              the openapi specification
+     * @param  basePath             optional base path
      * @param  platformHttpConsumer the platform http consumer
      * @throws Exception            is thrown if validation error on startup
      */
-    default void validateOpenApi(OpenAPI openAPI, PlatformHttpConsumerAware 
platformHttpConsumer) throws Exception {
+    default void validateOpenApi(OpenAPI openAPI, String basePath, 
PlatformHttpConsumerAware platformHttpConsumer)
+            throws Exception {
         // noop
     }
 
diff --git 
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategyTest.java
 
b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategyTest.java
index 7c906b41106..567c4835262 100644
--- 
a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategyTest.java
+++ 
b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenapiProcessorStrategyTest.java
@@ -44,7 +44,7 @@ class RestOpenapiProcessorStrategyTest extends 
ManagedCamelTestSupport {
         ((DefaultRestOpenapiProcessorStrategy) 
restOpenapiProcessorStrategy).setCamelContext(camelContext);
         restOpenapiProcessorStrategy.setMissingOperation("fail");
         Exception ex = assertThrows(IllegalArgumentException.class,
-                () -> 
restOpenapiProcessorStrategy.validateOpenApi(getOpenApi(), 
mock(PlatformHttpConsumerAware.class)));
+                () -> 
restOpenapiProcessorStrategy.validateOpenApi(getOpenApi(), null, 
mock(PlatformHttpConsumerAware.class)));
         assertTrue(ex.getMessage().contains("direct:GENOPID_GET.users"));
         assertTrue(ex.getMessage().contains("direct:GENOPID_GET.user._id_"));
 
diff --git a/docs/user-manual/modules/ROOT/pages/rest-dsl-openapi.adoc 
b/docs/user-manual/modules/ROOT/pages/rest-dsl-openapi.adoc
index d5300db69d1..43baf0d18d6 100644
--- a/docs/user-manual/modules/ROOT/pages/rest-dsl-openapi.adoc
+++ b/docs/user-manual/modules/ROOT/pages/rest-dsl-openapi.adoc
@@ -127,6 +127,24 @@ YAML::
 ----
 ====
 
+=== Configuring Base Path
+
+By default, Camel uses the base path that are specified in the OpenAPI 
contract such as:
+
+[source,json]
+----
+    "basePath": {
+            "default": "/api/v3"
+    }
+----
+
+You can configure Camel to use a different base path by setting in 
`application.properties`:
+
+[source,properties]
+----
+camel.component.rest-openapi.base-path = /myapi
+----
+
 === Ignoring missing API operations
 
 When using OpenAPI with _contract-first_, then Camel will on startup check if 
there is a corresponding `direct:operationId` route

Reply via email to