Skip to content

NullPointerException when commit property value is null #596

Description

@Ramblurr

It is possible to write a commit property whose value is null (in Java).

But when Javers later tries to read/parse this (by calling new JsonPrimitive() on this line), an NPE is thrown because JsonPrimitive doesn't handle null.

Caused by: java.lang.NullPointerException
	at com.google.gson.JsonPrimitive.isPrimitiveOrString(JsonPrimitive.java:278)
	at com.google.gson.JsonPrimitive.setValue(JsonPrimitive.java:101)
	at com.google.gson.JsonPrimitive.<init>(JsonPrimitive.java:65)
	at org.javers.core.json.typeadapter.commit.CommitPropertiesConverter.toJson(CommitPropertiesConverter.java:34)
	at org.javers.core.json.typeadapter.commit.CdoSnapshotAssembler.assembleCommitMetadata(CdoSnapshotAssembler.java:72)
	at org.javers.core.json.typeadapter.commit.CdoSnapshotAssembler.assemble(CdoSnapshotAssembler.java:22)
	at org.javers.core.json.JsonConverter.fromSerializedSnapshot(JsonConverter.java:82)
	at org.javers.repository.sql.finders.CdoSnapshotFinder.lambda$fetchCdoSnapshots$3(CdoSnapshotFinder.java:94)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.ArrayList$ArrayListSpliterator.forEachRemaining(ArrayList.java:1380)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at org.javers.common.collections.Lists.transform(Lists.java:68)
	at org.javers.repository.sql.finders.CdoSnapshotFinder.fetchCdoSnapshots(CdoSnapshotFinder.java:93)
	at org.javers.repository.sql.finders.CdoSnapshotFinder.lambda$getLatest$0(CdoSnapshotFinder.java:54)
	at java.util.Optional.map(Optional.java:215)
	at org.javers.repository.sql.finders.CdoSnapshotFinder.getLatest(CdoSnapshotFinder.java:52)
	at org.javers.repository.sql.JaversSqlRepository.getLatest(JaversSqlRepository.java:51)
	at org.javers.repository.api.JaversExtendedRepository.getLatest(JaversExtendedRepository.java:92)
	at java.util.stream.ReferencePipeline$3$1.accept(ReferencePipeline.java:193)
	at java.util.HashMap$KeySpliterator.forEachRemaining(HashMap.java:1553)
	at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:481)
	at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
	at java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:708)
	at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:499)
	at org.javers.core.snapshot.SnapshotGraphFactory.createLatest(SnapshotGraphFactory.java:29)
	at org.javers.core.commit.CommitFactory.create(CommitFactory.java:71)
	at org.javers.core.JaversCore.commit(JaversCore.java:82)
	at org.javers.spring.jpa.JaversTransactionalDecorator.commit(JaversTransactionalDecorator.java:65)

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Fields

    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions