Skip to content

Spring Data Rest: Exception while generating api doc with inheritance - NullPointerException: Cannot invoke "String.substring(int)" #1095

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
mathias-ewald opened this issue Mar 8, 2021 · 3 comments
Labels
bug Something isn't working

Comments

@mathias-ewald
Copy link

mathias-ewald commented Mar 8, 2021

Describe the bug
When I add inheritance to my data model, a call to /v3/api-docs.yaml throw the following exception:

java.lang.NullPointerException: Cannot invoke "String.substring(int)" because the return value of "io.swagger.v3.oas.models.media.Schema.get$ref()" is null] with root cause

java.lang.NullPointerException: Cannot invoke "String.substring(int)" because the return value of "io.swagger.v3.oas.models.media.Schema.get$ref()" is null
	at org.springdoc.data.rest.utils.SpringDocDataRestUtils.updateResponseSchema(SpringDocDataRestUtils.java:217) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.data.rest.utils.SpringDocDataRestUtils.lambda$enhanceResponseContent$0(SpringDocDataRestUtils.java:83) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at java.base/java.util.LinkedHashMap.forEach(LinkedHashMap.java:723) ~[na:na]
	at org.springdoc.data.rest.utils.SpringDocDataRestUtils.lambda$enhanceResponseContent$1(SpringDocDataRestUtils.java:83) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at java.base/java.util.LinkedHashMap$LinkedValues.forEach(LinkedHashMap.java:647) ~[na:na]
	at org.springdoc.data.rest.utils.SpringDocDataRestUtils.enhanceResponseContent(SpringDocDataRestUtils.java:72) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.data.rest.core.DataRestResponseService.buildEntityResponse(DataRestResponseService.java:151) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.data.rest.core.DataRestOperationService.buildEntityOperation(DataRestOperationService.java:159) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.data.rest.core.DataRestOperationService.buildOperation(DataRestOperationService.java:129) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.data.rest.core.DataRestRouterOperationService.buildRouterOperation(DataRestRouterOperationService.java:239) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.data.rest.core.DataRestRouterOperationService.buildRouterOperationList(DataRestRouterOperationService.java:186) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.data.rest.core.DataRestRouterOperationService.buildEntityRouterOperationList(DataRestRouterOperationService.java:120) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.data.rest.SpringRepositoryRestResourceProvider.findControllers(SpringRepositoryRestResourceProvider.java:365) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.data.rest.SpringRepositoryRestResourceProvider.lambda$getRouterOperations$6(SpringRepositoryRestResourceProvider.java:215) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springframework.data.mapping.model.BasicPersistentEntity.doWithAssociations(BasicPersistentEntity.java:400) ~[spring-data-commons-2.4.5.jar:2.4.5]
	at org.springdoc.data.rest.SpringRepositoryRestResourceProvider.getRouterOperations(SpringRepositoryRestResourceProvider.java:207) ~[springdoc-openapi-data-rest-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:221) ~[springdoc-openapi-webmvc-core-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:287) ~[springdoc-openapi-common-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.webmvc.api.OpenApiResource.openapiYaml(OpenApiResource.java:192) ~[springdoc-openapi-webmvc-core-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiYaml(OpenApiWebMvcResource.java:132) ~[springdoc-openapi-webmvc-core-1.5.6-SNAPSHOT.jar:1.5.6-SNAPSHOT]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64) ~[na:na]
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:564) ~[na:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:141) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:106) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:894) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:808) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1060) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:962) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:626) ~[tomcat-embed-core-9.0.43.jar:4.0.FR]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) ~[spring-webmvc-5.3.4.jar:5.3.4]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) ~[tomcat-embed-core-9.0.43.jar:4.0.FR]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) ~[tomcat-embed-websocket-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-5.3.4.jar:5.3.4]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:119) ~[spring-web-5.3.4.jar:5.3.4]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:346) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:887) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1684) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1130) ~[na:na]
	at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:630) ~[na:na]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.43.jar:9.0.43]
	at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]

To Reproduce
Springboot: 2.4.3
Springdoc: 1.5.6-SNAPSHOT

@Entity
@EqualsAndHashCode(callSuper=false)
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
@Data
@NoArgsConstructor
@RequiredArgsConstructor
@JsonTypeInfo(
  use = JsonTypeInfo.Id.NAME, 
  include = JsonTypeInfo.As.PROPERTY, 
  property = "_type")
@JsonSubTypes({ 
  @Type(value = Dog.class, name = "dog"),
  @Type(value = Cat.class, name = "cat")
})
public class Pet extends BaseEntity {

	@NonNull
	@NotNull
	private String name;
	
	@NonNull
	@ManyToOne
	private Owner owner;
}
@Entity
@Data
@EqualsAndHashCode(callSuper = false)
@AllArgsConstructor
@NoArgsConstructor
public class Dog extends Pet {

	public static enum CoatType { SMOOTH, SHORT, COMBINATION, DOUBLE, HEAVY, SILKY, LONG, CURLY, WIRE, HAIRLESS }

