You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2024/03/28 14:40:28 UTC

(camel) 14/38: CAMEL-20557: Rest DSL to use openapi spec directly

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

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

commit bcd4534903ced30e334ba235ce9883c2afbc8c52
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Mon Mar 25 10:37:12 2024 +0100

    CAMEL-20557: Rest DSL to use openapi spec directly
---
 .../component/rest/openapi/RestOpenApiComponent.java   |  3 ++-
 .../component/rest/openapi/RestOpenApiEndpoint.java    | 18 +++---------------
 .../component/rest/openapi/RestOpenApiProcessor.java   | 10 ++++++++++
 .../rest/openapi/RestOpenApiRequestValidationTest.java |  3 +--
 4 files changed, 16 insertions(+), 18 deletions(-)

diff --git a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiComponent.java b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiComponent.java
index eef794e5371..b405b1466c5 100644
--- a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiComponent.java
+++ b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiComponent.java
@@ -22,6 +22,7 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.SSLContextParametersAware;
+import org.apache.camel.component.rest.openapi.validator.DefaultRequestValidationCustomizer;
 import org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.RestProducerFactory;
@@ -133,7 +134,7 @@ public final class RestOpenApiComponent extends DefaultComponent implements SSLC
     @Metadata(description = "If request validation is enabled, this option provides the capability to customize"
                             + " the creation of OpenApiInteractionValidator used to validate requests.",
               label = "advanced")
-    private RequestValidationCustomizer requestValidationCustomizer;
+    private RequestValidationCustomizer requestValidationCustomizer = new DefaultRequestValidationCustomizer();
     @Metadata(description = "Enable usage of global SSL context parameters.", label = "security")
     private boolean useGlobalSslContextParameters;
     @Metadata(description = "Customize TLS parameters used by the component. If not set defaults to the TLS parameters set in the Camel context ",
diff --git a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
index 21fde6f5618..034a7e3e56b 100644
--- a/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
+++ b/components/camel-rest-openapi/src/main/java/org/apache/camel/component/rest/openapi/RestOpenApiEndpoint.java
@@ -62,7 +62,6 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.component.rest.openapi.validator.DefaultRequestValidationCustomizer;
 import org.apache.camel.component.rest.openapi.validator.RequestValidationCustomizer;
 import org.apache.camel.component.rest.openapi.validator.RequestValidator;
 import org.apache.camel.component.rest.openapi.validator.RestOpenApiOperation;
@@ -468,9 +467,8 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
         // let the rest endpoint configure itself
         endpoint.configureProperties(params);
 
-        RestOpenApiComponent component = getComponent();
         RequestValidator requestValidator = null;
-        if (component.isRequestValidationEnabled() || requestValidationEnabled) {
+        if (requestValidationEnabled) {
             requestValidator = configureRequestValidator(openapi, operation, method, uriTemplate);
         }
 
@@ -810,16 +808,6 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
     }
 
     RequestValidator configureRequestValidator(OpenAPI openapi, Operation operation, String method, String uriTemplate) {
-        RestOpenApiComponent component = getComponent();
-        RequestValidationCustomizer validationCustomizer = requestValidationCustomizer;
-        if (validationCustomizer == null) {
-            validationCustomizer = component.getRequestValidationCustomizer();
-        }
-
-        if (validationCustomizer == null) {
-            validationCustomizer = new DefaultRequestValidationCustomizer();
-        }
-
         RestOpenApiOperation restOpenApiOperation = new RestOpenApiOperation(operation, method, uriTemplate);
         OpenApiInteractionValidator.Builder builder = OpenApiInteractionValidator.createFor(openapi);
 
@@ -837,9 +825,9 @@ public final class RestOpenApiEndpoint extends DefaultEndpoint {
         });
         builder.withLevelResolver(levelResolverBuilder.build());
 
-        validationCustomizer.customizeOpenApiInteractionValidator(builder);
+        requestValidationCustomizer.customizeOpenApiInteractionValidator(builder);
 
-        return new RequestValidator(builder.build(), restOpenApiOperation, validationCustomizer);
+        return new RequestValidator(builder.build(), restOpenApiOperation, requestValidationCustomizer);
     }
 
     static String determineOption(
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 4cfbccc1839..5e3291d82c9 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
@@ -27,6 +27,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.component.rest.openapi.validator.RequestValidator;
 import org.apache.camel.support.RestConsumerContextPathMatcher;
 import org.apache.camel.support.processor.DelegateAsyncProcessor;
 import org.apache.camel.support.service.ServiceHelper;
@@ -41,6 +42,7 @@ public class RestOpenApiProcessor extends DelegateAsyncProcessor implements Came
     private final String basePath;
     private final List<RestConsumerContextPathMatcher.ConsumerPath<Operation>> paths = new ArrayList<>();
     private RestOpenapiProcessorStrategy restOpenapiProcessorStrategy;
+    private RequestValidator requestValidator;
 
     public RestOpenApiProcessor(OpenAPI openAPI, String basePath, Processor processor) {
         super(processor);
@@ -67,6 +69,14 @@ public class RestOpenApiProcessor extends DelegateAsyncProcessor implements Came
         this.restOpenapiProcessorStrategy = restOpenapiProcessorStrategy;
     }
 
+    public RequestValidator getRequestValidator() {
+        return requestValidator;
+    }
+
+    public void setRequestValidator(RequestValidator requestValidator) {
+        this.requestValidator = requestValidator;
+    }
+
     @Override
     public boolean process(Exchange exchange, AsyncCallback callback) {
         // TODO: RequestValidator
diff --git a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiRequestValidationTest.java b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiRequestValidationTest.java
index 82593e6c461..cf2cf854e58 100644
--- a/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiRequestValidationTest.java
+++ b/components/camel-rest-openapi/src/test/java/org/apache/camel/component/rest/openapi/RestOpenApiRequestValidationTest.java
@@ -68,7 +68,6 @@ import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertInstanceOf;
 import static org.junit.jupiter.api.Assertions.assertNotNull;
-import static org.junit.jupiter.api.Assertions.assertNull;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
 public class RestOpenApiRequestValidationTest extends CamelTestSupport {
@@ -362,7 +361,7 @@ public class RestOpenApiRequestValidationTest extends CamelTestSupport {
         RestOpenApiEndpoint endpoint = context.getEndpoint(petStoreVersion + ":#addPet", RestOpenApiEndpoint.class);
         endpoint.createProducer();
         assertFalse(endpoint.isRequestValidationEnabled());
-        assertNull(endpoint.getRequestValidationCustomizer());
+        assertNotNull(endpoint.getRequestValidationCustomizer());
         assertTrue(endpoint.getRequestValidationLevels().isEmpty());
     }