You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/02/16 15:58:12 UTC

[incubator-plc4x] branch feature/Beckhoff_ADS_protocol updated: replace constructor with factory method

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

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


The following commit(s) were added to refs/heads/feature/Beckhoff_ADS_protocol by this push:
     new 9b81275  replace constructor with factory method
9b81275 is described below

commit 9b812751cc90a015b55b4501484c2a166e80fda3
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Feb 16 16:58:08 2018 +0100

    replace constructor with factory method
---
 .../java/ads/api/commands/ADSAbstractRequest.java  |  8 ++--
 .../java/ads/api/commands/ADSAbstractResponse.java |  8 ++--
 .../commands/ADSAddDeviceNotificationRequest.java  | 18 ++++++--
 .../commands/ADSAddDeviceNotificationResponse.java | 12 +++++-
 .../ADSDeleteDeviceNotificationRequest.java        | 18 ++++++--
 .../ADSDeleteDeviceNotificationResponse.java       | 12 +++++-
 .../api/commands/ADSDeviceNotificationRequest.java | 18 ++++++--
 .../commands/ADSDeviceNotificationResponse.java    |  2 +-
 .../ads/api/commands/ADSReadDeviceInfoRequest.java | 19 ++++++--
 .../api/commands/ADSReadDeviceInfoResponse.java    | 13 +++++-
 .../java/ads/api/commands/ADSReadRequest.java      | 18 ++++++--
 .../java/ads/api/commands/ADSReadResponse.java     | 12 +++++-
 .../java/ads/api/commands/ADSReadStateRequest.java | 19 ++++++--
 .../ads/api/commands/ADSReadStateResponse.java     | 12 +++++-
 .../java/ads/api/commands/ADSReadWriteRequest.java | 18 ++++++--
 .../ads/api/commands/ADSReadWriteResponse.java     | 12 +++++-
 .../ads/api/commands/ADSWriteControlRequest.java   | 18 ++++++--
 .../ads/api/commands/ADSWriteControlResponse.java  | 12 +++++-
 .../java/ads/api/commands/ADSWriteRequest.java     | 19 ++++++--
 .../java/ads/api/commands/ADSWriteResponse.java    | 12 +++++-
 .../java/ads/api/commands/UnknownCommand.java      |  5 ++-
 .../apache/plc4x/java/ads/netty/ADSProtocol.java   | 50 +++++++++++-----------
 .../plc4x/java/ads/netty/Plc4XADSProtocol.java     |  4 +-
 .../java/org/apache/plc4x/java/ads/ADSDumper.java  |  2 +-
 .../plc4x/java/ads/netty/ADSProtocolTest.java      | 36 ++++++++--------
 25 files changed, 279 insertions(+), 98 deletions(-)

diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractRequest.java
index 758a44b..5149f94 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractRequest.java
@@ -27,19 +27,19 @@ import org.apache.plc4x.java.ads.api.generic.types.Invoke;
 import org.apache.plc4x.java.ads.api.generic.types.State;
 
 public abstract class ADSAbstractRequest extends AMSTCPPaket {
-    public ADSAbstractRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
+    protected ADSAbstractRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
         super(amstcpHeader, amsHeader);
     }
 
-    public ADSAbstractRequest(AMSHeader amsHeader) {
+    protected ADSAbstractRequest(AMSHeader amsHeader) {
         super(amsHeader);
     }
 
-    public ADSAbstractRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
+    protected ADSAbstractRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, State.DEFAULT, invokeId);
     }
 
-    public ADSAbstractRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId) {
+    protected ADSAbstractRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, stateId, invokeId);
     }
 }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractResponse.java
index 2be453c..8c9acc4 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAbstractResponse.java
@@ -27,19 +27,19 @@ import org.apache.plc4x.java.ads.api.generic.types.Invoke;
 import org.apache.plc4x.java.ads.api.generic.types.State;
 
 public abstract class ADSAbstractResponse extends AMSTCPPaket {
-    public ADSAbstractResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
+    protected ADSAbstractResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
         super(amstcpHeader, amsHeader);
     }
 
-    public ADSAbstractResponse(AMSHeader amsHeader) {
+    protected ADSAbstractResponse(AMSHeader amsHeader) {
         super(amsHeader);
     }
 
-    public ADSAbstractResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
+    protected ADSAbstractResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, State.DEFAULT_RESPONSE, invokeId);
     }
 
-    public ADSAbstractResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId) {
+    protected ADSAbstractResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, State stateId, Invoke invokeId) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, stateId, invokeId);
     }
 }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationRequest.java
index 144f4b1..1b1807b 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationRequest.java
@@ -64,7 +64,7 @@ public class ADSAddDeviceNotificationRequest extends ADSAbstractRequest {
      */
     private final Reserved reserved = Reserved.INSTANCE;
 
-    public ADSAddDeviceNotificationRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
+    protected ADSAddDeviceNotificationRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
         super(amstcpHeader, amsHeader);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
@@ -74,7 +74,7 @@ public class ADSAddDeviceNotificationRequest extends ADSAbstractRequest {
         this.cycleTime = cycleTime;
     }
 
-    public ADSAddDeviceNotificationRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
+    protected ADSAddDeviceNotificationRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
         super(amsHeader);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
@@ -84,7 +84,7 @@ public class ADSAddDeviceNotificationRequest extends ADSAbstractRequest {
         this.cycleTime = cycleTime;
     }
 
-    public ADSAddDeviceNotificationRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
+    protected ADSAddDeviceNotificationRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, State.DEFAULT, invokeId);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
@@ -99,6 +99,18 @@ public class ADSAddDeviceNotificationRequest extends ADSAbstractRequest {
         return buildADSData(indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime, reserved);
     }
 
+    public static ADSAddDeviceNotificationRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
+        return new ADSAddDeviceNotificationRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime);
+    }
+
+    public static ADSAddDeviceNotificationRequest of(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
+        return new ADSAddDeviceNotificationRequest(amsHeader, indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime);
+    }
+
+    public static ADSAddDeviceNotificationRequest of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, Length length, TransmissionMode transmissionMode, MaxDelay maxDelay, CycleTime cycleTime) {
+        return new ADSAddDeviceNotificationRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime);
+    }
+
     public static class Reserved extends ByteValue {
 
         public static final int NUM_BYTES = 16;
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationResponse.java
index ce828a9..44ecb50 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSAddDeviceNotificationResponse.java
@@ -44,18 +44,26 @@ public class ADSAddDeviceNotificationResponse extends ADSAbstractResponse {
      */
     private final NotificationHandle notificationHandle;
 
-    public ADSAddDeviceNotificationResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, NotificationHandle notificationHandle) {
+    protected ADSAddDeviceNotificationResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, NotificationHandle notificationHandle) {
         super(amstcpHeader, amsHeader);
         this.result = result;
         this.notificationHandle = notificationHandle;
     }
 
-    public ADSAddDeviceNotificationResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, NotificationHandle notificationHandle) {
+    protected ADSAddDeviceNotificationResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, NotificationHandle notificationHandle) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.result = result;
         this.notificationHandle = notificationHandle;
     }
 
+    public static ADSAddDeviceNotificationResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, NotificationHandle notificationHandle) {
+        return new ADSAddDeviceNotificationResponse(amstcpHeader, amsHeader, result, notificationHandle);
+    }
+
+    public static ADSAddDeviceNotificationResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, NotificationHandle notificationHandle) {
+        return new ADSAddDeviceNotificationResponse(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, result, notificationHandle);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(result, notificationHandle);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationRequest.java
index 28e08fb..096247f 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationRequest.java
@@ -38,21 +38,33 @@ public class ADSDeleteDeviceNotificationRequest extends ADSAbstractRequest {
      */
     private final NotificationHandle notificationHandle;
 
-    public ADSDeleteDeviceNotificationRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, NotificationHandle notificationHandle) {
+    protected ADSDeleteDeviceNotificationRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, NotificationHandle notificationHandle) {
         super(amstcpHeader, amsHeader);
         this.notificationHandle = notificationHandle;
     }
 
-    public ADSDeleteDeviceNotificationRequest(AMSHeader amsHeader, NotificationHandle notificationHandle) {
+    protected ADSDeleteDeviceNotificationRequest(AMSHeader amsHeader, NotificationHandle notificationHandle) {
         super(amsHeader);
         this.notificationHandle = notificationHandle;
     }
 
-    public ADSDeleteDeviceNotificationRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, NotificationHandle notificationHandle) {
+    protected ADSDeleteDeviceNotificationRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, NotificationHandle notificationHandle) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.notificationHandle = notificationHandle;
     }
 
+    public static ADSDeleteDeviceNotificationRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, NotificationHandle notificationHandle) {
+        return new ADSDeleteDeviceNotificationRequest(amstcpHeader, amsHeader, notificationHandle);
+    }
+
+    public static ADSDeleteDeviceNotificationRequest of(AMSHeader amsHeader, NotificationHandle notificationHandle) {
+        return new ADSDeleteDeviceNotificationRequest(amsHeader, notificationHandle);
+    }
+
+    public static ADSDeleteDeviceNotificationRequest of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, NotificationHandle notificationHandle) {
+        return new ADSDeleteDeviceNotificationRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, notificationHandle);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(notificationHandle);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationResponse.java
index 9726b46..f3e4c11 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeleteDeviceNotificationResponse.java
@@ -38,16 +38,24 @@ public class ADSDeleteDeviceNotificationResponse extends ADSAbstractResponse {
      */
     private final Result result;
 
-    public ADSDeleteDeviceNotificationResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
+    protected ADSDeleteDeviceNotificationResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
         super(amstcpHeader, amsHeader);
         this.result = result;
     }
 
-    public ADSDeleteDeviceNotificationResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
+    protected ADSDeleteDeviceNotificationResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.result = result;
     }
 
+    public static ADSDeleteDeviceNotificationResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
+        return new ADSDeleteDeviceNotificationResponse(amstcpHeader, amsHeader, result);
+    }
+
+    public static ADSDeleteDeviceNotificationResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
+        return new ADSDeleteDeviceNotificationResponse(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, result);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(result);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationRequest.java
index ec870bf..978c4cd 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationRequest.java
@@ -53,27 +53,39 @@ public class ADSDeviceNotificationRequest extends ADSAbstractRequest {
      */
     private final List<AdsStampHeader> adsStampHeaders;
 
-    public ADSDeviceNotificationRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
+    protected ADSDeviceNotificationRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
         super(amstcpHeader, amsHeader);
         this.length = length;
         this.stamps = stamps;
         this.adsStampHeaders = adsStampHeaders;
     }
 
