BIMserver icon indicating copy to clipboard operation
BIMserver copied to clipboard

Nullpointer for low level commit without geometry regeneration when project does not have initial geometry

Open hlg opened this issue 4 years ago • 1 comments

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)
	...

hlg avatar Nov 18 '21 13:11 hlg

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.

hlg avatar Oct 23 '24 12:10 hlg