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();
}