NPE in ForeignKeyComparator
Description
Environment
H2 Database, Windows 7 x64
Activity
Nathan Voxland September 3, 2013 at 6:49 PM
I was able to reproduce it and fixed it.

yilativs August 31, 2013 at 6:16 PM
just hit this bug on postgresql
stacktrace
Liquibase generateChangeLog Failed: java.lang.NullPointerException
SEVERE 8/31/13 9:55 PM:liquibase: java.lang.NullPointerException
liquibase.exception.DatabaseException: java.lang.NullPointerException
at liquibase.snapshot.jvm.ForeignKeySnapshotGenerator.snapshotObject(ForeignKeySnapshotGenerator.java:178)
at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:59)
at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:42)
at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:62)
at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:42)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:75)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:124)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:124)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:157)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:128)
at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:121)
at liquibase.integration.commandline.CommandLineUtils.doGenerateChangeLog(CommandLineUtils.java:163)
at liquibase.integration.commandline.Main.doMigration(Main.java:783)
at liquibase.integration.commandline.Main.main(Main.java:138)
Caused by: java.lang.NullPointerException
at liquibase.diff.compare.core.ForeignKeyComparator.isSameObject(ForeignKeyComparator.java:41)
at liquibase.diff.compare.DatabaseObjectComparatorChain.isSameObject(DatabaseObjectComparatorChain.java:39)
at liquibase.diff.compare.DatabaseObjectComparatorFactory.isSameObject(DatabaseObjectComparatorFactory.java:92)
at liquibase.snapshot.jvm.ForeignKeySnapshotGenerator.snapshotObject(ForeignKeySnapshotGenerator.java:164)
... 29 more
if needed i'll provide test schema
When performing the dropAll command, a NullPointerException gets thrown in ForeignKeyComparator.
This is the complete stacktrace:
java.lang.NullPointerException
at liquibase.diff.compare.core.ForeignKeyComparator.isSameObject(ForeignKeyComparator.java:41)
at liquibase.diff.compare.DatabaseObjectComparatorChain.isSameObject(DatabaseObjectComparatorChain.java:39)
at liquibase.diff.compare.DatabaseObjectComparatorFactory.isSameObject(DatabaseObjectComparatorFactory.java:92)
at liquibase.snapshot.jvm.ForeignKeySnapshotGenerator.snapshotObject(ForeignKeySnapshotGenerator.java:164)
at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:59)
at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:42)
at liquibase.snapshot.jvm.JdbcSnapshotGenerator.snapshot(JdbcSnapshotGenerator.java:62)
at liquibase.snapshot.SnapshotGeneratorChain.snapshot(SnapshotGeneratorChain.java:42)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:75)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:124)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:124)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:124)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:124)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:144)
at liquibase.snapshot.DatabaseSnapshot.replaceObject(DatabaseSnapshot.java:157)
at liquibase.snapshot.DatabaseSnapshot.includeNestedObjects(DatabaseSnapshot.java:107)
at liquibase.snapshot.DatabaseSnapshot.include(DatabaseSnapshot.java:94)
at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:128)
at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:121)
at liquibase.snapshot.SnapshotGeneratorFactory.createSnapshot(SnapshotGeneratorFactory.java:109)
at liquibase.database.AbstractJdbcDatabase.dropDatabaseObjects(AbstractJdbcDatabase.java:869)
at liquibase.Liquibase.dropAll(Liquibase.java:550)
at liquibase.Liquibase.dropAll(Liquibase.java:537)
at LiquiTest.main(LiquiTest.java:52)
I think this was introduced with the following commit:
https://github.com/liquibase/liquibase/commit/921adca4cb468bb7efada34baf580aae0f7348b9