You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by cd...@apache.org on 2018/10/17 16:48:16 UTC

[incubator-plc4x] 09/19: removed default methods from the api

This is an automated email from the ASF dual-hosted git repository.

cdutz pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-plc4x.git

commit 8da0bc27e1db6fae82612d65e44b738df9d740be
Author: Andrey Skorikov <an...@codecentric.de>
AuthorDate: Thu Oct 4 12:38:14 2018 +0200

    removed default methods from the api
---
 .../java/org/apache/plc4x/camel/Plc4XConsumer.java | 13 ++---
 .../plc4x/java/api/connection/PlcConnection.java   | 12 +++++
 .../java/api/connection/PlcProprietarySender.java  |  2 +-
 .../plc4x/java/api/connection/PlcReader.java       | 12 -----
 .../plc4x/java/api/connection/PlcSubscriber.java   | 59 ----------------------
 .../plc4x/java/api/connection/PlcWriter.java       | 12 -----
 .../java/api/messages/PlcProprietaryResponse.java  |  4 +-
 .../java/ads/connection/AdsTcpPlcConnection.java   |  7 +--
 .../apache/plc4x/java/ads/ManualPlc4XAdsTest.java  | 13 ++---
 .../ads/connection/AdsSerialPlcConnectionTest.java |  4 +-
 .../plc4x/java/modbus/ManualPlc4XModbusTest.java   | 19 ++++---
 .../connection/ModbusSerialPlcConnectionTest.java  |  4 +-
 12 files changed, 52 insertions(+), 109 deletions(-)

diff --git a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
index 42544f5..7887f02 100644
--- a/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
+++ b/integrations/apache-camel/src/main/java/org/apache/plc4x/camel/Plc4XConsumer.java
@@ -26,10 +26,8 @@ import org.apache.camel.util.AsyncProcessorConverterHelper;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcSubscriber;
 import org.apache.plc4x.java.api.exceptions.PlcException;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionEvent;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
-import org.apache.plc4x.java.api.messages.PlcUnsubscriptionResponse;
+import org.apache.plc4x.java.api.messages.*;
+import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -88,14 +86,17 @@ public class Plc4XConsumer extends ServiceSupport implements Consumer, java.util
         // TODO: Is it correct to only support one field?
         PlcSubscriptionRequest request = plcSubscriber.subscriptionRequestBuilder()
             .addCyclicField("default", fieldQuery, Duration.of(3, ChronoUnit.SECONDS)).build();