-    public ADSDeviceNotificationRequest(AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
+    protected ADSDeviceNotificationRequest(AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
         super(amsHeader);
         this.length = length;
         this.stamps = stamps;
         this.adsStampHeaders = adsStampHeaders;
     }
 
-    public ADSDeviceNotificationRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
+    protected ADSDeviceNotificationRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.length = length;
         this.stamps = stamps;
         this.adsStampHeaders = adsStampHeaders;
     }
 
+    public static ADSDeviceNotificationRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
+        return new ADSDeviceNotificationRequest(amstcpHeader, amsHeader, length, stamps, adsStampHeaders);
+    }
+
+    public static ADSDeviceNotificationRequest of(AMSHeader amsHeader, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
+        return new ADSDeviceNotificationRequest(amsHeader, length, stamps, adsStampHeaders);
+    }
+
+    public static ADSDeviceNotificationRequest of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Length length, Stamps stamps, List<AdsStampHeader> adsStampHeaders) {
+        return new ADSDeviceNotificationRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, length, stamps, adsStampHeaders);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(length, stamps, buildADSData(adsStampHeaders.toArray(new ByteReadable[adsStampHeaders.size()])));
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationResponse.java
index 8797cdc..ef8f3a1 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSDeviceNotificationResponse.java
@@ -27,7 +27,7 @@ import org.apache.plc4x.java.ads.api.generic.types.Command;
 @ADSCommandType(Command.ADS_Device_Notification)
 public class ADSDeviceNotificationResponse extends ADSAbstractResponse {
 
-    private ADSDeviceNotificationResponse() {
+    protected ADSDeviceNotificationResponse() {
         super(null, null);
         // There is no {@link ADSDeviceNotificationResponse} specified
     }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoRequest.java
index 221fc59..3244406 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoRequest.java
@@ -33,18 +33,31 @@ import org.apache.plc4x.java.ads.api.generic.types.Invoke;
  */
 @ADSCommandType(Command.ADS_Read_Device_Info)
 public class ADSReadDeviceInfoRequest extends ADSAbstractRequest {
-    public ADSReadDeviceInfoRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
+
+    protected ADSReadDeviceInfoRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
         super(amstcpHeader, amsHeader);
     }
 
-    public ADSReadDeviceInfoRequest(AMSHeader amsHeader) {
+    protected ADSReadDeviceInfoRequest(AMSHeader amsHeader) {
         super(amsHeader);
     }
 
-    public ADSReadDeviceInfoRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
+    protected ADSReadDeviceInfoRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
     }
 
+    public static ADSReadDeviceInfoRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
+        return new ADSReadDeviceInfoRequest(amstcpHeader, amsHeader);
+    }
+
+    public static ADSReadDeviceInfoRequest of(AMSHeader amsHeader) {
+        return new ADSReadDeviceInfoRequest(amsHeader);
+    }
+
+    public static ADSReadDeviceInfoRequest of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
+        return new ADSReadDeviceInfoRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
+    }
+
     @Override
     public ADSData getAdsData() {
         return ADSData.EMPTY;
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoResponse.java
index b5d104d..d780890 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadDeviceInfoResponse.java
@@ -53,7 +53,8 @@ public class ADSReadDeviceInfoResponse extends ADSAbstractResponse {
      */
     private final Device device;
 
-    public ADSReadDeviceInfoResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
+
+    protected ADSReadDeviceInfoResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
         super(amstcpHeader, amsHeader);
         this.result = result;
         this.majorVersion = majorVersion;
@@ -62,7 +63,7 @@ public class ADSReadDeviceInfoResponse extends ADSAbstractResponse {
         this.device = device;
     }
 
-    public ADSReadDeviceInfoResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
+    protected ADSReadDeviceInfoResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.result = result;
         this.majorVersion = majorVersion;
@@ -71,6 +72,14 @@ public class ADSReadDeviceInfoResponse extends ADSAbstractResponse {
         this.device = device;
     }
 
+    public static ADSReadDeviceInfoResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
+        return new ADSReadDeviceInfoResponse(amstcpHeader, amsHeader, result, majorVersion, minorVersion, version, device);
+    }
+
+    public static ADSReadDeviceInfoResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, MajorVersion majorVersion, MinorVersion minorVersion, Version version, Device device) {
+        return new ADSReadDeviceInfoResponse(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, result, majorVersion, minorVersion, version, device);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(result, majorVersion, minorVersion, version, device);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadRequest.java
index 009c6a4..f64d166 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadRequest.java
@@ -50,27 +50,39 @@ public class ADSReadRequest extends ADSAbstractRequest {
      */
     private final Length length;
 
-    public ADSReadRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
+    protected ADSReadRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
         super(amstcpHeader, amsHeader);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
         this.length = length;
     }
 
-    public ADSReadRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
+    protected ADSReadRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
         super(amsHeader);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
         this.length = length;
     }
 
-    public ADSReadRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
+    protected ADSReadRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
         this.length = length;
     }
 