	@Enumerated(EnumType.STRING)
	private CoatType coat;

	@Builder
	public Dog(String name, Owner owner, CoatType coat) {
		super(name, owner);
		this.coat = coat;
	}

}
@Entity
@Data
@EqualsAndHashCode(callSuper = false)
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Cat extends Pet {

	public static enum CoatType { TABBY, TOROISE, COLORPOINT, BICOLOR, TRICOLOR, SOLID  }
	
	@Enumerated(EnumType.STRING)
	private CoatType coat;

	@Builder
	public Cat(String name, Owner owner, CoatType coat) {
		super(name, owner);
		this.coat = coat;
	}

}
public interface PetRepo extends JpaRepository<Pet, UUID> {

}

The full code to reproduce is available at https://github.com/mathias-ewald/springdoc-data-rest-example/tree/inheritance.

Expected behavior
I expect no exception to show but instead to see a nice and shiny specification of the inheritance model ;)

EDIT
The problem must have been introduced in 1.5.6-SNAPSHOT. When I revert back to 1.5.5 the problem is gone.

@mathias-ewald mathias-ewald changed the title Spring Data Rest: Exception while generating api doc with inheritance Spring Data Rest: Exception while generating api doc with inheritance - NullPointerException: Cannot invoke "String.substring(int)" Mar 9, 2021
This was referenced Mar 16, 2021
@Manfred73
Copy link

I'm getting the same error, but not related to Spring Data Rest.

I have an interface like this:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, property = "type")
@JsonSubTypes({
        @JsonSubTypes.Type(value = XPathFilter.class, name = "XPathFilter")
})
public interface Filter {

    boolean matches(String message);
}

and an model implementated like this:

@Builder(toBuilder = true)
@Getter
@Setter
@EqualsAndHashCode(callSuper = true)
@Relation(value = "filter", collectionRelation = "filters")
public class XPathFilter extends RepresentationModel<Channel> implements Filter {

    private final String xpathExpression;

    @JsonCreator
    public XPathFilter(
            @JsonProperty("xpathExpression") String xpathExpression) {
        this.xpathExpression = xpathExpression;
    }

    @Override
    public boolean matches(final String message) {
        // some implementation
    }
}

Using springboot 3.4.1, springdoc-openapi-starter-webmvc-ui 2.8.3, spring-boot-starter-hateoas 3.4.1, springdoc-openapi-ui 1.8.0 and springdoc-openapi-hateoas 1.8.0 dependencies and springdoc-openapi-maven-plugin 1.4 with Java 23.

This throws the following exception during maven build:

