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 2021/12/10 11:06:56 UTC

[camel] branch main updated: CAMEL-17312: camel-openapi-java - Add support for array parameter types. Thanks to Rob Arnhart for the patch.

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


The following commit(s) were added to refs/heads/main by this push:
     new fbe6d77  CAMEL-17312: camel-openapi-java - Add support for array parameter types. Thanks to Rob Arnhart for the patch.
fbe6d77 is described below

commit fbe6d773ebce41d001e7bb0cf9029edaa80b36c0
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Fri Dec 10 12:06:21 2021 +0100

    CAMEL-17312: camel-openapi-java - Add support for array parameter types. Thanks to Rob Arnhart for the patch.
---
 .../apache/camel/openapi/RestOpenApiReader.java    | 62 ++++++++++++++++++++++
 .../camel/openapi/RestOpenApiReaderTest.java       |  9 ++--
 2 files changed, 68 insertions(+), 3 deletions(-)

diff --git a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
index e2b40dc..4fca668 100644
--- a/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
+++ b/components/camel-openapi-java/src/main/java/org/apache/camel/openapi/RestOpenApiReader.java
@@ -23,6 +23,7 @@ import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
+import java.util.Date;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -30,6 +31,7 @@ import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Set;
 import java.util.function.Function;
 import java.util.stream.Collectors;
@@ -73,6 +75,11 @@ import io.apicurio.datamodels.openapi.v3.models.Oas30Schema;
 import io.apicurio.datamodels.openapi.v3.models.Oas30SchemaDefinition;
 import io.apicurio.datamodels.openapi.v3.models.Oas30SecurityScheme;
 import io.apicurio.datamodels.openapi.v3.visitors.Oas30AllNodeVisitor;
+import io.swagger.v3.oas.models.media.BinarySchema;
+import io.swagger.v3.oas.models.media.ByteArraySchema;
+import io.swagger.v3.oas.models.media.DateSchema;
+import io.swagger.v3.oas.models.media.DateTimeSchema;
+import io.swagger.v3.oas.models.media.PasswordSchema;
 import org.apache.camel.CamelContext;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestOperationParamDefinition;
@@ -650,6 +657,21 @@ public class RestOpenApiReader {
                                 if (arrayType.equalsIgnoreCase("boolean")) {
                                     defineSchemas(parameter30, allowableValues, Boolean.class);
                                 }
+                                if (arrayType.equalsIgnoreCase("byte")) {
+                                    defineSchemas(parameter30, allowableValues, ByteArraySchema.class);
+                                }
+                                if (arrayType.equalsIgnoreCase("binary")) {
+                                    defineSchemas(parameter30, allowableValues, BinarySchema.class);
+                                }
+                                if (arrayType.equalsIgnoreCase("date")) {
+                                    defineSchemas(parameter30, allowableValues, DateSchema.class);
+                                }
+                                if (arrayType.equalsIgnoreCase("date-time")) {
+                                    defineSchemas(parameter30, allowableValues, DateTimeSchema.class);
+                                }
+                                if (arrayType.equalsIgnoreCase("password")) {
+                                    defineSchemas(parameter30, allowableValues, PasswordSchema.class);
+                                }
                             }
                         }
                     }
@@ -1005,6 +1027,10 @@ public class RestOpenApiReader {
             } else {
                 convertAndSetItemsEnum(items, allowableValues, type);
             }
+        } else if (Objects.equals(serializableParameter.type, "array")) {
+            Oas20Items oas20Items = serializableParameter.createItems();
+            oas20Items.type = type.getSimpleName().toLowerCase();
+            serializableParameter.items = oas20Items;
         }
     }
 
@@ -1018,6 +1044,42 @@ public class RestOpenApiReader {
             } else {
                 convertAndSetItemsEnum(serializableParameter.schema, allowableValues, type);
             }
+        } else if (Objects.equals(((Oas30Schema) serializableParameter.schema).type, "array")) {
+            Oas30Schema parameterSchema = (Oas30Schema) serializableParameter.schema;
+            OasSchema itemsSchema = parameterSchema.createItemsSchema();
+
+            if (Integer.class.equals(type)) {
+                itemsSchema.type = "number";
+                itemsSchema.format = "int32";
+            } else if (Long.class.equals(type)) {
+                itemsSchema.type = "number";
+                itemsSchema.format = "int64";
+            } else if (Float.class.equals(type)) {
+                itemsSchema.type = "number";
+                itemsSchema.format = "float";
+            } else if (Double.class.equals(type)) {
+                itemsSchema.type = "number";
+                itemsSchema.format = "double";
+            } else if (ByteArraySchema.class.equals(type)) {
+                itemsSchema.type = "string";
+                itemsSchema.format = "byte";
+            } else if (BinarySchema.class.equals(type)) {
+                itemsSchema.type = "string";
+                itemsSchema.format = "binary";
+            } else if (Date.class.equals(type)) {
+                itemsSchema.type = "string";
+                itemsSchema.format = "date";
+            } else if (DateTimeSchema.class.equals(type)) {
+                itemsSchema.type = "string";
+                itemsSchema.format = "date-time";
+            } else if (PasswordSchema.class.equals(type)) {
+                itemsSchema.type = "string";
+                itemsSchema.format = "password";
+            } else {
+                itemsSchema.type = "string";
+            }
+
+            parameterSchema.items = itemsSchema;
         }
     }
 
diff --git a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderTest.java b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderTest.java
index 1050da7..d29dc42 100644
--- a/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderTest.java
+++ b/components/camel-openapi-java/src/test/java/org/apache/camel/openapi/RestOpenApiReaderTest.java
@@ -49,7 +49,9 @@ public class RestOpenApiReaderTest extends CamelTestSupport {
             public void configure() throws Exception {
                 rest("/hello").consumes("application/json").produces("application/json").get("/hi/{name}")
                         .description("Saying hi").param().name("name").type(RestParamType.path)
-                        .dataType("string").description("Who is it").example("Donald Duck").endParam().to("log:hi")
+                        .dataType("string").description("Who is it").example("Donald Duck").endParam()
+                        .param().name("filter").description("Filters to apply to the entity.").type(RestParamType.query)
+                        .dataType("array").arrayType("date-time").endParam().to("log:hi")
                         .get("/bye/{name}").description("Saying bye").param().name("name")
                         .type(RestParamType.path).dataType("string").description("Who is it").example("Donald Duck").endParam()
                         .responseMessage().code(200).message("A reply number")
@@ -98,7 +100,7 @@ public class RestOpenApiReaderTest extends CamelTestSupport {
         assertTrue(json.contains("\"x-example\" : \"Donald Duck\""));
         assertTrue(json.contains("\"success\" : \"123\""));
         assertTrue(json.contains("\"error\" : \"-1\""));
-        assertTrue(json.contains("\"type\" : \"string\""));
+        assertTrue(json.contains("\"type\" : \"array\""));
 
         context.stop();
     }
@@ -136,7 +138,8 @@ public class RestOpenApiReaderTest extends CamelTestSupport {
         assertTrue(json.contains("\"x-example\" : \"Donald Duck\""));
         assertTrue(json.contains("\"success\" : \"123\""));
         assertTrue(json.contains("\"error\" : \"-1\""));
-        assertTrue(json.contains("\"type\" : \"string\""));
+        assertTrue(json.contains("\"type\" : \"array\""));
+        assertTrue(json.contains("\"format\" : \"date-time\""));
 
         context.stop();
     }