+    public static ADSReadRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
+        return new ADSReadRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, length);
+    }
+
+    public static ADSReadRequest of(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
+        return new ADSReadRequest(amsHeader, indexGroup, indexOffset, length);
+    }
+
+    public static ADSReadRequest of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, Length length) {
+        return new ADSReadRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(indexGroup, indexOffset, length);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadResponse.java
index 8c5f1e1..91ee085 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadResponse.java
@@ -48,20 +48,28 @@ public class ADSReadResponse extends ADSAbstractResponse {
      */
     private final Data data;
 
-    public ADSReadResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
+    protected ADSReadResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
         super(amstcpHeader, amsHeader);
         this.result = result;
         this.length = length;
         this.data = data;
     }
 
-    public ADSReadResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, Length length, Data data) {
+    protected ADSReadResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, Length length, Data data) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.result = result;
         this.length = length;
         this.data = data;
     }
 
+    public static ADSReadResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
+        return new ADSReadResponse(amstcpHeader, amsHeader, result, length, data);
+    }
+
+    public static ADSReadResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, Length length, Data data) {
+        return new ADSReadResponse(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, result, length, data);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(result, length, data);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateRequest.java
index caf6422..1045cba 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateRequest.java
@@ -33,18 +33,31 @@ import org.apache.plc4x.java.ads.api.generic.types.Invoke;
  */
 @ADSCommandType(Command.ADS_Read_State)
 public class ADSReadStateRequest extends ADSAbstractRequest {
-    public ADSReadStateRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
+
+    protected ADSReadStateRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
         super(amstcpHeader, amsHeader);
     }
 
-    public ADSReadStateRequest(AMSHeader amsHeader) {
+    protected ADSReadStateRequest(AMSHeader amsHeader) {
         super(amsHeader);
     }
 
-    public ADSReadStateRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
+    protected ADSReadStateRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
     }
 
+    public static ADSReadStateRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader) {
+        return new ADSReadStateRequest(amstcpHeader, amsHeader);
+    }
+
+    public static ADSReadStateRequest of(AMSHeader amsHeader) {
+        return new ADSReadStateRequest(amsHeader);
+    }
+
+    public static ADSReadStateRequest of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId) {
+        return new ADSReadStateRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
+    }
+
     @Override
     public ADSData getAdsData() {
         return ADSData.EMPTY;
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateResponse.java
index 6a1e389..f552e25 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadStateResponse.java
@@ -38,16 +38,24 @@ public class ADSReadStateResponse extends ADSAbstractResponse {
      */
     private final Result result;
 
-    public ADSReadStateResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
+    protected ADSReadStateResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
         super(amstcpHeader, amsHeader);
         this.result = result;
     }
 
-    public ADSReadStateResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
+    protected ADSReadStateResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.result = result;
     }
 
+    public static ADSReadStateResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
+        return new ADSReadStateResponse(amstcpHeader, amsHeader, result);
+    }
+
+    public static ADSReadStateResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
+        return new ADSReadStateResponse(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, result);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(result);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteRequest.java
index 1d14035..e6245dd 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteRequest.java
@@ -56,7 +56,7 @@ public class ADSReadWriteRequest extends ADSAbstractRequest {
      */
     private final Data data;
 
-    public ADSReadWriteRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
+    protected ADSReadWriteRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
         super(amstcpHeader, amsHeader);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
@@ -65,7 +65,7 @@ public class ADSReadWriteRequest extends ADSAbstractRequest {
         this.data = data;
     }
 
-    public ADSReadWriteRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
+    protected ADSReadWriteRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
         super(amsHeader);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
@@ -74,7 +74,7 @@ public class ADSReadWriteRequest extends ADSAbstractRequest {
         this.data = data;
     }
 
-    public ADSReadWriteRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
+    protected ADSReadWriteRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
@@ -83,6 +83,18 @@ public class ADSReadWriteRequest extends ADSAbstractRequest {
         this.data = data;
     }
 
+    public static ADSReadWriteRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
+        return new ADSReadWriteRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, readLength, writeLength, data);
+    }
+
+    public static ADSReadWriteRequest of(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
+        return new ADSReadWriteRequest(amsHeader, indexGroup, indexOffset, readLength, writeLength, data);
+    }
+
+    public static ADSReadWriteRequest of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, ReadLength readLength, WriteLength writeLength, Data data) {
+        return new ADSReadWriteRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, readLength, writeLength, data);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(indexGroup, indexOffset, readLength, writeLength, data);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteResponse.java
index c587017..663d5de 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSReadWriteResponse.java
@@ -50,20 +50,28 @@ public class ADSReadWriteResponse extends ADSAbstractResponse {
      */
     private final Data data;
 
-    public ADSReadWriteResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
+    protected ADSReadWriteResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
         super(amstcpHeader, amsHeader);
         this.result = result;
         this.length = length;
         this.data = data;
     }
 
-    public ADSReadWriteResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, Length length, Data data) {
+    protected ADSReadWriteResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, Length length, Data data) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.result = result;
         this.length = length;
         this.data = data;
     }
 
