diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java index daed144eb13d..f0797266d0f2 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/OpenAPINormalizer.java @@ -743,7 +743,17 @@ private boolean isNullTypeSchema(Schema schema) { return true; } - if ((schema.getType() == null || schema.getType().equals("null")) && schema.get$ref() == null) { + if (schema.getTypes() != null && !schema.getTypes().isEmpty()) { + // 3.1 spec + if (schema.getTypes().size() ==1) { // 1 type only + String type = (String) schema.getTypes().iterator().next(); + return type == null || "null".equals(type); + } else { // more than 1 type so must not be just null + return false; + } + } + + if ((schema.getType() == null || schema.getType().equals("null"))) { return true; } diff --git a/modules/openapi-generator/src/test/resources/3_1/java/petstore.yaml b/modules/openapi-generator/src/test/resources/3_1/java/petstore.yaml index 491785afdb81..c64385a963bc 100644 --- a/modules/openapi-generator/src/test/resources/3_1/java/petstore.yaml +++ b/modules/openapi-generator/src/test/resources/3_1/java/petstore.yaml @@ -889,3 +889,11 @@ components: properties: {} type: object title: HTTPValidationError + AnyOfArray: + anyOf: + - type: array + items: + type: string + - type: array + items: + type: integer diff --git a/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES b/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES index 0a065d67dc83..5ba46e594fb5 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES +++ b/samples/client/petstore/java/okhttp-gson-3.1/.openapi-generator/FILES @@ -6,6 +6,7 @@ api/openapi.yaml build.gradle build.sbt docs/Animal.md +docs/AnyOfArray.md docs/AnyTypeTest.md docs/Cat.md docs/Category.md @@ -57,6 +58,7 @@ src/main/java/org/openapitools/client/auth/OAuthOkHttpClient.java src/main/java/org/openapitools/client/auth/RetryingOAuth.java src/main/java/org/openapitools/client/model/AbstractOpenApiSchema.java src/main/java/org/openapitools/client/model/Animal.java +src/main/java/org/openapitools/client/model/AnyOfArray.java src/main/java/org/openapitools/client/model/AnyTypeTest.java src/main/java/org/openapitools/client/model/Cat.java src/main/java/org/openapitools/client/model/Category.java diff --git a/samples/client/petstore/java/okhttp-gson-3.1/README.md b/samples/client/petstore/java/okhttp-gson-3.1/README.md index 8e78bf3d184d..cb3486b20fb6 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/README.md +++ b/samples/client/petstore/java/okhttp-gson-3.1/README.md @@ -143,6 +143,7 @@ Class | Method | HTTP request | Description ## Documentation for Models - [Animal](docs/Animal.md) + - [AnyOfArray](docs/AnyOfArray.md) - [AnyTypeTest](docs/AnyTypeTest.md) - [Cat](docs/Cat.md) - [Category](docs/Category.md) diff --git a/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml b/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml index c6c895706207..5816eb63139e 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml +++ b/samples/client/petstore/java/okhttp-gson-3.1/api/openapi.yaml @@ -956,6 +956,12 @@ components: properties: {} title: HTTPValidationError type: object + AnyOfArray: + anyOf: + - items: + type: string + - items: + type: integer updatePetWithForm_request: properties: name: diff --git a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java b/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java index 407a96d3f1db..72223340f53d 100644 --- a/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java +++ b/samples/client/petstore/java/okhttp-gson-3.1/src/main/java/org/openapitools/client/JSON.java @@ -129,6 +129,7 @@ private static Class getClassByDiscriminator(Map classByDiscriminatorValue, Stri gsonBuilder.registerTypeAdapter(OffsetDateTime.class, offsetDateTimeTypeAdapter); gsonBuilder.registerTypeAdapter(LocalDate.class, localDateTypeAdapter); gsonBuilder.registerTypeAdapter(byte[].class, byteArrayAdapter); + gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AnyOfArray.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.AnyTypeTest.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Cat.CustomTypeAdapterFactory()); gsonBuilder.registerTypeAdapterFactory(new org.openapitools.client.model.Category.CustomTypeAdapterFactory());