java.lang.NullPointerException: Cannot invoke "String.substring(int)" because the return value of "io.swagger.v3.oas.models.media.Schema.get$ref()" is null
	at org.springdoc.core.converters.HateoasLinksConverter.resolve(HateoasLinksConverter.java:74) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
	at io.swagger.v3.core.jackson.ModelResolver.lambda$resolve$2(ModelResolver.java:739) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
	at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:348) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
	at org.springdoc.core.converters.AdditionalModelsConverter.resolve(AdditionalModelsConverter.java:163) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.FileSupportConverter.resolve(FileSupportConverter.java:72) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.ResponseSupportConverter.resolve(ResponseSupportConverter.java:84) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.SchemaPropertyDeprecatingConverter.resolve(SchemaPropertyDeprecatingConverter.java:95) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.PolymorphicModelConverter.resolve(PolymorphicModelConverter.java:135) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.OAS31ModelConverter.resolve(OAS31ModelConverter.java:49) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.CollectionModelContentConverter.resolve(CollectionModelContentConverter.java:84) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.HateoasLinksConverter.resolve(HateoasLinksConverter.java:73) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
	at io.swagger.v3.core.jackson.ModelResolver.resolve(ModelResolver.java:745) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
	at org.springdoc.core.converters.AdditionalModelsConverter.resolve(AdditionalModelsConverter.java:163) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.FileSupportConverter.resolve(FileSupportConverter.java:72) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.ResponseSupportConverter.resolve(ResponseSupportConverter.java:84) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.SchemaPropertyDeprecatingConverter.resolve(SchemaPropertyDeprecatingConverter.java:95) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.PolymorphicModelConverter.resolve(PolymorphicModelConverter.java:135) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.OAS31ModelConverter.resolve(OAS31ModelConverter.java:49) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.CollectionModelContentConverter.resolve(CollectionModelContentConverter.java:84) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.HateoasLinksConverter.resolve(HateoasLinksConverter.java:73) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
	at org.springdoc.core.converters.ResponseSupportConverter.resolve(ResponseSupportConverter.java:76) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.SchemaPropertyDeprecatingConverter.resolve(SchemaPropertyDeprecatingConverter.java:95) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.PolymorphicModelConverter.resolve(PolymorphicModelConverter.java:135) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.OAS31ModelConverter.resolve(OAS31ModelConverter.java:49) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.CollectionModelContentConverter.resolve(CollectionModelContentConverter.java:84) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.converters.HateoasLinksConverter.resolve(HateoasLinksConverter.java:87) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at io.swagger.v3.core.converter.ModelConverterContextImpl.resolve(ModelConverterContextImpl.java:97) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
	at io.swagger.v3.core.converter.ModelConverters.resolveAsResolvedSchema(ModelConverters.java:192) ~[swagger-core-jakarta-2.2.27.jar:2.2.27]
	at org.springdoc.core.utils.SpringDocAnnotationsUtils.extractSchema(SpringDocAnnotationsUtils.java:136) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.service.GenericResponseService.calculateSchema(GenericResponseService.java:563) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.service.GenericResponseService.buildContent(GenericResponseService.java:541) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.service.GenericResponseService.buildContent(GenericResponseService.java:522) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.service.GenericResponseService.buildApiResponses(GenericResponseService.java:595) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.service.GenericResponseService.buildApiResponses(GenericResponseService.java:476) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.core.service.GenericResponseService.build(GenericResponseService.java:264) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:612) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.api.AbstractOpenApiResource.calculatePath(AbstractOpenApiResource.java:802) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.webmvc.api.OpenApiResource.lambda$calculatePath$11(OpenApiResource.java:222) ~[springdoc-openapi-starter-webmvc-api-2.8.3.jar:2.8.3]
	at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
	at org.springdoc.webmvc.api.OpenApiResource.calculatePath(OpenApiResource.java:203) ~[springdoc-openapi-starter-webmvc-api-2.8.3.jar:2.8.3]
	at org.springdoc.webmvc.api.OpenApiResource.lambda$getPaths$2(OpenApiResource.java:173) ~[springdoc-openapi-starter-webmvc-api-2.8.3.jar:2.8.3]
	at java.base/java.util.Optional.ifPresent(Optional.java:178) ~[na:na]
	at org.springdoc.webmvc.api.OpenApiResource.getPaths(OpenApiResource.java:152) ~[springdoc-openapi-starter-webmvc-api-2.8.3.jar:2.8.3]
	at org.springdoc.api.AbstractOpenApiResource.getOpenApi(AbstractOpenApiResource.java:370) ~[springdoc-openapi-starter-common-2.8.3.jar:2.8.3]
	at org.springdoc.webmvc.api.OpenApiResource.openapiJson(OpenApiResource.java:127) ~[springdoc-openapi-starter-webmvc-api-2.8.3.jar:2.8.3]
	at org.springdoc.webmvc.api.OpenApiWebMvcResource.openapiJson(OpenApiWebMvcResource.java:117) ~[springdoc-openapi-starter-webmvc-api-2.8.3.jar:2.8.3]
	at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103) ~[na:na]
	at java.base/java.lang.reflect.Method.invoke(Method.java:580) ~[na:na]
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:257) ~[spring-web-6.2.1.jar:6.2.1]
	at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:190) ~[spring-web-6.2.1.jar:6.2.1]
	at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:118) ~[spring-webmvc-6.2.1.jar:6.2.1]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:986) ~[spring-webmvc-6.2.1.jar:6.2.1]
	at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:891) ~[spring-webmvc-6.2.1.jar:6.2.1]
	at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:87) ~[spring-webmvc-6.2.1.jar:6.2.1]
	at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1088) ~[spring-webmvc-6.2.1.jar:6.2.1]
	at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:978) ~[spring-webmvc-6.2.1.jar:6.2.1]
	at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1014) ~[spring-webmvc-6.2.1.jar:6.2.1]
	at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:903) ~[spring-webmvc-6.2.1.jar:6.2.1]
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564) ~[tomcat-embed-core-10.1.34.jar:6.0]
	at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:885) ~[spring-webmvc-6.2.1.jar:6.2.1]
	at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658) ~[tomcat-embed-core-10.1.34.jar:6.0]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:195) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51) ~[tomcat-embed-websocket-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.springframework.web.filter.RequestContextFilter.doFilterInternal(RequestContextFilter.java:100) ~[spring-web-6.2.1.jar:6.2.1]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.1.jar:6.2.1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.springframework.web.filter.FormContentFilter.doFilterInternal(FormContentFilter.java:93) ~[spring-web-6.2.1.jar:6.2.1]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.1.jar:6.2.1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) ~[spring-web-6.2.1.jar:6.2.1]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:116) ~[spring-web-6.2.1.jar:6.2.1]
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:164) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:140) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:483) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:344) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:397) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:905) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1741) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1190) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:63) ~[tomcat-embed-core-10.1.34.jar:10.1.34]
	at java.base/java.lang.Thread.run(Thread.java:1575) ~[na:na]

@Manfred73
Copy link

Update: not sure if this is related to the inheritance stuff though. I have removed the interfaces and inheritance, and directly use the implementation of the XPathFilter in my model class. This still produces the same error.
Maybe it's related to HATEOAS (HateoasLinksConverter)?

@fkjaekel
Copy link

Check this @Manfred73

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

4 participants