Closed
Description
When using large numbers as id's for entity objects you get this exception:
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected NUMBER but was BEGIN_OBJECT
at com.google.gson.Gson.fromJson(Gson.java:822)
at com.google.gson.Gson.fromJson(Gson.java:875)
at com.google.gson.Gson$1.deserialize(Gson.java:128)
at org.javers.core.json.typeadapter.commit.GlobalIdTypeAdapter.parseInstanceId(GlobalIdTypeAdapter.java:67)
at org.javers.core.json.typeadapter.commit.GlobalIdTypeAdapter.fromJson(GlobalIdTypeAdapter.java:42)
at org.javers.core.json.typeadapter.commit.GlobalIdTypeAdapter.fromJson(GlobalIdTypeAdapter.java:18)
at org.javers.core.json.JsonConverterBuilder$2.deserialize(JsonConverterBuilder.java:139)
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
at com.google.gson.Gson.fromJson(Gson.java:810)
at com.google.gson.Gson.fromJson(Gson.java:875)
at com.google.gson.Gson$1.deserialize(Gson.java:128)
at org.javers.core.json.typeadapter.commit.CdoSnapshotTypeAdapter.fromJson(CdoSnapshotTypeAdapter.java:48)
at org.javers.core.json.typeadapter.commit.CdoSnapshotTypeAdapter.fromJson(CdoSnapshotTypeAdapter.java:22)
at org.javers.core.json.JsonConverterBuilder$2.deserialize(JsonConverterBuilder.java:139)
at com.google.gson.TreeTypeAdapter.read(TreeTypeAdapter.java:58)
at com.google.gson.Gson.fromJson(Gson.java:810)
at com.google.gson.Gson.fromJson(Gson.java:775)
at com.google.gson.Gson.fromJson(Gson.java:724)
at com.google.gson.Gson.fromJson(Gson.java:696)
at org.javers.core.json.JsonConverter.fromJson(JsonConverter.java:78)
at org.javers.repository.mongo.MongoRepository.readFromDBObject(MongoRepository.java:184)
at org.javers.repository.mongo.MongoRepository.getLatest(MongoRepository.java:241)
at org.javers.repository.mongo.MongoRepository.getLatest(MongoRepository.java:79)
at org.javers.repository.api.JaversExtendedRepository.getLatest(JaversExtendedRepository.java:100)
at org.javers.core.snapshot.GraphShadowFactory.createLatestShadow(GraphShadowFactory.java:32)
at org.javers.core.snapshot.GraphSnapshotFacade.createLatestShadow(GraphSnapshotFacade.java:22)
at org.javers.core.commit.CommitFactory.create(CommitFactory.java:76)
at org.javers.core.JaversCore.commit(JaversCore.java:60)
at com.nasdaq.xcsd.audit.logger.exploratory.JaVersMongoDBTest.verifyMappingOfLargerId(JaVersMongoDBTest.java:46)
Here is the unit test that triggers the bugg:
public class JaVersMongoDBTest {
public static final long ID_ONE_BILLION = 1000000000L;
public static final long ID_ONE_TRILLION = 1000000000L*1000;
private Javers javers;
@Before
public void setup() {
MongoDatabase mongoDb = new MongoClient( "localhost" ).getDatabase("test");
MongoRepository mongoRepo = new MongoRepository(mongoDb);
javers = JaversBuilder.javers().registerJaversRepository(mongoRepo).build();
}
@Builder
public static class MyEntity {
@Id
final private Long id;
final private String name;
}
@Test
// This test passes
public void verifyMappingOfLargeId() {
javers.commit("kent", MyEntity.builder().id(ID_ONE_BILLION).name("red").build());
javers.commit("kent", MyEntity.builder().id(ID_ONE_BILLION).name("blue").build());
}
@Test
// This test fails
public void verifyMappingOfLargerId() {
javers.commit("kent", MyEntity.builder().id(ID_ONE_TRILLION).name("red").build());
javers.commit("kent", MyEntity.builder().id(ID_ONE_TRILLION).name("blue").build());
}
}