diff --git a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java index 14274d55708a..42d6d2480596 100644 --- a/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java +++ b/modules/openapi-generator/src/main/java/org/openapitools/codegen/languages/AbstractJavaCodegen.java @@ -1093,6 +1093,11 @@ public String toModelFilename(String name) { @Override public String getTypeDeclaration(Schema p) { + // Intercept "null" explicitly to prevent complex object resolution + if (p != null && "null".equalsIgnoreCase(p.getType())) { + return "Object"; + } + Schema schema = unaliasSchema(p); Schema target = ModelUtils.isGenerateAliasAsModel() ? p : schema; if (ModelUtils.isArraySchema(target)) { @@ -1866,16 +1871,32 @@ public String toExampleValue(Schema p) { @Override public String getSchemaType(Schema p) { - String openAPIType = super.getSchemaType(p); + if (p == null) { + return super.getSchemaType(p); + } - // don't apply renaming on types from the typeMapping - if (typeMapping.containsKey(openAPIType)) { - return typeMapping.get(openAPIType); + // Intercept explicit OpenAPI 3.1 type: "null" immediately + if ("null".equalsIgnoreCase(p.getType())) { + return "Object"; } + String openAPIType = super.getSchemaType(p); + if (null == openAPIType) { LOGGER.error("No Type defined for Schema {}", p); + return null; + } + + // Intercept if openAPIType resolved to "null" + if ("null".equalsIgnoreCase(openAPIType)) { + return "Object"; + } + + // Don't apply renaming on types from the typeMapping + if (typeMapping.containsKey(openAPIType)) { + return typeMapping.get(openAPIType); } + return toModelName(openAPIType); } diff --git a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java index dc5e1378ee6e..ef58276873bd 100644 --- a/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java +++ b/modules/openapi-generator/src/test/java/org/openapitools/codegen/java/JavaClientCodegenTest.java @@ -4556,6 +4556,15 @@ public void testSwagger2TagImportRestAssured() throws IOException { assertThat(content) .contains("import io.swagger.v3.oas.annotations.tags.*;") .contains("@Tag("); + + } + + @Test + public void testNullTypeMapsToObject() { + final JavaClientCodegen codegen = new JavaClientCodegen(); + Schema nullSchema = new Schema().type("null"); + Assert.assertEquals(codegen.getSchemaType(nullSchema), "Object"); + Assert.assertEquals(codegen.getTypeDeclaration(nullSchema), "Object"); } }