When try to get the OpenApi documentation (http://localhost:8080/openapi) a NPE is throwed in server log and the browser shows nothing.
OpenApi documentation
paths: {}
components: {}
[2018-09-13T21:07:46.066-0300] [Payara 5.183] [WARNING] [] [fish.payara.microprofile.openapi.impl.rest.app.service.OpenApiResource] [tid: _ThreadID=38 _ThreadName=http-thread-pool::http-listener-1(1)] [timeMillis: 1536883666066] [levelValue: 900] [[
OpenAPI document creation failed.
fish.payara.microprofile.openapi.api.OpenAPIBuildException: java.lang.NullPointerException
at fish.payara.microprofile.openapi.impl.OpenApiService$OpenApiMapping.buildDocument(OpenApiService.java:292)
at fish.payara.microprofile.openapi.impl.OpenApiService$OpenApiMapping.getDocument(OpenApiService.java:272)
at fish.payara.microprofile.openapi.impl.OpenApiService$OpenApiMapping.access$300(OpenApiService.java:255)
at fish.payara.microprofile.openapi.impl.OpenApiService.getDocument(OpenApiService.java:188)
at fish.payara.microprofile.openapi.impl.rest.app.service.OpenApiResource.getResponse(OpenApiResource.java:82)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory.lambda$static$0(ResourceMethodInvocationHandlerFactory.java:76)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:148)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:191)
at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:200)
at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:103)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:493)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:415)
at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:104)
at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:277)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:272)
at org.glassfish.jersey.internal.Errors$1.call(Errors.java:268)
at org.glassfish.jersey.internal.Errors.process(Errors.java:316)
at org.glassfish.jersey.internal.Errors.process(Errors.java:298)
at org.glassfish.jersey.internal.Errors.process(Errors.java:268)
at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:289)
at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:256)
at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:704)
at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:416)
at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:370)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:389)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:342)
at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:229)
at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1628)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:258)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:160)
at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:755)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:575)
at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:99)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:159)
at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:371)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:238)
at com.sun.enterprise.v3.services.impl.ContainerMapper$HttpHandlerCallable.call(ContainerMapper.java:516)
at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:213)
at org.glassfish.grizzly.http.server.HttpHandler.runService(HttpHandler.java:182)
at org.glassfish.grizzly.http.server.HttpHandler.doHandle(HttpHandler.java:156)
at org.glassfish.grizzly.http.server.HttpServerFilter.handleRead(HttpServerFilter.java:218)
at org.glassfish.grizzly.filterchain.ExecutorResolver$9.execute(ExecutorResolver.java:95)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeFilter(DefaultFilterChain.java:260)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.executeChainPart(DefaultFilterChain.java:177)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.execute(DefaultFilterChain.java:109)
at org.glassfish.grizzly.filterchain.DefaultFilterChain.process(DefaultFilterChain.java:88)
at org.glassfish.grizzly.ProcessorExecutor.execute(ProcessorExecutor.java:53)
at org.glassfish.grizzly.nio.transport.TCPNIOTransport.fireIOEvent(TCPNIOTransport.java:524)
at org.glassfish.grizzly.strategies.AbstractIOStrategy.fireIOEvent(AbstractIOStrategy.java:89)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.run0(WorkerThreadIOStrategy.java:94)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy.access$100(WorkerThreadIOStrategy.java:33)
at org.glassfish.grizzly.strategies.WorkerThreadIOStrategy$WorkerThreadRunnable.run(WorkerThreadIOStrategy.java:114)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:569)
at org.glassfish.grizzly.threadpool.AbstractThreadPool$Worker.run(AbstractThreadPool.java:549)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.NullPointerException
at fish.payara.microprofile.openapi.impl.processor.ApplicationProcessor.visitQueryParam(ApplicationProcessor.java:365)
at fish.payara.microprofile.openapi.impl.visitor.OpenApiWalker.processAnnotation(OpenApiWalker.java:217)
at fish.payara.microprofile.openapi.impl.visitor.OpenApiWalker.processAnnotations(OpenApiWalker.java:197)
at fish.payara.microprofile.openapi.impl.visitor.OpenApiWalker.processAnnotations(OpenApiWalker.java:206)
at fish.payara.microprofile.openapi.impl.visitor.OpenApiWalker.accept(OpenApiWalker.java:150)
at fish.payara.microprofile.openapi.impl.processor.ApplicationProcessor.process(ApplicationProcessor.java:157)
at fish.payara.microprofile.openapi.impl.OpenApiService$OpenApiMapping.buildDocument(OpenApiService.java:288)
... 58 more
]]
1 -** Create a basic JAX-RS application with a simple class with @GET and @QueryParam:
@Path("/test")
@Consumes({MediaType.APPLICATION_JSON})
@Produces({MediaType.APPLICATION_JSON})
public class TestService {
private static final String START_PAGE = "1";
@GET
public List<String> getProdutos(@QueryParam("page") int page) {
return new ArrayList<String>();
}
}
2 -** Create a class that extends org.glassfish.jersey.server.ResourceConfig with a default constructor and register any component:
@ApplicationPath("/")
public class ApplicationServices extends ResourceConfig {
public ApplicationServices() {
packages("br.com.fabioluis.openapipayara5183error.services");
// https://jersey.github.io/documentation/latest/security.html#d0e12436
register(RolesAllowedDynamicFeature.class);
// https://jersey.github.io/documentation/latest/declarative-linking.html
register(DeclarativeLinkingFeature.class);
// https://jersey.github.io/documentation/latest/media.html#json.moxy
register(MoxyJsonFeature.class);
// https://jersey.github.io/documentation/latest/media.html#d0e8809
register(MoxyXmlFeature.class);
// https://jersey.github.io/documentation/latest/entity-filtering.html
// Register the EntityFilteringFeature.
register(EntityFilteringFeature.class);
}
}
3 -** Deploy the war and point you browser to http://localhost:8080/openapi
Project: openapi-payara-5183-error.zip
To the problem occur we need two premisses:
1 -* At least one registered component in the ResourceConfig extended class constructor.
2 -* At least one method annotated with @GET and one @QueryParam in that same method
Hi @silvafabio,
This bug is caused by registering a Jersey provider, which causes the getClasses() method on the class to only return the providers registered. This information is used in generating the endpoint paths, and therefore causes the operation context to be null. I've made a pull request to address this issue which you can find here. Feel free to test that this fixes your issue. This fix will be included in 5.184.
Kind regards,
Matt
Hi @silvafabio,
Since a fix has been merged, I'll close this issue.
Kind regards,
Matt