+    public static ADSReadWriteResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result, Length length, Data data) {
+        return new ADSReadWriteResponse(amstcpHeader, amsHeader, result, length, data);
+    }
+
+    public static ADSReadWriteResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result, Length length, Data data) {
+        return new ADSReadWriteResponse(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, result, length, data);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(result, length, data);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlRequest.java
index fbc0110..40c6cee 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlRequest.java
@@ -55,7 +55,7 @@ public class ADSWriteControlRequest extends ADSAbstractRequest {
      */
     private final Data data;
 
-    public ADSWriteControlRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
+    protected ADSWriteControlRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
         super(amstcpHeader, amsHeader);
         this.adsState = adsState;
         this.deviceState = deviceState;
@@ -63,7 +63,7 @@ public class ADSWriteControlRequest extends ADSAbstractRequest {
         this.data = data;
     }
 
-    public ADSWriteControlRequest(AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
+    protected ADSWriteControlRequest(AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
         super(amsHeader);
         this.adsState = adsState;
         this.deviceState = deviceState;
@@ -71,7 +71,7 @@ public class ADSWriteControlRequest extends ADSAbstractRequest {
         this.data = data;
     }
 
-    public ADSWriteControlRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, ADSState adsState, DeviceState deviceState, Length length, Data data) {
+    protected ADSWriteControlRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, ADSState adsState, DeviceState deviceState, Length length, Data data) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.adsState = adsState;
         this.deviceState = deviceState;
@@ -79,6 +79,18 @@ public class ADSWriteControlRequest extends ADSAbstractRequest {
         this.data = data;
     }
 
+    public static ADSWriteControlRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
+        return new ADSWriteControlRequest(amstcpHeader, amsHeader, adsState, deviceState, length, data);
+    }
+
+    public static ADSWriteControlRequest of(AMSHeader amsHeader, ADSState adsState, DeviceState deviceState, Length length, Data data) {
+        return new ADSWriteControlRequest(amsHeader, adsState, deviceState, length, data);
+    }
+
+    public static ADSWriteControlRequest of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, ADSState adsState, DeviceState deviceState, Length length, Data data) {
+        return new ADSWriteControlRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, adsState, deviceState, length, data);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(adsState, deviceState, length, data);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlResponse.java
index 00cbc9c..19d3282 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteControlResponse.java
@@ -37,16 +37,24 @@ public class ADSWriteControlResponse extends ADSAbstractResponse {
      */
     private final Result result;
 
-    public ADSWriteControlResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
+    protected ADSWriteControlResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
         super(amstcpHeader, amsHeader);
         this.result = result;
     }
 
-    public ADSWriteControlResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
+    protected ADSWriteControlResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.result = result;
     }
 
+    public static ADSWriteControlResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
+        return new ADSWriteControlResponse(amstcpHeader, amsHeader, result);
+    }
+
+    public static ADSWriteControlResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
+        return new ADSWriteControlResponse(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, result);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(result);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteRequest.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteRequest.java
index e3ac538..e60eb42 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteRequest.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteRequest.java
@@ -53,7 +53,7 @@ public class ADSWriteRequest extends ADSAbstractRequest {
      */
     private final Data data;
 
-    public ADSWriteRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
+    protected ADSWriteRequest(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
         super(amstcpHeader, amsHeader);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
@@ -61,7 +61,7 @@ public class ADSWriteRequest extends ADSAbstractRequest {
         this.data = data;
     }
 
-    public ADSWriteRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
+    protected ADSWriteRequest(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
         super(amsHeader);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
@@ -69,7 +69,7 @@ public class ADSWriteRequest extends ADSAbstractRequest {
         this.data = data;
     }
 
-    public ADSWriteRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
+    protected ADSWriteRequest(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.indexGroup = indexGroup;
         this.indexOffset = indexOffset;
@@ -77,6 +77,18 @@ public class ADSWriteRequest extends ADSAbstractRequest {
         this.data = data;
     }
 
+    public static ADSWriteRequest of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
+        return new ADSWriteRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, length, data);
+    }
+
+    public static ADSWriteRequest of(AMSHeader amsHeader, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
+        return new ADSWriteRequest(amsHeader, indexGroup, indexOffset, length, data);
+    }
+
+    public static ADSWriteRequest of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, IndexGroup indexGroup, IndexOffset indexOffset, Length length, Data data) {
+        return new ADSWriteRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length, data);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(indexGroup, indexOffset, length, data);
@@ -91,4 +103,5 @@ public class ADSWriteRequest extends ADSAbstractRequest {
             ", data=" + data +
             "} " + super.toString();
     }
+
 }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteResponse.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteResponse.java
