NullPointerException with fresh directory and empty file
Created by: Quazgar
With a fresh installation, browsing into the directory created as follows causes an exception.
Directory creation:
mkdir filesystem/foo
touch filesystem/foo/blubb.txt
Browsing into this directory in the WebUI causes:
java.lang.NullPointerException
at caosdb.server.database.backend.transaction.GetFileRecordByPath.getId(GetFileRecordByPath.java:56)
at caosdb.server.transaction.RetrieveSparseEntityByPath.transaction(RetrieveSparseEntityByPath.java:62)
at caosdb.server.transaction.Transaction.execute(Transaction.java:165)
at caosdb.server.resource.FileSystemResource.getEntity(FileSystemResource.java:178)
at caosdb.server.resource.FileSystemResource.getEntityID(FileSystemResource.java:167)
at caosdb.server.resource.FileSystemResource.getFileElement(FileSystemResource.java:161)
at caosdb.server.resource.FileSystemResource.httpGetInChildClass(FileSystemResource.java:105)
at caosdb.server.resource.AbstractCaosDBServerResource.httpGet(AbstractCaosDBServerResource.java:178)
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.restlet.resource.ServerResource.doHandle(ServerResource.java:511)
at org.restlet.resource.ServerResource.get(ServerResource.java:723)
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:603)
at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:662)
at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348)
at org.restlet.resource.ServerResource.handle(ServerResource.java:1020)
at org.restlet.resource.Finder.handle(Finder.java:236)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at caosdb.server.CaosDBServer$2.handle(CaosDBServer.java:405)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at caosdb.server.CaosDBServer$3.handle(CaosDBServer.java:423)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:77)
at org.restlet.Application.handle(Application.java:385)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
at org.restlet.Component.handle(Component.java:408)
at caosdb.server.CaosDBComponent.handle(CaosDBServer.java:730)
at org.restlet.Server.handle(Server.java:507)
at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63)
at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143)
at org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:256)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:748)
Feb 18, 2019 3:53:57 PM caosdb.server.resource.AbstractCaosDBServerResource handleThrowable
SEVERE: UNKNOWN ERROR
java.lang.NullPointerException
at caosdb.server.database.backend.transaction.GetFileRecordByPath.getId(GetFileRecordByPath.java:56)
at caosdb.server.transaction.RetrieveSparseEntityByPath.transaction(RetrieveSparseEntityByPath.java:62)
at caosdb.server.transaction.Transaction.execute(Transaction.java:165)
at caosdb.server.resource.FileSystemResource.getEntity(FileSystemResource.java:178)
at caosdb.server.resource.FileSystemResource.getEntityID(FileSystemResource.java:167)
at caosdb.server.resource.FileSystemResource.getFileElement(FileSystemResource.java:161)
at caosdb.server.resource.FileSystemResource.httpGetInChildClass(FileSystemResource.java:105)
at caosdb.server.resource.AbstractCaosDBServerResource.httpGet(AbstractCaosDBServerResource.java:178)
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.restlet.resource.ServerResource.doHandle(ServerResource.java:511)
at org.restlet.resource.ServerResource.get(ServerResource.java:723)
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:603)
at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:662)
at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348)
at org.restlet.resource.ServerResource.handle(ServerResource.java:1020)
at org.restlet.resource.Finder.handle(Finder.java:236)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at caosdb.server.CaosDBServer$2.handle(CaosDBServer.java:405)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at caosdb.server.CaosDBServer$3.handle(CaosDBServer.java:423)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:77)
at org.restlet.Application.handle(Application.java:385)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
at org.restlet.Component.handle(Component.java:408)
at caosdb.server.CaosDBComponent.handle(CaosDBServer.java:730)
at org.restlet.Server.handle(Server.java:507)
at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63)
at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143)
at org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:256)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:748)
caosdb-server_1 |
Feb 18, 2019 3:53:57 PM org.restlet.engine.log.LogFilter afterHandle
INFO: 2019-02-18 15:53:57 172.25.0.1 - 172.25.0.3 443 GET /FileSystem/foo/ - 500 - 0 40 https://localhost:10443 Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:65.0) Gecko/20100101 Firefox/65.0 https://localhost:10443/FileSystem/
Feb 18, 2019 3:53:57 PM caosdb.server.CaosDBComponent log
SEVERE: ERROR:REQUEST:4313fa9ea6c5127d20726d589a05d73e
java.lang.NullPointerException
at caosdb.server.database.backend.transaction.GetFileRecordByPath.getId(GetFileRecordByPath.java:56)
at caosdb.server.transaction.RetrieveSparseEntityByPath.transaction(RetrieveSparseEntityByPath.java:62)
at caosdb.server.transaction.Transaction.execute(Transaction.java:165)
at caosdb.server.resource.FileSystemResource.getEntity(FileSystemResource.java:178)
at caosdb.server.resource.FileSystemResource.getEntityID(FileSystemResource.java:167)
at caosdb.server.resource.FileSystemResource.getFileElement(FileSystemResource.java:161)
at caosdb.server.resource.FileSystemResource.httpGetInChildClass(FileSystemResource.java:105)
at caosdb.server.resource.AbstractCaosDBServerResource.httpGet(AbstractCaosDBServerResource.java:178)
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.restlet.resource.ServerResource.doHandle(ServerResource.java:511)
at org.restlet.resource.ServerResource.get(ServerResource.java:723)
at org.restlet.resource.ServerResource.doHandle(ServerResource.java:603)
at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:662)
at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:348)
at org.restlet.resource.ServerResource.handle(ServerResource.java:1020)
at org.restlet.resource.Finder.handle(Finder.java:236)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at caosdb.server.CaosDBServer$2.handle(CaosDBServer.java:405)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at caosdb.server.CaosDBServer$3.handle(CaosDBServer.java:423)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:77)
at org.restlet.Application.handle(Application.java:385)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Router.doHandle(Router.java:422)
at org.restlet.routing.Router.handle(Router.java:641)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.routing.Filter.doHandle(Filter.java:150)
at org.restlet.routing.Filter.handle(Filter.java:197)
at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202)
at org.restlet.Component.handle(Component.java:408)
at caosdb.server.CaosDBComponent.handle(CaosDBServer.java:730)
at org.restlet.Server.handle(Server.java:507)
at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63)
at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143)
at org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:256)
at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:311)
at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:257)
at org.eclipse.jetty.io.AbstractConnection$2.run(AbstractConnection.java:544)
at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:635)
at org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:555)
at java.lang.Thread.run(Thread.java:748)
Imported comments:
By Henrik tom Wörden on 2019-12-30T11:53:02.192Z
mentioned in commit 3e10c4753f65334bf4163145719ce5a33ae6c0b6
By Quazgar on 2019-12-18T14:13:41.436Z
mentioned in commit 394cad63
By Timm Fitschen on 2019-12-16T14:41:10.321Z
mentioned in merge request !20 (merged)
By Quazgar on 2019-12-06T11:01:52.512Z
mentioned in commit 718121de
By Quazgar on 2019-12-06T09:41:26.537Z
assigned to @quazgar and unassigned @timm.fitschen
By Quazgar on 2019-12-06T09:37:12.595Z
This happens on the demo server if there are files without records, making the file system in the webui very ugly (unexpected server errors are raised).
By Quazgar on 2019-09-20T09:56:54.592Z
assigned to @timm.fitschen and unassigned @quazgar
By Quazgar on 2019-09-20T09:56:47.941Z
Desired behavior: To keep the logs clean: Stacktraces should only be printed for bugs that need fixing.
By Timm Fitschen on 2019-09-03T06:29:25.578Z
changed due date to December 04, 2019
By Timm Fitschen on 2019-08-29T10:06:57.232Z
changed due date to September 04, 2019
By Timm Fitschen on 2019-08-29T10:06:35.790Z
@quazgar What is the desired behavior?
I'd say, the server should ignore files in the file system which are unknown and maybe log a warning.
However, I would not say that this is ~P2 because this only happens if someone put a file into the internal file system and circumvent the server and that should not happen too often.