diff --git a/pom.xml b/pom.xml index ee79d13..94dbbad 100644 --- a/pom.xml +++ b/pom.xml @@ -62,7 +62,7 @@ org.apache.avro avro - 1.11.3 + 1.11.4 org.apache.commons @@ -94,9 +94,19 @@ org.mockito mockito-core - 5.11.0 + 5.18.0 test + + com.google.protobuf + protobuf-java + 3.25.5 + + + org.xerial.snappy + snappy-java + 1.1.10.5 + diff --git a/readme.md b/readme.md index d35f276..94bfd7d 100644 --- a/readme.md +++ b/readme.md @@ -1,4 +1,4 @@ -# Optimove Java SDK +# Optimove Java SDK This SDK provides a Java library for working with customer engagement data. The library includes classes for getting engagement data, as well as metadata about the engagement. @@ -10,7 +10,7 @@ To use this SDK in your project, you'll need to add it as a dependency in your M io.github.maryan-opti Optimove-SDK-Engagement-java - 1.0.3 + 1.0.4 ``` Then, you can import the necessary classes from the SDK into your Java code: @@ -136,4 +136,4 @@ DataFileStream dataFileStream = engagement.getCustomersFileStream logger.error("Invalid file path: " + e.getMessage(), e); // handle error } -``` \ No newline at end of file +``` diff --git a/settings.xml b/settings.xml index 934c85e..4c1c365 100644 --- a/settings.xml +++ b/settings.xml @@ -6,4 +6,4 @@ v1g4IfBrB5oOjsWQNrd3EsMJmwzELR9qZ4t4i5J5qNNx - + \ No newline at end of file diff --git a/src/main/java/optimove/sdk/engagement/Engagement.java b/src/main/java/optimove/sdk/engagement/Engagement.java index 4f89d8b..929bee0 100644 --- a/src/main/java/optimove/sdk/engagement/Engagement.java +++ b/src/main/java/optimove/sdk/engagement/Engagement.java @@ -66,8 +66,17 @@ public DataFileStream getCustomersFileStream(String srcFileName) throw new IllegalArgumentException("srcFileName is null or empty"); } - try (ReadChannel readChanel = StorageSingleton.getReadChanel(this.settings.getBucketName(), srcFileName, this.settings.getDecryptionKey()); - InputStream targetStream = Channels.newInputStream(readChanel)) { + try { + // Do NOT wrap the ReadChannel and InputStream in try-with-resources here – + // doing so would close them immediately, making the returned DataFileStream unusable + // and causing a ClosedChannelException when the caller tries to read. + + ReadChannel readChannel = StorageSingleton.getReadChanel( + this.settings.getBucketName(), + srcFileName, + this.settings.getDecryptionKey()); + + InputStream targetStream = Channels.newInputStream(readChannel); DatumReader datumReader = new GenericDatumReader<>(); return new DataFileStream<>(targetStream, datumReader);