index cd6223a..9b2925b 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteResponse.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/ADSWriteResponse.java
@@ -38,16 +38,24 @@ public class ADSWriteResponse extends ADSAbstractResponse {
      */
     private final Result result;
 
-    public ADSWriteResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
+    protected ADSWriteResponse(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
         super(amstcpHeader, amsHeader);
         this.result = result;
     }
 
-    public ADSWriteResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
+    protected ADSWriteResponse(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
         super(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId);
         this.result = result;
     }
 
+    public static ADSWriteResponse of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, Result result) {
+        return new ADSWriteResponse(amstcpHeader, amsHeader, result);
+    }
+
+    public static ADSWriteResponse of(AMSNetId targetAmsNetId, AMSPort targetAmsPort, AMSNetId sourceAmsNetId, AMSPort sourceAmsPort, Invoke invokeId, Result result) {
+        return new ADSWriteResponse(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, result);
+    }
+
     @Override
     public ADSData getAdsData() {
         return buildADSData(result);
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
index a959d5e..d1e3aa9 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/api/commands/UnknownCommand.java
@@ -33,7 +33,7 @@ public class UnknownCommand extends AMSTCPPaket {
 
     final ByteBuf remainingBytes;
 
-    public UnknownCommand(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ByteBuf remainingBytes) {
+    protected UnknownCommand(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ByteBuf remainingBytes) {
         super(amstcpHeader, amsHeader);
         this.remainingBytes = remainingBytes;
     }
@@ -43,4 +43,7 @@ public class UnknownCommand extends AMSTCPPaket {
         return () -> remainingBytes;
     }
 
+    public static AMSTCPPaket of(AMSTCPHeader amstcpHeader, AMSHeader amsHeader, ByteBuf remainingBytes) {
+        return new UnknownCommand(amstcpHeader, amsHeader, remainingBytes);
+    }
 }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocol.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocol.java
index 37527e3..fc97723 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocol.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/ADSProtocol.java
@@ -82,20 +82,21 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPaket> {
         ByteBuf commandBuffer = byteBuf.readBytes((int) dataLength.getAsLong());
         AMSTCPHeader amstcpHeader = AMSTCPHeader.of(packetLength);
         AMSHeader amsHeader = AMSHeader.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, commandId, stateId, dataLength, errorCode, invoke);
+        final AMSTCPPaket amstcpPaket;
         switch (commandId) {
             case Invalid:
-                out.add(new UnknownCommand(amstcpHeader, amsHeader, commandBuffer));
+                amstcpPaket = UnknownCommand.of(amstcpHeader, amsHeader, commandBuffer);
                 break;
             case ADS_Read_Device_Info:
                 if (stateId.isRequest()) {
-                    out.add(new ADSReadDeviceInfoRequest(amstcpHeader, amsHeader));
+                    amstcpPaket = ADSReadDeviceInfoRequest.of(amstcpHeader, amsHeader);
                 } else {
                     Result result = Result.of(commandBuffer);
                     MajorVersion majorVersion = MajorVersion.of(commandBuffer);
                     MinorVersion minorVersion = MinorVersion.of(commandBuffer);
                     Version version = Version.of(commandBuffer);
                     Device device = Device.of(commandBuffer);
-                    out.add(new ADSReadDeviceInfoResponse(amstcpHeader, amsHeader, result, majorVersion, minorVersion, version, device));
+                    amstcpPaket = ADSReadDeviceInfoResponse.of(amstcpHeader, amsHeader, result, majorVersion, minorVersion, version, device);
                 }
                 break;
             case ADS_Read:
@@ -103,7 +104,7 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPaket> {
                     IndexGroup indexGroup = IndexGroup.of(commandBuffer);
                     IndexOffset indexOffset = IndexOffset.of(commandBuffer);
                     Length length = Length.of(commandBuffer);
-                    out.add(new ADSReadRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, length));
+                    amstcpPaket = ADSReadRequest.of(amstcpHeader, amsHeader, indexGroup, indexOffset, length);
                 } else {
                     Result result = Result.of(commandBuffer);
                     Length length = Length.of(commandBuffer);
@@ -113,7 +114,7 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPaket> {
                     byte[] dataToRead = new byte[(int) length.getAsLong()];
                     commandBuffer.readBytes(dataToRead);
                     Data data = Data.of(dataToRead);
-                    out.add(new ADSReadResponse(amstcpHeader, amsHeader, result, length, data));
+                    amstcpPaket = ADSReadResponse.of(amstcpHeader, amsHeader, result, length, data);
                 }
                 break;
             case ADS_Write:
@@ -127,26 +128,26 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPaket> {
                     byte[] dataToRead = new byte[(int) length.getAsLong()];
                     commandBuffer.readBytes(dataToRead);
                     Data data = Data.of(dataToRead);
-                    out.add(new ADSWriteRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, length, data));
+                    amstcpPaket = ADSWriteRequest.of(amstcpHeader, amsHeader, indexGroup, indexOffset, length, data);
                 } else {
                     Result result = Result.of(commandBuffer);
-                    out.add(new ADSWriteResponse(amstcpHeader, amsHeader, result));
+                    amstcpPaket = ADSWriteResponse.of(amstcpHeader, amsHeader, result);
                 }
                 break;
             case ADS_Read_State:
                 if (stateId.isRequest()) {
-                    out.add(new ADSReadStateRequest(amstcpHeader, amsHeader));
+                    amstcpPaket = ADSReadStateRequest.of(amstcpHeader, amsHeader);
                 } else {
                     Result result = Result.of(commandBuffer);
-                    out.add(new ADSReadStateResponse(amstcpHeader, amsHeader, result));
+                    amstcpPaket = ADSReadStateResponse.of(amstcpHeader, amsHeader, result);
                 }
                 break;
             case ADS_Write_Control:
                 if (stateId.isRequest()) {
                     ADSState adsState = ADSState.of(commandBuffer);
-                    LOGGER.info(""+adsState);
+                    LOGGER.info("" + adsState);
                     DeviceState deviceState = DeviceState.of(commandBuffer);
-                    LOGGER.info(""+deviceState);
+                    LOGGER.info("" + deviceState);
                     Length length = Length.of(commandBuffer);
                     if (length.getAsLong() > Integer.MAX_VALUE) {
                         throw new IllegalStateException("Overflow in datalength: " + length.getAsLong());
@@ -154,10 +155,10 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPaket> {
                     byte[] dataToRead = new byte[(int) length.getAsLong()];
                     commandBuffer.readBytes(dataToRead);
                     Data data = Data.of(dataToRead);
-                    out.add(new ADSWriteControlRequest(amstcpHeader, amsHeader, adsState, deviceState, length, data));
+                    amstcpPaket = ADSWriteControlRequest.of(amstcpHeader, amsHeader, adsState, deviceState, length, data);
                 } else {
                     Result result = Result.of(commandBuffer);
-                    out.add(new ADSWriteControlResponse(amstcpHeader, amsHeader, result));
+                    amstcpPaket = ADSWriteControlResponse.of(amstcpHeader, amsHeader, result);
                 }
                 break;
             case ADS_Add_Device_Notification:
@@ -169,20 +170,20 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPaket> {
                     MaxDelay maxDelay = MaxDelay.of(commandBuffer);
                     CycleTime cycleTime = CycleTime.of(commandBuffer);
                     commandBuffer.skipBytes(ADSAddDeviceNotificationRequest.Reserved.NUM_BYTES);
-                    out.add(new ADSAddDeviceNotificationRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime));
+                    amstcpPaket = ADSAddDeviceNotificationRequest.of(amstcpHeader, amsHeader, indexGroup, indexOffset, length, transmissionMode, maxDelay, cycleTime);
                 } else {
                     Result result = Result.of(commandBuffer);
                     NotificationHandle notificationHandle = NotificationHandle.of(commandBuffer);
-                    out.add(new ADSAddDeviceNotificationResponse(amstcpHeader, amsHeader, result, notificationHandle));
+                    amstcpPaket = ADSAddDeviceNotificationResponse.of(amstcpHeader, amsHeader, result, notificationHandle);
                 }
                 break;
             case ADS_Delete_Device_Notification:
                 if (stateId.isRequest()) {
                     NotificationHandle notificationHandle = NotificationHandle.of(commandBuffer);
-                    out.add(new ADSDeleteDeviceNotificationRequest(amstcpHeader, amsHeader, notificationHandle));
+                    amstcpPaket = ADSDeleteDeviceNotificationRequest.of(amstcpHeader, amsHeader, notificationHandle);
                 } else {
                     Result result = Result.of(commandBuffer);
-                    out.add(new ADSDeleteDeviceNotificationResponse(amstcpHeader, amsHeader, result));
+                    amstcpPaket = ADSDeleteDeviceNotificationResponse.of(amstcpHeader, amsHeader, result);
                 }
                 break;
             case ADS_Device_Notification:
@@ -219,9 +220,9 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPaket> {
                         AdsStampHeader adsStampHeader = AdsStampHeader.of(timeStamp, samples, adsNotificationSamples);
                         adsStampHeaders.add(adsStampHeader);
                     }
-                    out.add(new ADSDeviceNotificationRequest(amstcpHeader, amsHeader, length, stamps, adsStampHeaders));
+                    amstcpPaket = ADSDeviceNotificationRequest.of(amstcpHeader, amsHeader, length, stamps, adsStampHeaders);
                 } else {
-                    out.add(new UnknownCommand(amstcpHeader, amsHeader, commandBuffer));
+                    amstcpPaket = UnknownCommand.of(amstcpHeader, amsHeader, commandBuffer);
                 }
                 break;
             case ADS_Read_Write:
@@ -242,7 +243,7 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPaket> {
                     byte[] dataToRead = new byte[(int) readLength.getAsLong()];
                     commandBuffer.readBytes(dataToRead);
                     Data data = Data.of(dataToRead);
-                    out.add(new ADSReadWriteRequest(amstcpHeader, amsHeader, indexGroup, indexOffset, readLength, writeLength, data));
+                    amstcpPaket = ADSReadWriteRequest.of(amstcpHeader, amsHeader, indexGroup, indexOffset, readLength, writeLength, data);
                 } else {
                     Result result = Result.of(commandBuffer);
                     Length length = Length.of(commandBuffer);
@@ -252,14 +253,15 @@ public class ADSProtocol extends MessageToMessageCodec<ByteBuf, AMSTCPPaket> {
                     byte[] dataToRead = new byte[(int) length.getAsLong()];
                     commandBuffer.readBytes(dataToRead);
                     Data data = Data.of(dataToRead);
-                    out.add(new ADSReadWriteResponse(amstcpHeader, amsHeader, result, length, data));
+                    amstcpPaket = ADSReadWriteResponse.of(amstcpHeader, amsHeader, result, length, data);
                 }
                 break;
             case UNKNOWN:
-                out.add(new UnknownCommand(amstcpHeader, amsHeader, commandBuffer));
+            default:
+                amstcpPaket = UnknownCommand.of(amstcpHeader, amsHeader, commandBuffer);
         }
-        // TODO: change it so we only do call out.add only once and log this on trace
-        LOGGER.info("Set to out {}", out.get(0));
+        out.add(amstcpPaket);
+        LOGGER.trace("Set amstcpPaket {} to out", amstcpPaket);
         if (commandBuffer.readableBytes() > 0) {
             throw new IllegalStateException("Unread bytes left: " + commandBuffer.readableBytes());
         }
diff --git a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/Plc4XADSProtocol.java b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/Plc4XADSProtocol.java
index 32fd8b2..8a80d55 100644
--- a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/Plc4XADSProtocol.java
+++ b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/netty/Plc4XADSProtocol.java
@@ -115,7 +115,7 @@ public class Plc4XADSProtocol extends MessageToMessageCodec<AMSTCPPaket, PlcRequ
         byte[] bytes = byteArrayOutputStream.toByteArray();
         Length length = Length.of(bytes.length);
         Data data = Data.of(bytes);
-        AMSTCPPaket amstcpPaket = new ADSWriteRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length, data);
+        AMSTCPPaket amstcpPaket = ADSWriteRequest.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length, data);
         out.add(amstcpPaket);
     }
 
@@ -135,7 +135,7 @@ public class Plc4XADSProtocol extends MessageToMessageCodec<AMSTCPPaket, PlcRequ
         IndexGroup indexGroup = IndexGroup.of(adsAddress.getIndexGroup());
         IndexOffset indexOffset = IndexOffset.of(adsAddress.getIndexOffset());
         Length length = Length.of(readRequestItem.getSize());
-        AMSTCPPaket amstcpPaket = new ADSReadRequest(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length);
+        AMSTCPPaket amstcpPaket = ADSReadRequest.of(targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId, indexGroup, indexOffset, length);
         out.add(amstcpPaket);
     }
 
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ADSDumper.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ADSDumper.java
index ddd8d63..7846ba8 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ADSDumper.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/ADSDumper.java
@@ -55,7 +55,7 @@ public class ADSDumper {
 
             String randomString = RandomStringUtils.randomAscii(1024);
 
-            ADSWriteRequest adsWriteRequest = new ADSWriteRequest(
+            ADSWriteRequest adsWriteRequest = ADSWriteRequest.of(
                 AMSNetId.of("192.168.0.70.1.2"),
                 AMSPort.of(12),
                 AMSNetId.of("192.168.0.70.1.1"),
diff --git a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/netty/ADSProtocolTest.java b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/netty/ADSProtocolTest.java
index 60b7fb3..a6d12f2 100644
--- a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/netty/ADSProtocolTest.java
+++ b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/netty/ADSProtocolTest.java
@@ -60,23 +60,23 @@ public class ADSProtocolTest {
         Invoke invokeId = Invoke.of(15);
         Data data = Data.of("Hello World!".getBytes());
         return Stream.of(
-            new ADSAddDeviceNotificationRequest(
+            ADSAddDeviceNotificationRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 IndexGroup.of(1), IndexOffset.of(1), Length.of(1), TransmissionMode.of(1), MaxDelay.of(1), CycleTime.of(1)),
-            new ADSAddDeviceNotificationResponse(
+            ADSAddDeviceNotificationResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0),
                 NotificationHandle.of(0)
             ),
-            new ADSDeleteDeviceNotificationRequest(
+            ADSDeleteDeviceNotificationRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 NotificationHandle.of(0)
             ),
-            new ADSDeleteDeviceNotificationResponse(
+            ADSDeleteDeviceNotificationResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0)
             ),
-            new ADSDeviceNotificationRequest(
+            ADSDeviceNotificationRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 // TODO: must be calculated when using this constructor
                 Length.of(32),
@@ -90,10 +90,10 @@ public class ADSProtocolTest {
                     )
                 )
             ),
-            new ADSReadDeviceInfoRequest(
+            ADSReadDeviceInfoRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId
             ),
-            new ADSReadDeviceInfoResponse(
+            ADSReadDeviceInfoResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0),
                 MajorVersion.of((byte) 1),
@@ -104,26 +104,26 @@ public class ADSProtocolTest {
                     (byte) 9, (byte) 10, (byte) 11, (byte) 12, (byte) 13, (byte) 14, (byte) 15, (byte) 16
                 )
             ),
-            new ADSReadRequest(
+            ADSReadRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 IndexGroup.of(0),
                 IndexOffset.of(0),
                 Length.of(1)
             ),
-            new ADSReadResponse(
+            ADSReadResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0),
                 Length.of(data.getCalculatedLength()),
                 data
             ),
