diff --git a/src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/TransactionPayloadEventDataDeserializer.java b/src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/TransactionPayloadEventDataDeserializer.java
index a8e8487..19d097f 100644
--- a/src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/TransactionPayloadEventDataDeserializer.java
+++ b/src/main/java/com/github/shyiko/mysql/binlog/event/deserialization/TransactionPayloadEventDataDeserializer.java
@@ -23,6 +23,8 @@
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.Objects;
+import java.util.function.Supplier;
/**
* @author Somesh Malviya
@@ -34,6 +36,16 @@ public class TransactionPayloadEventDataDeserializer implements EventDataDeseria
public static final int OTW_PAYLOAD_COMPRESSION_TYPE_FIELD = 2;
public static final int OTW_PAYLOAD_UNCOMPRESSED_SIZE_FIELD = 3;
+ private final Supplier transactionPayloadEventDeserializerProvider;
+
+ public TransactionPayloadEventDataDeserializer() {
+ this(EventDeserializer::new);
+ }
+
+ public TransactionPayloadEventDataDeserializer(Supplier transactionPayloadEventDeserializerProvider) {
+ this.transactionPayloadEventDeserializerProvider = Objects.requireNonNull(transactionPayloadEventDeserializerProvider);
+ }
+
@Override
public TransactionPayloadEventData deserialize(ByteArrayInputStream inputStream) throws IOException {
TransactionPayloadEventData eventData = new TransactionPayloadEventData();
@@ -86,7 +98,7 @@ public TransactionPayloadEventData deserialize(ByteArrayInputStream inputStream)
// Read and store events from decompressed byte array into input stream
ArrayList decompressedEvents = new ArrayList<>();
- EventDeserializer transactionPayloadEventDeserializer = new EventDeserializer();
+ EventDeserializer transactionPayloadEventDeserializer = transactionPayloadEventDeserializerProvider.get();
ByteArrayInputStream destinationInputStream = new ByteArrayInputStream(dst);
Event internalEvent = transactionPayloadEventDeserializer.nextEvent(destinationInputStream);