Skip to content

Mapping of large numbers fails when using MongoDB #192

Closed
@linderl

Description

@linderl

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());
    }
}

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions