diff --git a/CHANGELOG.md b/CHANGELOG.md index 5c832612..4acd9a70 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ### `jsonschema-generator` #### Fixed - avoid exception when trying to collect supported enum values from raw `Enum` type (i.e., missing type parameter) +- avoid exception when trying to find type with annotation when given type is `null` + +### `jsonschema-module-jackson` +#### Fixed +- avoid exception in subtype resolution, when targeting void method ## [4.36.0] - 2024-07-20 ### `jsonschema-generator` diff --git a/jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/TypeContext.java b/jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/TypeContext.java index d07c2488..e0cdc899 100644 --- a/jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/TypeContext.java +++ b/jsonschema-generator/src/main/java/com/github/victools/jsonschema/generator/TypeContext.java @@ -392,7 +392,7 @@ public ResolvedType getTypeWithAnnotation(ResolvedType targetType, Class check) { ResolvedType targetSuperType = targetType; - do { + while (targetSuperType != null) { if (check.test(targetSuperType)) { return targetSuperType; } @@ -403,7 +403,7 @@ public ResolvedType getTypeConsideringHierarchyMatching(ResolvedType targetType, return interfaceWithAnnotation.get(); } targetSuperType = targetSuperType.getParentClass(); - } while (targetSuperType != null); + } return null; } diff --git a/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/CustomEnumDefinitionProvider.java b/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/CustomEnumDefinitionProvider.java index c79925ac..2ddbc0f7 100644 --- a/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/CustomEnumDefinitionProvider.java +++ b/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/CustomEnumDefinitionProvider.java @@ -59,6 +59,10 @@ public CustomEnumDefinitionProvider(boolean checkForJsonValueAnnotatedMethod, bo @Override public CustomDefinition provideCustomSchemaDefinition(ResolvedType javaType, SchemaGenerationContext context) { + if (javaType == null) { + // since 4.37.0: not for void methods + return null; + } Object[] enumConstants = javaType.getErasedType().getEnumConstants(); if (enumConstants == null || enumConstants.length == 0) { return null; diff --git a/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonIdentityReferenceDefinitionProvider.java b/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonIdentityReferenceDefinitionProvider.java index b380cf6c..2c50fe31 100644 --- a/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonIdentityReferenceDefinitionProvider.java +++ b/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonIdentityReferenceDefinitionProvider.java @@ -39,6 +39,10 @@ public class JsonIdentityReferenceDefinitionProvider implements CustomDefinition @Override public CustomDefinition provideCustomSchemaDefinition(ResolvedType javaType, SchemaGenerationContext context) { + if (javaType == null) { + // since 4.37.0: not for void methods + return null; + } return this.getIdentityReferenceType(javaType, context.getTypeContext()) .map(context::createDefinitionReference) .map(CustomDefinition::new) diff --git a/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonSubTypesResolver.java b/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonSubTypesResolver.java index e2e04535..aba2eae0 100644 --- a/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonSubTypesResolver.java +++ b/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonSubTypesResolver.java @@ -166,6 +166,10 @@ private ResolvedType resolveSubtype(ResolvedType declaredType, JsonSubTypes.Type */ @Override public CustomDefinition provideCustomSchemaDefinition(ResolvedType javaType, SchemaGenerationContext context) { + if (javaType == null) { + // since 4.37.0: not for void methods + return null; + } ResolvedType typeWithTypeInfo = context.getTypeContext().getTypeWithAnnotation(javaType, JsonTypeInfo.class); if (typeWithTypeInfo == null || javaType.getErasedType().getAnnotation(JsonSubTypes.class) != null || this.skipSubtypeResolution(javaType, context.getTypeContext())) { diff --git a/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonUnwrappedDefinitionProvider.java b/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonUnwrappedDefinitionProvider.java index 79a6e86c..a825e811 100644 --- a/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonUnwrappedDefinitionProvider.java +++ b/jsonschema-module-jackson/src/main/java/com/github/victools/jsonschema/module/jackson/JsonUnwrappedDefinitionProvider.java @@ -43,6 +43,10 @@ public class JsonUnwrappedDefinitionProvider implements CustomDefinitionProvider @Override public CustomDefinition provideCustomSchemaDefinition(ResolvedType javaType, SchemaGenerationContext context) { + if (javaType == null) { + // since 4.37.0: not for void methods + return null; + } ResolvedTypeWithMembers typeWithMembers = context.getTypeContext().resolveWithMembers(javaType); if (Arrays.stream(typeWithMembers.getMemberFields()).noneMatch(this::hasJsonUnwrappedAnnotation)