-            new ADSReadStateRequest(
+            ADSReadStateRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId
             ),
-            new ADSReadStateResponse(
+            ADSReadStateResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0)
             ),
-            new ADSReadWriteRequest(
+            ADSReadWriteRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 IndexGroup.of(0),
                 IndexOffset.of(0),
@@ -131,35 +131,35 @@ public class ADSProtocolTest {
                 WriteLength.of(data.getCalculatedLength()),
                 data
             ),
-            new ADSReadWriteResponse(
+            ADSReadWriteResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0),
                 Length.of(data.getCalculatedLength()),
                 data
             ),
-            new ADSWriteControlRequest(
+            ADSWriteControlRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 ADSState.of(0xaffe),
                 DeviceState.of(0xaffe),
                 Length.of(data.getCalculatedLength()),
                 data
             ),
-            new ADSWriteControlResponse(
+            ADSWriteControlResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0)
             ),
-            new ADSWriteRequest(
+            ADSWriteRequest.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 IndexGroup.of(0),
                 IndexOffset.of(0),
                 Length.of(data.getCalculatedLength()),
                 data
             ),
-            new ADSWriteResponse(
+            ADSWriteResponse.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Result.of(0)
             )/*,
-            new UnknownCommand(
+            UnknownCommand.of(
                 targetAmsNetId, targetAmsPort, sourceAmsNetId, sourceAmsPort, invokeId,
                 Unpooled.wrappedBuffer(new byte[]{42})
             )*/

-- 
To stop receiving notification emails like this one, please contact
sruehl@apache.org.