EventStore / EventStoreDB-Client-Java

Official Asynchronous Java 8+ Client Library for EventStoreDB 20.6+
https://eventstore.com
Apache License 2.0
61 stars 19 forks source link

Reading metadata for soft deleted stream results in "ClassCastException" #240

Closed michael-schnell closed 9 months ago

michael-schnell commented 11 months ago

Reading the stream metadata for a soft deleted stream fails with a "ClassCastException".

It seems that field "StreamMetadata.truncateBefore" should be "Long" and not "Integer".

Caused by: java.lang.ClassCastException: class java.lang.Long cannot be cast to class java.lang.Integer (java.lang.Long and java.lang.Integer are in module java.base of loader 'bootstrap')
    at com.eventstore.dbclient.StreamMetadata.deserialize(StreamMetadata.java:148)
    at com.eventstore.dbclient.EventStoreDBClient.lambda$getStreamMetadata$1(EventStoreDBClient.java:187)
    at java.base/java.util.concurrent.CompletableFuture$UniCompose.tryFire(CompletableFuture.java:1072)

Example program:

    public static void main(String[] args) throws InterruptedException, ExecutionException {

        EventStoreDBClientSettings settings = EventStoreDBConnectionString.parseOrThrow("esdb://localhost:2113?tls=false");
        EventStoreDBClient client = EventStoreDBClient.create(settings);                        

        String streamId = "MyStream";

        // Create stream by appending something to it
        List<EventData> events = new ArrayList<>();
        events.add(EventData.builderAsBinary(UUID.randomUUID(), "baz", "dummy content".getBytes()).build());
        client.appendToStream(streamId, AppendToStreamOptions.get().expectedRevision(ExpectedRevision.any()), events.iterator()).join();

        // Delete
        client.deleteStream(streamId, DeleteStreamOptions.get().expectedRevision(ExpectedRevision.any())).join();

        // Get status
        client.getStreamMetadata(streamId).get();

    }