Nullpointer for low level commit without geometry regeneration when project does not have initial geometry
Assume a project without geometry generated in the first place. Committing a low level interface transaction with geometry regeneration disabled results in a null pointer due to missing geometry report to copy.
14:10:49 INFO [qtp1088628578-37]: {"request":{"interface":"LowLevelInterface","method":"commitTransaction","parameters":{"tid":3,"comment":"added pipe segement contained in storey","regenerateAllGeometry":false}},"token":"..."} (JsonHandler.java:85)
14:10:49 INFO [qtp1088628578-37]: (JsonHandler.java:86) java.lang.NullPointerException: null
at org.bimserver.database.actions.AddGeometryReports.storeExtendedData(AddGeometryReports.java:72)
at org.bimserver.database.actions.AddGeometryReports.execute(AddGeometryReports.java:59)
at org.bimserver.database.actions.AddGeometryReports.execute(AddGeometryReports.java:36)
at org.bimserver.database.DatabaseSession.executeAndCommitAction(DatabaseSession.java:775)
at org.bimserver.database.DatabaseSession.executeAndCommitAction(DatabaseSession.java:767)
at org.bimserver.database.actions.CommitTransactionDatabaseAction$3.execute(CommitTransactionDatabaseAction.java:299)
at org.bimserver.database.DatabaseSession.commit(DatabaseSession.java:259)
at org.bimserver.database.DatabaseSession.executeAndCommitAction(DatabaseSession.java:777)
at org.bimserver.database.DatabaseSession.executeAndCommitAction(DatabaseSession.java:767)
at org.bimserver.webservices.impl.LowLevelServiceImpl.commitTransaction(LowLevelServiceImpl.java:110)
...
The data of the geometry reports (JSON and HTML) from the previous revision is collected here:
https://github.com/opensourceBIM/BIMserver/blob/0c7e37092045d08a4ae8ca836026823f02a977b2/BimServer/src/org/bimserver/database/actions/CommitTransactionDatabaseAction.java#L264-L274
If there are no reports (because geometry generation was previously disabled) then htmlBytes and jsonBytes will remain null and end up in the AddGeomtryReports database action where they later cause the null pointer exception. Thus, we need a null check after collecting the report data and before getDatabaseSession().addPostCommitAction.