basilapi / basil

Building Apis SImpLy from sparql endpoints
http://basil.kmi.open.ac.uk
24 stars 5 forks source link

NPE when listing latest queries #41

Closed enridaga closed 9 years ago

enridaga commented 9 years ago

From the logs:

2015-10-21 10:37:33.771 [qtp278934944-11] WARN  org.eclipse.jetty.server.HttpChannel - //basil.kmi.open.ac.uk/basil
javax.servlet.ServletException: java.lang.NullPointerException
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:397) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:381) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:344) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:221) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:816) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1684) ~[basil-server-0.3.1.jar:?]
    at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) ~[basil-server-0.3.1.jar:?]
    at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) ~[basil-server-0.3.1.jar:?]
    at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) ~[basil-server-0.3.1.jar:?]
    at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) ~[basil-server-0.3.1.jar:?]
    at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383) ~[basil-server-0.3.1.jar:?]
    at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) ~[basil-server-0.3.1.jar:?]
    at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1667) ~[basil-server-0.3.1.jar:?]
    at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:205) ~[basil-server-0.3.1.jar:?]
    at com.thetransactioncompany.cors.CORSFilter.doFilter(CORSFilter.java:266) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1667) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:581) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:143) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:548) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1121) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:511) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:185) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1055) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:118) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.Server.handle(Server.java:515) ~[basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:291) [basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:242) [basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:238) [basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:95) [basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.io.SelectChannelEndPoint$2.run(SelectChannelEndPoint.java:57) [basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.produceAndRun(ExecuteProduceConsume.java:191) [basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.util.thread.strategy.ExecuteProduceConsume.run(ExecuteProduceConsume.java:126) [basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:654) [basil-server-0.3.1.jar:?]
    at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:572) [basil-server-0.3.1.jar:?]
    at java.lang.Thread.run(Thread.java:745) [?:1.8.0_51]
Caused by: java.lang.NullPointerException
    at uk.ac.open.kmi.basil.rest.core.SpecificationResource.list(SpecificationResource.java:115) ~[basil-server-0.3.1.jar:?]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_51]
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_51]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_51]
    at java.lang.reflect.Method.invoke(Method.java:497) ~[?:1.8.0_51]
    at org.glassfish.jersey.server.model.internal.ResourceMethodInvocationHandlerFactory$1.invoke(ResourceMethodInvocationHandlerFactory.java:81) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher$1.run(AbstractJavaResourceMethodDispatcher.java:151) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.invoke(AbstractJavaResourceMethodDispatcher.java:172) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.model.internal.JavaResourceMethodDispatcherProvider$ResponseOutInvoker.doDispatch(JavaResourceMethodDispatcherProvider.java:152) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.model.internal.AbstractJavaResourceMethodDispatcher.dispatch(AbstractJavaResourceMethodDispatcher.java:104) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.invoke(ResourceMethodInvoker.java:384) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:342) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.model.ResourceMethodInvoker.apply(ResourceMethodInvoker.java:101) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:271) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:271) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.internal.Errors$1.call(Errors.java:267) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:315) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:297) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.internal.Errors.process(Errors.java:267) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:297) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:254) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:1030) ~[basil-server-0.3.1.jar:?]
    at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:377) ~[basil-server-0.3.1.jar:?]
    ... 37 more
enridaga commented 9 years ago

Apparently this happens when a new API is created but the name is still empty.

enridaga commented 9 years ago

Problem is on the SQL query that is an INNER JOIN erroneously, instead of a LEFT JOIN. In MySQLStore.java:

public ApiInfo info(String id) throws IOException {
        try {
            ApiInfo apiInfo = null;
            Class.forName("com.mysql.jdbc.Driver");
            try (Connection connect = DriverManager.getConnection(jdbcUri)) {
                String q = "SELECT DATA.VALUE, APIS.CREATED, APIS.MODIFIED FROM APIS INNER JOIN DATA ON DATA.API = APIS.ID AND DATA.PROPERTY='doc:name' WHERE APIS.NICKNAME = ?";
[...]
                      return apiInfo; # NULL WHEN NO RESULTS...

Need to patch on branch 0.3 and prepare new release