-        plcSubscriber.register(request, this);
+        PlcSubscriptionResponse plcSubscriptionResponse = plcSubscriber.subscribe(request).get();
+        // TODO: we need to return the plcSubscriptionResponse here too as we need this to unsubscribe...
+        plcSubscriber.register(this, plcSubscriptionResponse.getSubscriptionHandles());
     }
 
     @Override
     protected void doStop() throws InterruptedException, ExecutionException, TimeoutException, PlcException {
         PlcSubscriber plcSubscriber = plcConnection.getSubscriber().orElseThrow(
             () -> new PlcException("Connection doesn't support subscriptions."));
-        CompletableFuture<PlcUnsubscriptionResponse> unsubscriptionFuture = plcSubscriber.unsubscribe(builder -> builder.addHandles(subscriptionResponse.getSubscriptionHandles()));
+        PlcUnsubscriptionRequest request = plcSubscriber.unsubscriptionRequestBuilder().addHandles(subscriptionResponse.getSubscriptionHandles()).build();
+        CompletableFuture<PlcUnsubscriptionResponse> unsubscriptionFuture = plcSubscriber.unsubscribe(request);
         PlcUnsubscriptionResponse unsubscriptionResponse = unsubscriptionFuture.get(5, TimeUnit.SECONDS);
         // TODO: Handle the response ...
         try {
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcConnection.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcConnection.java
index c508217..4c2b197 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcConnection.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcConnection.java
@@ -19,6 +19,10 @@ under the License.
 package org.apache.plc4x.java.api.connection;
 
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
+import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
+import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 
 import java.util.Optional;
 
@@ -53,6 +57,14 @@ public interface PlcConnection extends AutoCloseable {
     @Override
     void close() throws Exception;
 
+    /*Optional<PlcReadRequest.Builder> readRequestBuilder();
+
+    Optional<PlcWriteRequest.Builder> writeRequestBuilder();
+
+    Optional<PlcSubscriptionRequest.Builder> subscriptionRequestBuilder();
+
+    Optional<PlcUnsubscriptionRequest.Builder> unsubscriptionRequestBuilder();*/
+
     Optional<PlcReader> getReader();
 
     Optional<PlcWriter> getWriter();
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcProprietarySender.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcProprietarySender.java
index 926b1bf..2a053cb 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcProprietarySender.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcProprietarySender.java
@@ -25,5 +25,5 @@ import java.util.concurrent.CompletableFuture;
 
 public interface PlcProprietarySender {
 
-    <PROP_RESPONSE> CompletableFuture<PlcProprietaryResponse<PROP_RESPONSE>> send(PlcProprietaryRequest proprietaryRequest);
+    <T> CompletableFuture<PlcProprietaryResponse<T>> send(PlcProprietaryRequest proprietaryRequest);
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
index bdded83..b78d306 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcReader.java
@@ -37,18 +37,6 @@ public interface PlcReader {
      */
     CompletableFuture<PlcReadResponse> read(PlcReadRequest readRequest);
 
-    /**
-     * Reads a requested value from a PLC.
-     *
-     * @param readRequestBuilderConsumer consumer which can be used to build requests.
-     * @return a {@link CompletableFuture} giving async access to the returned value.
-     */
-    default CompletableFuture<PlcReadResponse> read(Consumer<PlcReadRequest.Builder> readRequestBuilderConsumer) {
-        PlcReadRequest.Builder requestBuilder = readRequestBuilder();
-        readRequestBuilderConsumer.accept(requestBuilder);
-        return read(requestBuilder.build());
-    }
-
     PlcReadRequest.Builder readRequestBuilder();
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcSubscriber.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcSubscriber.java
index 0581bd6..1f582cb 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcSubscriber.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcSubscriber.java
@@ -42,18 +42,6 @@ public interface PlcSubscriber {
     CompletableFuture<PlcSubscriptionResponse> subscribe(PlcSubscriptionRequest subscriptionRequest);
 
     /**
-     * Subscribes to fields on the PLC.
-     *
-     * @param plcSubscriptionRequestBuilderConsumer consumer which can be used to build requests.
-     * @return subscription response containing a subscription response item for each subscription request item.
-     */
-    default CompletableFuture<PlcSubscriptionResponse> subscribe(Consumer<PlcSubscriptionRequest.Builder> plcSubscriptionRequestBuilderConsumer) {
-        PlcSubscriptionRequest.Builder builder = subscriptionRequestBuilder();
-        plcSubscriptionRequestBuilderConsumer.accept(builder);
-        return subscribe(builder.build());
-    }
-
-    /**
      * Unsubscribes from fields on the PLC. For unsubscribing the unsubscription request uses the subscription
      * handle returned as part of the subscription response item.
      *
@@ -63,59 +51,12 @@ public interface PlcSubscriber {
     CompletableFuture<PlcUnsubscriptionResponse> unsubscribe(PlcUnsubscriptionRequest unsubscriptionRequest);
 
     /**
-     * Unsubscribes from fields on the PLC. For unsubscribing the unsubscription request uses the subscription
-     * handle returned as part of the subscription response item.
-     *
-     * @param plcSubscriptionRequestBuilderConsumer consumer which can be used to build requests.
-     * @return unsubscription response containing a unsubscription response item for each unsubscription request item.
-     */
-    default CompletableFuture<PlcUnsubscriptionResponse> unsubscribe(Consumer<PlcUnsubscriptionRequest.Builder> plcSubscriptionRequestBuilderConsumer) {
-        PlcUnsubscriptionRequest.Builder builder = unsubscriptionRequestBuilder();
-        plcSubscriptionRequestBuilderConsumer.accept(builder);
-        return unsubscribe(builder.build());
-    }
-
-    /**
-     * Convenience method to subscribe a {@link Consumer} to all fields of the subscription.
-     *
-     * @param subscriptionRequest subscription request
-     * @param consumer            consumer for all {@link PlcSubscriptionEvent}s
-     * @return TODO: document me
-     * @throws ExecutionException   something went wrong.
-     * @throws InterruptedException something went wrong.
-     */
-    default PlcConsumerRegistration register(PlcSubscriptionRequest subscriptionRequest, Consumer<PlcSubscriptionEvent> consumer) throws ExecutionException, InterruptedException {
-        PlcSubscriptionResponse plcSubscriptionResponse = subscribe(subscriptionRequest).get();
-        // TODO: we need to return the plcSubscriptionResponse here too as we need this to unsubscribe...
-        return register(consumer, plcSubscriptionResponse.getSubscriptionHandles().toArray(new PlcSubscriptionHandle[0]));
-    }
-
-    /**
-     * Convenience method to subscribe a {@link Consumer} to all fields of the subscription.
-     *
-     * @param subscriptionRequestBuilderConsumer consumer for building subscription request.
-     * @param consumer                           consumer for all {@link PlcSubscriptionEvent}s
-     * @return TODO: document me
-     * @throws ExecutionException   something went wrong.
-     * @throws InterruptedException something went wrong.
-     */
-    default PlcConsumerRegistration register(Consumer<PlcSubscriptionRequest.Builder> subscriptionRequestBuilderConsumer, Consumer<PlcSubscriptionEvent> consumer) throws ExecutionException, InterruptedException {
-        PlcSubscriptionRequest.Builder builder = subscriptionRequestBuilder();
-        subscriptionRequestBuilderConsumer.accept(builder);
-        return register(builder.build(), consumer);
-    }
-
-    /**
      * @param consumer
      * @param handles
      * @return TODO: document me
      */
     PlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, Collection<PlcSubscriptionHandle> handles);
 
-    default PlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, PlcSubscriptionHandle... handles) {
-        return register(consumer, Arrays.asList(handles));
-    }
-
     /**
      * // TODO: document me.
      */
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
index ae94859..b22977f 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/connection/PlcWriter.java
@@ -37,18 +37,6 @@ public interface PlcWriter {
      */
     CompletableFuture<PlcWriteResponse> write(PlcWriteRequest writeRequest);
 
-    /**
-     * Writes a given value to a PLC.
-     *
-     * @param writeRequestBuilderConsumer consumer which can be used to build requests.
-     * @return a {@link CompletableFuture} giving async access to the response of the write operation.
-     */
-    default CompletableFuture<PlcWriteResponse> write(Consumer<PlcWriteRequest.Builder> writeRequestBuilderConsumer) {
-        PlcWriteRequest.Builder requestBuilder = writeRequestBuilder();
-        writeRequestBuilderConsumer.accept(requestBuilder);
-        return write(requestBuilder.build());
-    }
-
     PlcWriteRequest.Builder writeRequestBuilder();
 
 }
diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryResponse.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryResponse.java
index 9c03dba..3cd64d6 100644
--- a/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryResponse.java
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/messages/PlcProprietaryResponse.java
@@ -18,6 +18,6 @@
  */
 package org.apache.plc4x.java.api.messages;
 
-public interface PlcProprietaryResponse<RESPONSE> extends PlcResponse {
-    RESPONSE getResponse();
+public interface PlcProprietaryResponse<T> extends PlcResponse {
+    T getResponse();
 }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
index 8433526..d88dee7 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnection.java
@@ -260,10 +260,11 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
 
     @Override
     public PlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, Collection<PlcSubscriptionHandle> handles) {
-        return register(consumer, handles.toArray(new PlcSubscriptionHandle[0]));
+        return register(consumer, handles);
     }
 
-    @Override
+    // TODO: figure out what this is
+    /*@Override
     public InternalPlcConsumerRegistration register(Consumer<PlcSubscriptionEvent> consumer, PlcSubscriptionHandle... handles) {
         Objects.requireNonNull(consumer);
         Objects.requireNonNull(handles);
@@ -297,7 +298,7 @@ public class AdsTcpPlcConnection extends AdsAbstractPlcConnection implements Plc
         getChannel().pipeline().get(Plc4x2AdsProtocol.class).addConsumer(adsDeviceNotificationRequestConsumer);
 
         return internalPlcConsumerRegistration;
-    }
+    }*/
 
     @Override
     public void unregister(PlcConsumerRegistration plcConsumerRegistration) {
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java
index bca72a5..ad56e01 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ManualPlc4XAdsTest.java
@@ -22,9 +22,7 @@ import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcSubscriber;
-import org.apache.plc4x.java.api.messages.PlcReadResponse;
-import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
-import org.apache.plc4x.java.api.messages.PlcUnsubscriptionResponse;
+import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.api.model.PlcConsumerRegistration;
 
 import java.util.Collection;
@@ -47,7 +45,8 @@ public class ManualPlc4XAdsTest {
 
             PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
 
-            CompletableFuture<PlcReadResponse> response = reader.read(builder -> builder.addItem("station", "Allgemein_S2.Station:BYTE"));
+            PlcReadRequest readRequest = reader.readRequestBuilder().addItem("station", "Allgemein_S2.Station:BYTE").build();
+            CompletableFuture<PlcReadResponse> response = reader.read(readRequest);
             PlcReadResponse readResponse = response.get();
             System.out.println("Response " + readResponse);
             Collection<Integer> stations = readResponse.getAllIntegers("station");
@@ -55,7 +54,8 @@ public class ManualPlc4XAdsTest {
 
             PlcSubscriber plcSubscriber = plcConnection.getSubscriber().orElseThrow(() -> new RuntimeException("Subscribe not available"));
 
-            CompletableFuture<PlcSubscriptionResponse> subscribeResponse = plcSubscriber.subscribe(builder -> builder.addChangeOfStateField("stationChange", "Allgemein_S2.Station:BYTE"));
+            PlcSubscriptionRequest subscriptionRequest = plcSubscriber.subscriptionRequestBuilder().addChangeOfStateField("stationChange", "Allgemein_S2.Station:BYTE").build();
+            CompletableFuture<PlcSubscriptionResponse> subscribeResponse = plcSubscriber.subscribe(subscriptionRequest);
             PlcSubscriptionResponse plcSubscriptionResponse = subscribeResponse.get();
 
             PlcConsumerRegistration plcConsumerRegistration = plcSubscriber.register(System.out::println, plcSubscriptionResponse.getSubscriptionHandles());
@@ -63,7 +63,8 @@ public class ManualPlc4XAdsTest {
             TimeUnit.SECONDS.sleep(5);
 
             plcSubscriber.unregister(plcConsumerRegistration);
-            CompletableFuture<PlcUnsubscriptionResponse> unsubscriptionResponse = plcSubscriber.unsubscribe(builder -> builder.addHandles(plcSubscriptionResponse.getSubscriptionHandles()));
+            PlcUnsubscriptionRequest unsubscriptionRequest = plcSubscriber.unsubscriptionRequestBuilder().addHandles(plcSubscriptionResponse.getSubscriptionHandles()).build();
+            CompletableFuture<PlcUnsubscriptionResponse> unsubscriptionResponse = plcSubscriber.unsubscribe(unsubscriptionRequest);
 
             unsubscriptionResponse
                 .get(5, TimeUnit.SECONDS);
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
index 9988da3..9b0a7f4 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
@@ -28,6 +28,7 @@ import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
 import org.apache.plc4x.java.ads.api.serial.AmsSerialAcknowledgeFrame;
 import org.apache.plc4x.java.ads.api.serial.AmsSerialFrame;
 import org.apache.plc4x.java.ads.api.serial.types.*;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
 import org.apache.plc4x.java.base.connection.SerialChannelFactory;
@@ -75,7 +76,8 @@ public class AdsSerialPlcConnectionTest {
     @Test
     public void testRead() throws Exception {
         prepareSerialSimulator();
-        CompletableFuture<PlcReadResponse> read = SUT.read(builder -> builder.addItem("test", "0/0:BYTE"));
+        PlcReadRequest request = SUT.readRequestBuilder().addItem("test", "0/0:BYTE").build();
+        CompletableFuture<PlcReadResponse> read = SUT.read(request);
         PlcReadResponse plcReadResponse = read.get(30, TimeUnit.SECONDS);
         assertNotNull(plcReadResponse);
     }
diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
index 370840d..401c872 100644
--- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
+++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/ManualPlc4XModbusTest.java
@@ -23,7 +23,9 @@ import org.apache.plc4x.java.PlcDriverManager;
 import org.apache.plc4x.java.api.connection.PlcConnection;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
+import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.base.util.HexUtil;
 
@@ -50,7 +52,8 @@ public class ManualPlc4XModbusTest {
             {
                 PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
 
-                PlcReadResponse readResponse = reader.read(builder -> builder.addItem("randomRegister", "register:7[3]")).get();
+                PlcReadRequest readRequest = reader.readRequestBuilder().addItem("randomRegister", "register:7[3]").build();
+                PlcReadResponse readResponse = reader.read(readRequest).get();
                 System.out.println("Response " + readResponse);
                 readResponse.getAllByteArrays("randomRegister").stream()
                     .map(HexUtil::toHex)
@@ -63,7 +66,8 @@ public class ManualPlc4XModbusTest {
                 PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
 
                 // Just dump the actual values
-                PlcReadResponse readResponse = reader.read(builder -> builder.addItem("randomRegister", "register:3[2]")).get();
+                PlcReadRequest readRequest = reader.readRequestBuilder().addItem("randomRegister", "register:3[2]").build();
+                PlcReadResponse readResponse = reader.read(readRequest).get();
                 System.out.println("Response " + readResponse);
                 Collection<Byte[]> randomRegisters = readResponse.getAllByteArrays("randomRegister");
                 randomRegisters.stream()
@@ -86,13 +90,14 @@ public class ManualPlc4XModbusTest {
                 PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
 
                 // Just dump the actual values
-                PlcReadResponse readResponse = reader.read(builder -> builder
+                PlcReadRequest readRequest = reader.readRequestBuilder()
                     .addItem("randomRegister1", "register:1[2]")
                     .addItem("randomRegister2", "register:10[3]")
                     .addItem("randomRegister3", "register:20[4]")
                     .addItem("randomRegister4", "register:30[5]")
                     .addItem("randomRegister5", "register:40[6]")
-                ).get();
+                    .build();
+                PlcReadResponse readResponse = reader.read(readRequest).get();
                 System.out.println("Response " + readResponse);
                 IntStream.range(1, 6).forEach(i -> {
                     Collection<Byte[]> randomRegisters = readResponse.getAllByteArrays("randomRegister" + i);
@@ -115,7 +120,8 @@ public class ManualPlc4XModbusTest {
             {
                 PlcReader reader = plcConnection.getReader().orElseThrow(() -> new RuntimeException("No Reader found"));
 
-                PlcReadResponse readResponse = reader.read(builder -> builder.addItem("randomCoil", "coil:1[9]")).get();
+                PlcReadRequest readRequest = reader.readRequestBuilder().addItem("randomCoil", "coil:1[9]").build();
+                PlcReadResponse readResponse = reader.read(readRequest).get();
                 System.out.println("Response " + readResponse);
                 readResponse.getAllBooleans("randomCoil").stream()
                     .map(hex -> "Coil Value: " + hex)
@@ -125,7 +131,8 @@ public class ManualPlc4XModbusTest {
             {
                 PlcWriter writer = plcConnection.getWriter().orElseThrow(() -> new RuntimeException("No Writer found"));
 
-                PlcWriteResponse writeResponse = writer.write(builder -> builder.addItem("randomCoilField", "coil:1", true)).get();
+                PlcWriteRequest writeRequest = writer.writeRequestBuilder().addItem("randomCoilField", "coil:1", true).build();
+                PlcWriteResponse writeResponse = writer.write(writeRequest).get();
                 System.out.println("Response " + writeResponse);
             }
         } catch (Exception e) {
diff --git a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
index 68c2183..519d4b9 100644
--- a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
+++ b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
@@ -24,6 +24,7 @@ import io.netty.channel.embedded.EmbeddedChannel;
 import io.netty.channel.jsc.JSerialCommDeviceAddress;
 import org.apache.commons.lang3.reflect.FieldUtils;
 import org.apache.commons.lang3.reflect.MethodUtils;
+import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
 import org.apache.plc4x.java.base.connection.SerialChannelFactory;
@@ -65,7 +66,8 @@ public class ModbusSerialPlcConnectionTest {
     @Test
     public void testRead() throws Exception {
         prepareSerialSimulator();
-        CompletableFuture<PlcReadResponse> read = SUT.read(builder -> builder.addItem("randomRead", "0/0"));
+        PlcReadRequest readRequest = SUT.readRequestBuilder().addItem("randomRead", "0/0").build();
+        CompletableFuture<PlcReadResponse> read = SUT.read(readRequest);
         PlcReadResponse plcReadResponse = read.get(30, TimeUnit.SECONDS);
         assertNotNull(plcReadResponse);
     }