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 2021/07/02 15:09:32 UTC

[plc4x] branch develop updated: plc4j: removed the XmlSerializable interface

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

sruehl pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/plc4x.git


The following commit(s) were added to refs/heads/develop by this push:
     new 114db2d  plc4j: removed the XmlSerializable interface
114db2d is described below

commit 114db2d46cc92d49ba8252267e676a84c9ae3d46
Author: Sebastian Rühl <sr...@apache.org>
AuthorDate: Fri Jul 2 17:08:04 2021 +0200

    plc4j: removed the XmlSerializable interface
---
 .../org/apache/plc4x/java/ads/field/AdsField.java  |  4 +-
 .../plc4x/java/ads/field/DirectAdsField.java       | 22 ------
 .../plc4x/java/ads/field/DirectAdsStringField.java | 22 ------
 .../plc4x/java/ads/field/SymbolicAdsField.java     | 19 -----
 .../java/ads/field/SymbolicAdsStringField.java     |  9 ---
 .../plc4x/java/canopen/field/CANOpenField.java     |  4 +-
 .../java/canopen/field/CANOpenHeartbeatField.java  | 15 ----
 .../plc4x/java/canopen/field/CANOpenNMTField.java  | 15 ----
 .../plc4x/java/canopen/field/CANOpenPDOField.java  | 19 -----
 .../plc4x/java/canopen/field/CANOpenSDOField.java  | 23 ------
 .../plc4x/java/eip/readwrite/field/EipField.java   | 30 +-------
 .../apache/plc4x/java/mock/field/MockPlcValue.java |  5 --
 .../plc4x/java/modbus/field/ModbusField.java       | 22 +-----
 .../plc4x/java/s7/readwrite/field/S7Field.java     | 37 +---------
 .../java/s7/readwrite/field/S7StringField.java     | 10 ---
 .../java/spi/generation/WriteBufferXmlBased.java   |  2 +-
 .../java/spi/messages/DefaultPlcReadRequest.java   | 25 +------
 .../java/spi/messages/DefaultPlcReadResponse.java  | 26 +------
 .../messages/DefaultPlcSubscriptionRequest.java    | 10 +--
 .../messages/DefaultPlcSubscriptionResponse.java   |  9 +--
 .../messages/DefaultPlcUnsubscriptionRequest.java  | 10 +--
 .../messages/DefaultPlcUnsubscriptionResponse.java |  9 +--
 .../java/spi/messages/DefaultPlcWriteRequest.java  | 39 +---------
 .../java/spi/messages/DefaultPlcWriteResponse.java | 28 +------
 .../java/spi/messages/utils/ResponseItem.java      | 15 +---
 .../plc4x/java/spi/utils/XmlSerializable.java      | 32 --------
 .../plc4x/java/spi/values/PlcBigDecimal.java       |  5 --
 .../plc4x/java/spi/values/PlcBigInteger.java       |  5 --
 .../org/apache/plc4x/java/spi/values/PlcDATE.java  |  5 --
 .../plc4x/java/spi/values/PlcDATE_AND_TIME.java    |  5 --
 .../apache/plc4x/java/spi/values/PlcIECValue.java  |  8 --
 .../org/apache/plc4x/java/spi/values/PlcLTIME.java |  5 --
 .../org/apache/plc4x/java/spi/values/PlcList.java  | 16 ----
 .../apache/plc4x/java/spi/values/PlcSTRING.java    |  5 --
 .../apache/plc4x/java/spi/values/PlcStruct.java    | 20 -----
 .../org/apache/plc4x/java/spi/values/PlcTIME.java  |  5 --
 .../plc4x/java/spi/values/PlcTIME_OF_DAY.java      |  5 --
 .../plc4x/java/spi/values/PlcValueAdapter.java     |  4 +-
 .../internal/handlers/ApiResponseHandler.java      | 43 +++--------
 .../resources/protocols/ads/DriverTestsuite.xml    | 86 +++++++++++++---------
 .../resources/protocols/modbus/DriverTestsuite.xml | 80 +++++++++++---------
 .../resources/protocols/s7/DriverTestsuite.xml     | 37 ++++++----
 42 files changed, 155 insertions(+), 640 deletions(-)

diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/AdsField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/AdsField.java
index a5b2c25..ef3460e 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/AdsField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/AdsField.java
@@ -20,9 +20,9 @@ package org.apache.plc4x.java.ads.field;
 
 import org.apache.plc4x.java.ads.readwrite.types.AdsDataType;
 import org.apache.plc4x.java.api.model.PlcField;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
+import org.apache.plc4x.java.spi.utils.Serializable;
 
-public interface AdsField extends PlcField, XmlSerializable {
+public interface AdsField extends PlcField, Serializable {
 
     AdsDataType getAdsDataType();
 
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java
index c084f92..dd30aec 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsField.java
@@ -163,26 +163,4 @@ public class DirectAdsField implements AdsField {
         writeBuffer.popContext(getClass().getSimpleName());
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-        Element indexGroupElement = doc.createElement("indexGroup");
-        indexGroupElement.appendChild(doc.createTextNode(Long.toString(getIndexGroup())));
-        messageElement.appendChild(indexGroupElement);
-
-        Element indexOffsetElement = doc.createElement("indexOffset");
-        indexOffsetElement.appendChild(doc.createTextNode(Long.toString(getIndexOffset())));
-        messageElement.appendChild(indexOffsetElement);
-
-        Element numberOfElementsElement = doc.createElement("numberOfElements");
-        numberOfElementsElement.appendChild(doc.createTextNode(Integer.toString(getNumberOfElements())));
-        messageElement.appendChild(numberOfElementsElement);
-
-        Element datatypeElement = doc.createElement("dataType");
-        datatypeElement.appendChild(doc.createTextNode(getPlcDataType()));
-        messageElement.appendChild(datatypeElement);
-    }
-
 }
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsStringField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsStringField.java
index 9d80ca4..720fc7c 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsStringField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/DirectAdsStringField.java
@@ -117,26 +117,4 @@ public class DirectAdsStringField extends DirectAdsField implements AdsStringFie
         writeBuffer.popContext(getClass().getSimpleName());
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-        Element indexGroupElement = doc.createElement("indexGroup");
-        indexGroupElement.appendChild(doc.createTextNode(Long.toString(getIndexGroup())));
-        messageElement.appendChild(indexGroupElement);
-
-        Element indexOffsetElement = doc.createElement("indexOffset");
-        indexOffsetElement.appendChild(doc.createTextNode(Long.toString(getIndexOffset())));
-        messageElement.appendChild(indexOffsetElement);
-
-        Element numberOfElementsElement = doc.createElement("numberOfElements");
-        numberOfElementsElement.appendChild(doc.createTextNode(Integer.toString(getNumberOfElements())));
-        messageElement.appendChild(numberOfElementsElement);
-
-        Element datatypeElement = doc.createElement("dataType");
-        datatypeElement.appendChild(doc.createTextNode(getPlcDataType()));
-        messageElement.appendChild(datatypeElement);
-    }
-
 }
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsField.java
index 12a4ced..5e12ebc 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsField.java
@@ -129,23 +129,4 @@ public class SymbolicAdsField implements AdsField {
         writeBuffer.writeString("dataType", dataType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), dataType);
         writeBuffer.popContext(getClass().getSimpleName());
     }
-
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-
-        Element symbolicAddressElement = doc.createElement("symbolicAddress");
-        symbolicAddressElement.appendChild(doc.createTextNode(getSymbolicAddress()));
-        messageElement.appendChild(symbolicAddressElement);
-
-        Element numberOfElementsElement = doc.createElement("numberOfElements");
-        numberOfElementsElement.appendChild(doc.createTextNode(Integer.toString(getNumberOfElements())));
-        messageElement.appendChild(numberOfElementsElement);
-
-        Element datatypeElement = doc.createElement("dataType");
-        datatypeElement.appendChild(doc.createTextNode(getPlcDataType()));
-        messageElement.appendChild(datatypeElement);
-    }
 }
diff --git a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java
index bceacf9..776b51d 100644
--- a/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java
+++ b/plc4j/drivers/ads/src/main/java/org/apache/plc4x/java/ads/field/SymbolicAdsStringField.java
@@ -95,13 +95,4 @@ public class SymbolicAdsStringField extends SymbolicAdsField implements AdsStrin
         writeBuffer.writeInt("stringLength", 64, getStringLength());
         writeBuffer.popContext(getClass().getSimpleName());
     }
-
-    @Override
-    public void xmlSerialize(Element parent) {
-        super.xmlSerialize(parent);
-        Document doc = parent.getOwnerDocument();
-        Element byteOffsetElement = doc.createElement("stringLength");
-        byteOffsetElement.appendChild(doc.createTextNode(Integer.toString(getStringLength())));
-        parent.getFirstChild().appendChild(byteOffsetElement);
-    }
 }
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenField.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenField.java
index 443e327..09849a1 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenField.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenField.java
@@ -20,14 +20,14 @@ package org.apache.plc4x.java.canopen.field;
 
 import org.apache.plc4x.java.api.exceptions.PlcInvalidFieldException;
 import org.apache.plc4x.java.api.model.PlcField;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
+import org.apache.plc4x.java.spi.utils.Serializable;
 
 import java.util.regex.Pattern;
 
 /**
  * Generic field type which defines node address and address pattern (index/subindex).
  */
-public abstract class CANOpenField implements PlcField, XmlSerializable {
+public abstract class CANOpenField implements PlcField, Serializable {
 
     public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?:(0[xX](?<indexHex>[0-9a-fA-F]+))|(?<index>\\d+))/(?:(0[xX](?<subIndexHex>[0-9a-fA-F]+))|(?<subIndex>\\d+)):(?<canDataType>\\w+)(\\[(?<numberOfElements>\\d)])?");
     public static final Pattern NODE_PATTERN = Pattern.compile("(?<nodeId>\\d+)");
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenHeartbeatField.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenHeartbeatField.java
index 501150f..180cd1c 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenHeartbeatField.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenHeartbeatField.java
@@ -76,19 +76,4 @@ public class CANOpenHeartbeatField extends CANOpenField implements CANOpenSubscr
         
         writeBuffer.popContext(getClass().getSimpleName());
     }
-
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-
-        Element serviceElement = doc.createElement("service");
-        serviceElement.appendChild(doc.createTextNode(getService().name()));
-        messageElement.appendChild(serviceElement);
-
-        Element nodeElement = doc.createElement("node");
-        nodeElement.appendChild(doc.createTextNode(Integer.toString(getNodeId())));
-        messageElement.appendChild(nodeElement);
-    }
 }
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenNMTField.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenNMTField.java
index 9bff00d..abbbd11 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenNMTField.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenNMTField.java
@@ -77,19 +77,4 @@ public class CANOpenNMTField extends CANOpenField implements CANOpenSubscription
 
         writeBuffer.popContext(getClass().getSimpleName());
     }
-
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-
-        Element serviceElement = doc.createElement("service");
-        serviceElement.appendChild(doc.createTextNode(getService().name()));
-        messageElement.appendChild(serviceElement);
-
-        Element nodeElement = doc.createElement("node");
-        nodeElement.appendChild(doc.createTextNode(Integer.toString(getNodeId())));
-        messageElement.appendChild(nodeElement);
-    }
 }
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenPDOField.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenPDOField.java
index d15d155..b24bb10 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenPDOField.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenPDOField.java
@@ -96,23 +96,4 @@ public class CANOpenPDOField extends CANOpenField implements CANOpenSubscription
 
         writeBuffer.popContext(getClass().getSimpleName());
     }
-
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-
-        Element serviceElement = doc.createElement("service");
-        serviceElement.appendChild(doc.createTextNode(service.name()));
-        messageElement.appendChild(serviceElement);
-
-        Element nodeElement = doc.createElement("node");
-        nodeElement.appendChild(doc.createTextNode(Integer.toString(getNodeId())));
-        messageElement.appendChild(nodeElement);
-
-        Element dataType = doc.createElement("dataType");
-        dataType.appendChild(doc.createTextNode(getCanOpenDataType().name()));
-        messageElement.appendChild(dataType);
-    }
 }
diff --git a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenSDOField.java b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenSDOField.java
index 8745977..85ffbeb 100644
--- a/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenSDOField.java
+++ b/plc4j/drivers/canopen/src/main/java/org/apache/plc4x/java/canopen/field/CANOpenSDOField.java
@@ -120,27 +120,4 @@ public class CANOpenSDOField extends CANOpenField {
         writeBuffer.popContext(getClass().getSimpleName());
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-
-        Element blockNumberElement = doc.createElement("node");
-        blockNumberElement.appendChild(doc.createTextNode(Integer.toString(getNodeId())));
-        messageElement.appendChild(blockNumberElement);
-
-        Element indexElement = doc.createElement("index");
-        indexElement.appendChild(doc.createTextNode(Integer.toString(getIndex())));
-        messageElement.appendChild(indexElement);
-
-        Element subIndexElement = doc.createElement("subIndex");
-        subIndexElement.appendChild(doc.createTextNode(Integer.toString(getSubIndex())));
-        messageElement.appendChild(subIndexElement);
-
-        Element dataType = doc.createElement("dataType");
-        dataType.appendChild(doc.createTextNode(getCanOpenDataType().name()));
-        messageElement.appendChild(dataType);
-    }
-
 }
diff --git a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java
index 5479a53..6c87ce7 100644
--- a/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java
+++ b/plc4j/drivers/eip/src/main/java/org/apache/plc4x/java/eip/readwrite/field/EipField.java
@@ -22,15 +22,13 @@ import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.eip.readwrite.types.CIPDataTypeCode;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
+import org.apache.plc4x.java.spi.utils.Serializable;
 
 import java.nio.charset.StandardCharsets;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-public class EipField implements PlcField, XmlSerializable {
+public class EipField implements PlcField, Serializable {
 
     private static final Pattern ADDRESS_PATTERN =
         Pattern.compile("^%(?<tag>[a-zA-Z_.0-9]+\\[?[0-9]*\\]?):?(?<dataType>[A-Z]*):?(?<elementNb>[0-9]*)");
@@ -149,32 +147,10 @@ public class EipField implements PlcField, XmlSerializable {
         writeBuffer.writeString("type", type.name().getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), type.name());
         writeBuffer.writeInt("elementNb", 64, elementNb);
         // TODO: remove this (not language agnostic)
-        String defaultJavaType= (type == null ? Object.class : getDefaultJavaType()).getName();
+        String defaultJavaType = (type == null ? Object.class : getDefaultJavaType()).getName();
         writeBuffer.writeString("defaultJavaType", defaultJavaType.getBytes(StandardCharsets.UTF_8).length * 8, StandardCharsets.UTF_8.name(), defaultJavaType);
 
         writeBuffer.popContext(getClass().getSimpleName());
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-
-        Element blockNumberElement = doc.createElement("node");
-        blockNumberElement.appendChild(doc.createTextNode(tag));
-        messageElement.appendChild(blockNumberElement);
-
-        Element indexElement = doc.createElement("type");
-        indexElement.appendChild(doc.createTextNode(type == null ? "" : type.name()));
-        messageElement.appendChild(indexElement);
-
-        Element subIndexElement = doc.createElement("elementNb");
-        subIndexElement.appendChild(doc.createTextNode(Integer.toString(elementNb)));
-        messageElement.appendChild(subIndexElement);
-
-        Element dataType = doc.createElement("defaultJavaType");
-        dataType.appendChild(doc.createTextNode((type == null ? Object.class : getDefaultJavaType()).getName()));
-        messageElement.appendChild(dataType);
-    }
 }
diff --git a/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockPlcValue.java b/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockPlcValue.java
index 43d450e..fed09de 100644
--- a/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockPlcValue.java
+++ b/plc4j/drivers/mock/src/main/java/org/apache/plc4x/java/mock/field/MockPlcValue.java
@@ -42,9 +42,4 @@ public class MockPlcValue extends PlcValueAdapter {
         throw new PlcNotImplementedException("Not implemented");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        throw new PlcNotImplementedException("Not implemented");
-    }
-
 }
diff --git a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
index e822aa5..896a8fa 100644
--- a/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
+++ b/plc4j/drivers/modbus/src/main/java/org/apache/plc4x/java/modbus/field/ModbusField.java
@@ -24,7 +24,7 @@ import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.modbus.readwrite.types.*;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
+import org.apache.plc4x.java.spi.utils.Serializable;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 
@@ -32,7 +32,7 @@ import java.nio.charset.StandardCharsets;
 import java.util.Objects;
 import java.util.regex.Pattern;
 
-public abstract class ModbusField implements PlcField, XmlSerializable {
+public abstract class ModbusField implements PlcField, Serializable {
 
     public static final Pattern ADDRESS_PATTERN = Pattern.compile("(?<address>\\d+)(:(?<datatype>[a-zA-Z_]+))?(\\[(?<quantity>\\d+)])?");
     public static final Pattern FIXED_DIGIT_MODBUS_PATTERN = Pattern.compile("(?<address>\\d{4,5})?(:(?<datatype>[a-zA-Z_]+))?(\\[(?<quantity>\\d+)])?");
@@ -140,22 +140,4 @@ public abstract class ModbusField implements PlcField, XmlSerializable {
         writeBuffer.popContext(getClass().getSimpleName());
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-        Element addressElement = doc.createElement("address");
-        addressElement.appendChild(doc.createTextNode(Integer.toString(getAddress())));
-        messageElement.appendChild(addressElement);
-
-        Element quantityElement = doc.createElement("numberOfElements");
-        quantityElement.appendChild(doc.createTextNode(Integer.toString(getNumberOfElements())));
-        messageElement.appendChild(quantityElement);
-
-        Element datatypeElement = doc.createElement("dataType");
-        datatypeElement.appendChild(doc.createTextNode(getPlcDataType()));
-        messageElement.appendChild(datatypeElement);
-    }
-
 }
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
index 68ff4f2..53ba02a 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7Field.java
@@ -35,9 +35,7 @@ import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.ReadBuffer;
 import org.apache.plc4x.java.spi.generation.ReadBufferByteBased;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
+import org.apache.plc4x.java.spi.utils.Serializable;
 
 import java.nio.charset.StandardCharsets;
 import java.time.LocalDate;
@@ -47,7 +45,7 @@ import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class S7Field implements PlcField, XmlSerializable {
+public class S7Field implements PlcField, Serializable {
 
     //byteOffset theoretically can reach up to 2097151 ... see checkByteOffset() below --> 7digits
     private static final Pattern ADDRESS_PATTERN =
@@ -377,35 +375,4 @@ public class S7Field implements PlcField, XmlSerializable {
         writeBuffer.popContext(getClass().getSimpleName());
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement(getClass().getSimpleName());
-        parent.appendChild(messageElement);
-
-        Element memoryAreaElement = doc.createElement("memoryArea");
-        memoryAreaElement.appendChild(doc.createTextNode(getMemoryArea().name()));
-        messageElement.appendChild(memoryAreaElement);
-
-        Element blockNumberElement = doc.createElement("blockNumber");
-        blockNumberElement.appendChild(doc.createTextNode(Integer.toString(getBlockNumber())));
-        messageElement.appendChild(blockNumberElement);
-
-        Element byteOffsetElement = doc.createElement("byteOffset");
-        byteOffsetElement.appendChild(doc.createTextNode(Integer.toString(getByteOffset())));
-        messageElement.appendChild(byteOffsetElement);
-
-        Element bitOffsetElement = doc.createElement("bitOffset");
-        bitOffsetElement.appendChild(doc.createTextNode(Integer.toString(getBitOffset())));
-        messageElement.appendChild(bitOffsetElement);
-
-        Element numElementsElement = doc.createElement("numElements");
-        numElementsElement.appendChild(doc.createTextNode(Integer.toString(getNumberOfElements())));
-        messageElement.appendChild(numElementsElement);
-
-        Element dataTypeElement = doc.createElement("dataType");
-        dataTypeElement.appendChild(doc.createTextNode(getDataType().name()));
-        messageElement.appendChild(dataTypeElement);
-    }
-
 }
diff --git a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7StringField.java b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7StringField.java
index de9276e..d74cc31 100644
--- a/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7StringField.java
+++ b/plc4j/drivers/s7/src/main/java/org/apache/plc4x/java/s7/readwrite/field/S7StringField.java
@@ -65,14 +65,4 @@ public class S7StringField extends S7Field {
         writeBuffer.popContext(getClass().getSimpleName());
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        super.xmlSerialize(parent);
-
-        Document doc = parent.getOwnerDocument();
-        Element byteOffsetElement = doc.createElement("stringLength");
-        byteOffsetElement.appendChild(doc.createTextNode(Integer.toString(getStringLength())));
-        parent.getFirstChild().appendChild(byteOffsetElement);
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferXmlBased.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferXmlBased.java
index 14436e1..2379298 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferXmlBased.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/generation/WriteBufferXmlBased.java
@@ -215,7 +215,7 @@ public class WriteBufferXmlBased implements WriteBuffer, BufferCommons {
 
         String context = stack.pop();
         if (!context.equals(logicalName)) {
-            throw new PlcRuntimeException("Unexpected pop context '" + context + '\'');
+            throw new PlcRuntimeException("Unexpected pop context '" + context + '\''+ ". Expected '"+logicalName+ '\'');
         }
         if (stack.isEmpty()) {
             try {
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadRequest.java
index 715d5e1..f0317af 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadRequest.java
@@ -29,22 +29,18 @@ import org.apache.plc4x.java.spi.connection.PlcFieldHandler;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 
 import java.util.LinkedHashMap;
 import java.util.LinkedHashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
-import java.util.TreeMap;
 import java.util.concurrent.CompletableFuture;
 import java.util.function.Supplier;
 import java.util.stream.Collectors;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class DefaultPlcReadRequest implements PlcReadRequest, PlcFieldRequest, XmlSerializable {
+public class DefaultPlcReadRequest implements PlcReadRequest, PlcFieldRequest, Serializable {
 
     private final PlcReader reader;
     // This is intentionally a linked hash map in order to keep the order of how elements were added.
@@ -131,25 +127,6 @@ public class DefaultPlcReadRequest implements PlcReadRequest, PlcFieldRequest, X
         writeBuffer.popContext("PlcReadRequest");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement("PlcReadRequest");
-        Element fieldsElement = doc.createElement("fields");
-        messageElement.appendChild(fieldsElement);
-        for (Map.Entry<String, PlcField> fieldEntry : fields.entrySet()) {
-            String fieldName = fieldEntry.getKey();
-            Element fieldNameElement = doc.createElement(fieldName);
-            fieldsElement.appendChild(fieldNameElement);
-            PlcField field = fieldEntry.getValue();
-            if(!(field instanceof XmlSerializable)) {
-                throw new RuntimeException("Error serializing. Field doesn't implement XmlSerializable");
-            }
-            ((XmlSerializable) field).xmlSerialize(fieldNameElement);
-        }
-        parent.appendChild(messageElement);
-    }
-
     public static class Builder implements PlcReadRequest.Builder {
 
         private final PlcReader reader;
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java
index e81dd1f..4173e56 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcReadResponse.java
@@ -28,13 +28,10 @@ import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
 import org.apache.plc4x.java.spi.values.PlcList;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.spi.values.PlcStruct;
 import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -44,7 +41,7 @@ import java.time.LocalTime;
 import java.util.*;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class DefaultPlcReadResponse implements PlcReadResponse, XmlSerializable {
+public class DefaultPlcReadResponse implements PlcReadResponse, Serializable {
 
     private final PlcReadRequest request;
     private final Map<String, ResponseItem<PlcValue>> values;
@@ -735,30 +732,11 @@ public class DefaultPlcReadResponse implements PlcReadResponse, XmlSerializable
             writeBuffer.pushContext(fieldName);
             ResponseItem<PlcValue> valueResponse = valueEntry.getValue();
             valueResponse.serialize(writeBuffer);
-            writeBuffer.pushContext(fieldName);
+            writeBuffer.popContext(fieldName);
         }
         writeBuffer.popContext("values");
 
         writeBuffer.popContext("PlcReadResponse");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement("PlcReadResponse");
-        if(request instanceof XmlSerializable) {
-            ((XmlSerializable) request).xmlSerialize(messageElement);
-        }
-        Element valuesElement = doc.createElement("values");
-        messageElement.appendChild(valuesElement);
-        for (Map.Entry<String, ResponseItem<PlcValue>> valueEntry : values.entrySet()) {
-            String fieldName = valueEntry.getKey();
-            Element fieldNameElement = doc.createElement(fieldName);
-            valuesElement.appendChild(fieldNameElement);
-            ResponseItem<PlcValue> valueResponse = valueEntry.getValue();
-            valueResponse.xmlSerialize(fieldNameElement);
-        }
-        parent.appendChild(messageElement);
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionRequest.java
index 0dece02..a4ebd18 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionRequest.java
@@ -29,14 +29,11 @@ import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
 import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.api.model.PlcSubscriptionField;
 import org.apache.plc4x.java.api.types.PlcSubscriptionType;
-import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.spi.connection.PlcFieldHandler;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
-import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
 import org.apache.plc4x.java.spi.model.DefaultPlcSubscriptionField;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
 import org.w3c.dom.Element;
 
 import java.time.Duration;
@@ -45,7 +42,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class DefaultPlcSubscriptionRequest implements PlcSubscriptionRequest, XmlSerializable {
+public class DefaultPlcSubscriptionRequest implements PlcSubscriptionRequest, Serializable {
 
     private final PlcSubscriber subscriber;
 
@@ -120,11 +117,6 @@ public class DefaultPlcSubscriptionRequest implements PlcSubscriptionRequest, Xm
         writeBuffer.popContext("PlcSubscriptionRequest");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
     public static class Builder implements PlcSubscriptionRequest.Builder {
 
         private final PlcSubscriber subscriber;
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java
index f56cd47..be4b938 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcSubscriptionResponse.java
@@ -30,12 +30,10 @@ import org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
 import org.apache.plc4x.java.api.model.PlcSubscriptionField;
 import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
 import org.w3c.dom.Element;
 
 import java.util.Collection;
@@ -43,7 +41,7 @@ import java.util.Map;
 import java.util.stream.Collectors;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class DefaultPlcSubscriptionResponse implements PlcSubscriptionResponse, PlcResponse, XmlSerializable {
+public class DefaultPlcSubscriptionResponse implements PlcSubscriptionResponse, PlcResponse, Serializable {
 
     private final PlcSubscriptionRequest request;
 
@@ -126,9 +124,4 @@ public class DefaultPlcSubscriptionResponse implements PlcSubscriptionResponse,
         writeBuffer.popContext("PlcSubscriptionResponse");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionRequest.java
index a85e5a4..c4ac023 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionRequest.java
@@ -28,17 +28,14 @@ import org.apache.plc4x.java.api.messages.PlcUnsubscriptionResponse;
 import org.apache.plc4x.java.api.model.PlcSubscriptionHandle;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
-import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
-import org.w3c.dom.Element;
 
 import java.util.*;
 import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class DefaultPlcUnsubscriptionRequest implements PlcUnsubscriptionRequest, PlcRequest, XmlSerializable {
+public class DefaultPlcUnsubscriptionRequest implements PlcUnsubscriptionRequest, PlcRequest, Serializable {
 
     private final PlcSubscriber subscriber;
 
@@ -75,11 +72,6 @@ public class DefaultPlcUnsubscriptionRequest implements PlcUnsubscriptionRequest
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
     public static class Builder implements PlcUnsubscriptionRequest.Builder {
 
         private final PlcSubscriber subscriber;
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionResponse.java
index 053784b..eb24945 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcUnsubscriptionResponse.java
@@ -26,11 +26,11 @@ import org.apache.plc4x.java.api.messages.PlcUnsubscriptionRequest;
 import org.apache.plc4x.java.api.messages.PlcUnsubscriptionResponse;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
+import org.apache.plc4x.java.spi.utils.Serializable;
 import org.w3c.dom.Element;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class DefaultPlcUnsubscriptionResponse implements PlcUnsubscriptionResponse, PlcResponse, XmlSerializable {
+public class DefaultPlcUnsubscriptionResponse implements PlcUnsubscriptionResponse, PlcResponse, Serializable {
 
     private final PlcUnsubscriptionRequest request;
 
@@ -49,9 +49,4 @@ public class DefaultPlcUnsubscriptionResponse implements PlcUnsubscriptionRespon
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
index e3df40c..028fc7d 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteRequest.java
@@ -24,21 +24,17 @@ import com.fasterxml.jackson.annotation.JsonProperty;
 import com.fasterxml.jackson.annotation.JsonTypeInfo;
 import org.apache.commons.lang3.tuple.Pair;
 import org.apache.commons.lang3.tuple.Triple;
-import org.apache.plc4x.java.api.messages.PlcFieldRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
 import org.apache.plc4x.java.spi.values.PlcList;
 import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.api.value.PlcValueHandler;
 import org.apache.plc4x.java.spi.connection.PlcFieldHandler;
 import org.apache.plc4x.java.spi.messages.utils.FieldValueItem;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 
 import java.nio.charset.StandardCharsets;
 import java.util.LinkedHashMap;
@@ -51,7 +47,7 @@ import java.util.concurrent.CompletableFuture;
 import java.util.stream.Collectors;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class DefaultPlcWriteRequest implements PlcWriteRequest, XmlSerializable {
+public class DefaultPlcWriteRequest implements PlcWriteRequest, Serializable {
 
     private final PlcWriter writer;
     private final LinkedHashMap<String, FieldValueItem> fields;
@@ -177,39 +173,6 @@ public class DefaultPlcWriteRequest implements PlcWriteRequest, XmlSerializable
         writeBuffer.popContext("PlcWriteRequest");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement("PlcWriteRequest");
-        Element fieldsElement = doc.createElement("fields");
-        messageElement.appendChild(fieldsElement);
-        for (Map.Entry<String, FieldValueItem> fieldEntry : fields.entrySet()) {
-            FieldValueItem fieldValueItem = fieldEntry.getValue();
-            String fieldName = fieldEntry.getKey();
-            Element fieldNameElement = doc.createElement(fieldName);
-            fieldsElement.appendChild(fieldNameElement);
-            PlcField field = fieldValueItem.getField();
-            if (!(field instanceof XmlSerializable)) {
-                throw new RuntimeException("Error serializing. Field doesn't implement XmlSerializable");
-            }
-            ((XmlSerializable) field).xmlSerialize(fieldNameElement);
-            final PlcValue value = fieldValueItem.getValue();
-            if (value instanceof PlcList) {
-                PlcList list = (PlcList) value;
-                for (PlcValue plcValue : list.getList()) {
-                    Element fieldValueElement = doc.createElement("value");
-                    fieldValueElement.setTextContent(plcValue.getString());
-                    fieldNameElement.appendChild(fieldValueElement);
-                }
-            } else {
-                Element fieldValueElement = doc.createElement("value");
-                fieldValueElement.setTextContent(value.getString());
-                fieldNameElement.appendChild(fieldValueElement);
-            }
-        }
-        parent.appendChild(messageElement);
-    }
-
     public static class Builder implements PlcWriteRequest.Builder {
 
         private final PlcWriter writer;
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
index 11e8610..76ac676 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/DefaultPlcWriteResponse.java
@@ -26,21 +26,16 @@ import org.apache.plc4x.java.api.messages.PlcWriteRequest;
 import org.apache.plc4x.java.api.messages.PlcWriteResponse;
 import org.apache.plc4x.java.api.model.PlcField;
 import org.apache.plc4x.java.api.types.PlcResponseCode;
-import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
-import org.apache.plc4x.java.spi.messages.utils.ResponseItem;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 
 import java.nio.charset.StandardCharsets;
 import java.util.Collection;
 import java.util.Map;
 
 @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS, property = "className")
-public class DefaultPlcWriteResponse implements PlcWriteResponse, XmlSerializable {
+public class DefaultPlcWriteResponse implements PlcWriteResponse, Serializable {
 
     private final PlcWriteRequest request;
     private final Map<String, PlcResponseCode> values;
@@ -79,7 +74,7 @@ public class DefaultPlcWriteResponse implements PlcWriteResponse, XmlSerializabl
     public void serialize(WriteBuffer writeBuffer) throws ParseException {
         writeBuffer.pushContext("PlcWriteResponse");
 
-        if(request instanceof Serializable) {
+        if (request instanceof Serializable) {
             ((Serializable) request).serialize(writeBuffer);
         }
         writeBuffer.pushContext("fields");
@@ -94,23 +89,4 @@ public class DefaultPlcWriteResponse implements PlcWriteResponse, XmlSerializabl
         writeBuffer.popContext("PlcWriteResponse");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element messageElement = doc.createElement("PlcWriteResponse");
-        if(request instanceof XmlSerializable) {
-            ((XmlSerializable) request).xmlSerialize(messageElement);
-        }
-        Element fieldsElement = doc.createElement("fields");
-        messageElement.appendChild(fieldsElement);
-        for (Map.Entry<String, PlcResponseCode> fieldEntry : values.entrySet()) {
-            String fieldName = fieldEntry.getKey();
-            final PlcResponseCode fieldResponseCode = fieldEntry.getValue();
-            Element fieldNameElement = doc.createElement(fieldName);
-            fieldNameElement.setAttribute("result", fieldResponseCode.name());
-            fieldsElement.appendChild(fieldNameElement);
-        }
-        parent.appendChild(messageElement);
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/utils/ResponseItem.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/utils/ResponseItem.java
index 7063985..0c2e374 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/utils/ResponseItem.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/messages/utils/ResponseItem.java
@@ -22,12 +22,10 @@ import org.apache.plc4x.java.api.types.PlcResponseCode;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
-import org.w3c.dom.Element;
 
 import java.nio.charset.StandardCharsets;
 
-public class ResponseItem<T> implements XmlSerializable {
+public class ResponseItem<T> implements Serializable {
 
     private final PlcResponseCode code;
     private final T value;
@@ -59,15 +57,4 @@ public class ResponseItem<T> implements XmlSerializable {
         writeBuffer.popContext("ResponseItem");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        parent.setAttribute("result", code.name());
-        if (value != null) {
-            if (!(value instanceof XmlSerializable)) {
-                throw new RuntimeException("Error serializing. Field value doesn't implement XmlSerializable");
-            }
-            ((XmlSerializable) value).xmlSerialize(parent);
-        }
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java
deleted file mode 100644
index f124fde..0000000
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/utils/XmlSerializable.java
+++ /dev/null
@@ -1,32 +0,0 @@
-/*
-Licensed to the Apache Software Foundation (ASF) under one
-or more contributor license agreements.  See the NOTICE file
-distributed with this work for additional information
-regarding copyright ownership.  The ASF licenses this file
-to you under the Apache License, Version 2.0 (the
-"License"); you may not use this file except in compliance
-with the License.  You may obtain a copy of the License at
-
-  http://www.apache.org/licenses/LICENSE-2.0
-
-Unless required by applicable law or agreed to in writing,
-software distributed under the License is distributed on an
-"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
-KIND, either express or implied.  See the License for the
-specific language governing permissions and limitations
-under the License.
-*/
-package org.apache.plc4x.java.spi.utils;
-
-import org.w3c.dom.Element;
-
-/**
- * @deprecated use the {@link Serializable} interface in combination with the {@link org.apache.plc4x.java.spi.generation.WriteBufferXmlBased} to produce xml.
- */
-@Deprecated
-public interface XmlSerializable extends Serializable {
-
-    @Deprecated
-    void xmlSerialize(Element parent);
-
-}
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java
index a6fa577..b8d2f28 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigDecimal.java
@@ -169,9 +169,4 @@ public class PlcBigDecimal extends PlcSimpleValue<BigDecimal> {
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java
index c37d05f..b43a9ad 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcBigInteger.java
@@ -169,9 +169,4 @@ public class PlcBigInteger extends PlcSimpleValue<BigInteger> {
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
index 96fe580..29479f8 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE.java
@@ -100,9 +100,4 @@ public class PlcDATE extends PlcSimpleValue<LocalDate> {
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
index 8f671e3..a4e98b1 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcDATE_AND_TIME.java
@@ -113,9 +113,4 @@ public class PlcDATE_AND_TIME extends PlcSimpleValue<LocalDateTime> {
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcIECValue.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcIECValue.java
index 0a36bbc..7c66c49 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcIECValue.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcIECValue.java
@@ -88,12 +88,4 @@ public abstract class PlcIECValue<T> extends PlcValueAdapter {
         writeBuffer.writeString(getClass().getSimpleName(), valueString.getBytes(StandardCharsets.UTF_8).length*8,StandardCharsets.UTF_8.name(),valueString);
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element plcValueElement = doc.createElement(getClass().getSimpleName());
-        plcValueElement.appendChild(doc.createTextNode(this.value.toString()));
-        parent.appendChild(plcValueElement);
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
index 6f06a04..6a90af5 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcLTIME.java
@@ -95,9 +95,4 @@ public class PlcLTIME extends PlcSimpleValue<Duration> {
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcList.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcList.java
index 625dfe3..67b22fb 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcList.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcList.java
@@ -25,9 +25,6 @@ import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 
 import java.util.Collections;
 import java.util.List;
@@ -104,17 +101,4 @@ public class PlcList extends PlcValueAdapter {
         writeBuffer.popContext("PlcList");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element plcValueElement = doc.createElement("PlcList");
-        parent.appendChild(plcValueElement);
-        for (PlcValue listItem : listItems) {
-            if (!(listItem instanceof XmlSerializable)) {
-                throw new PlcRuntimeException("Error serializing. List item doesn't implement XmlSerializable");
-            }
-            ((XmlSerializable) listItem).xmlSerialize(plcValueElement);
-        }
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java
index 67d5d07..96c9847 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcSTRING.java
@@ -236,9 +236,4 @@ public class PlcSTRING extends PlcSimpleValue<String> {
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcStruct.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcStruct.java
index c262eb2..a2f66a5 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcStruct.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcStruct.java
@@ -28,9 +28,6 @@ import org.apache.plc4x.java.api.value.PlcValue;
 import org.apache.plc4x.java.spi.generation.ParseException;
 import org.apache.plc4x.java.spi.generation.WriteBuffer;
 import org.apache.plc4x.java.spi.utils.Serializable;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 
 import java.util.Collections;
 import java.util.Map;
@@ -105,21 +102,4 @@ public class PlcStruct extends PlcValueAdapter {
         writeBuffer.popContext("PlcStruct");
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        Document doc = parent.getOwnerDocument();
-        Element plcValueElement = doc.createElement("PlcStruct");
-        parent.appendChild(plcValueElement);
-        for (Map.Entry<String, PlcValue> entry : map.entrySet()) {
-            String fieldName = entry.getKey();
-            Element fieldElement = doc.createElement(fieldName);
-            plcValueElement.appendChild(fieldElement);
-            PlcValue fieldValue = entry.getValue();
-            if (!(fieldValue instanceof XmlSerializable)) {
-                throw new PlcRuntimeException("Error serializing. List item doesn't implement XmlSerializable");
-            }
-            ((XmlSerializable) fieldValue).xmlSerialize(fieldElement);
-        }
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
index 76f83da..28e4681 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME.java
@@ -90,9 +90,4 @@ public class PlcTIME extends PlcSimpleValue<Duration> {
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
index 3ff2da4..f9225a2 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcTIME_OF_DAY.java
@@ -87,9 +87,4 @@ public class PlcTIME_OF_DAY extends PlcSimpleValue<LocalTime> {
         // TODO: Implement
     }
 
-    @Override
-    public void xmlSerialize(Element parent) {
-        // TODO: Implement
-    }
-
 }
diff --git a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueAdapter.java b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueAdapter.java
index 1995c20..cf785ee 100644
--- a/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueAdapter.java
+++ b/plc4j/spi/src/main/java/org/apache/plc4x/java/spi/values/PlcValueAdapter.java
@@ -21,7 +21,7 @@ package org.apache.plc4x.java.spi.values;
 import com.fasterxml.jackson.annotation.JsonIgnore;
 import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
 import org.apache.plc4x.java.api.value.PlcValue;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
+import org.apache.plc4x.java.spi.utils.Serializable;
 
 import java.math.BigDecimal;
 import java.math.BigInteger;
@@ -33,7 +33,7 @@ import java.util.List;
 import java.util.Map;
 import java.util.Set;
 
-public abstract class PlcValueAdapter implements PlcValue, XmlSerializable {
+public abstract class PlcValueAdapter implements PlcValue, Serializable {
 
     @Override
     public Object getObject() {
diff --git a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/handlers/ApiResponseHandler.java b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/handlers/ApiResponseHandler.java
index c657150..8035d35 100644
--- a/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/handlers/ApiResponseHandler.java
+++ b/plc4j/utils/test-utils/src/main/java/org/apache/plc4x/test/driver/internal/handlers/ApiResponseHandler.java
@@ -20,23 +20,14 @@ package org.apache.plc4x.test.driver.internal.handlers;
 
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.api.messages.PlcResponse;
-import org.apache.plc4x.java.spi.utils.XmlSerializable;
+import org.apache.plc4x.java.spi.generation.ParseException;
+import org.apache.plc4x.java.spi.generation.WriteBufferXmlBased;
+import org.apache.plc4x.java.spi.utils.Serializable;
 import org.apache.plc4x.test.driver.exceptions.DriverTestsuiteException;
 import org.apache.plc4x.test.driver.internal.utils.Synchronizer;
 import org.apache.plc4x.test.driver.internal.validator.ApiValidator;
 import org.dom4j.Element;
 
-import javax.xml.XMLConstants;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.transform.OutputKeys;
-import javax.xml.transform.Transformer;
-import javax.xml.transform.TransformerException;
-import javax.xml.transform.TransformerFactory;
-import javax.xml.transform.dom.DOMSource;
-import javax.xml.transform.stream.StreamResult;
-import java.io.StringWriter;
 import java.util.concurrent.TimeUnit;
 
 public class ApiResponseHandler {
@@ -67,34 +58,18 @@ public class ApiResponseHandler {
 
         // Reset the future.
         synchronizer.responseFuture = null;
-        final String serializedResponse = serializeToXmlString((XmlSerializable) plcResponse);
+        final String serializedResponse = serializeToXmlString((Serializable) plcResponse);
         ApiValidator.validateApiMessage(payload, serializedResponse);
     }
 
-    private String serializeToXmlString(XmlSerializable value) {
+    private String serializeToXmlString(Serializable value) {
+        WriteBufferXmlBased writeBuffer = new WriteBufferXmlBased();
         try {
-            // TODO: replace with language agnostic lookup
-            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
-            DocumentBuilder builder = dbf.newDocumentBuilder();
-            org.w3c.dom.Document doc = builder.newDocument();
-            org.w3c.dom.Element root = doc.createElement("root");
-            doc.appendChild(root);
-            value.xmlSerialize(root);
-            DOMSource domSource = new DOMSource(doc.getDocumentElement().getFirstChild());
-            StringWriter writer = new StringWriter();
-            StreamResult result = new StreamResult(writer);
-            TransformerFactory tf = TransformerFactory.newInstance();
-            tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, ""); // Compliant
-            tf.setAttribute(XMLConstants.ACCESS_EXTERNAL_STYLESHEET, ""); // Compliant
-            Transformer transformer = tf.newTransformer();
-            transformer.setOutputProperty(OutputKeys.INDENT, "yes");
-            transformer.setOutputProperty("{http://xml.apache.org/xslt}indent-amount", "2");
-            transformer.setOutputProperty("omit-xml-declaration", "yes");
-            transformer.transform(domSource, result);
-            return writer.toString();
-        } catch (ParserConfigurationException | TransformerException e) {
+            value.serialize(writeBuffer);
+        } catch (ParseException e) {
             throw new PlcRuntimeException(e);
         }
+        return writeBuffer.getXmlString();
     }
 
 }
diff --git a/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml b/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml
index c44d823..eb7689a 100644
--- a/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml
+++ b/protocols/ads/src/test/resources/protocols/ads/DriverTestsuite.xml
@@ -194,17 +194,20 @@
             <fields>
               <hurz>
                 <DirectAdsField>
-                  <indexGroup>4040</indexGroup>
-                  <indexOffset>8</indexOffset>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>BOOL</dataType>
+                  <indexGroup dataType="int" bitLength="64">4040</indexGroup>
+                  <indexOffset dataType="int" bitLength="64">8</indexOffset>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">BOOL</dataType>
                 </DirectAdsField>
               </hurz>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz result="OK">
-              <PlcBOOL>true</PlcBOOL>
+            <hurz>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+              </ResponseItem>
             </hurz>
           </values>
         </PlcReadResponse>
@@ -395,28 +398,34 @@
             <fields>
               <hurz1>
                 <DirectAdsField>
-                  <indexGroup>4040</indexGroup>
-                  <indexOffset>8</indexOffset>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>BOOL</dataType>
+                  <indexGroup dataType="int" bitLength="64">4040</indexGroup>
+                  <indexOffset dataType="int" bitLength="64">8</indexOffset>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">BOOL</dataType>
                 </DirectAdsField>
               </hurz1>
               <hurz2>
                 <DirectAdsField>
-                  <indexGroup>4040</indexGroup>
-                  <indexOffset>12</indexOffset>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>BOOL</dataType>
+                  <indexGroup dataType="int" bitLength="64">4040</indexGroup>
+                  <indexOffset dataType="int" bitLength="64">12</indexOffset>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">BOOL</dataType>
                 </DirectAdsField>
               </hurz2>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz1 result="OK">
-              <PlcBOOL>true</PlcBOOL>
+            <hurz1>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+              </ResponseItem>
             </hurz1>
-            <hurz2 result="OK">
-              <PlcBOOL>true</PlcBOOL>
+            <hurz2>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+              </ResponseItem>
             </hurz2>
           </values>
         </PlcReadResponse>
@@ -744,16 +753,19 @@
             <fields>
               <hurz1>
                 <SymbolicAdsField>
-                  <symbolicAddress>main.f_trigDateiGelesen.M</symbolicAddress>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>BOOL</dataType>
+                  <symbolicAddress dataType="string" bitLength="200">main.f_trigDateiGelesen.M</symbolicAddress>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">BOOL</dataType>
                 </SymbolicAdsField>
               </hurz1>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz1 result="OK">
-              <PlcBOOL>false</PlcBOOL>
+            <hurz1>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcBOOL dataType="string" bitLength="40">false</PlcBOOL>
+              </ResponseItem>
             </hurz1>
           </values>
         </PlcReadResponse>
@@ -999,7 +1011,7 @@
             </AmsPacket>
           </userdata>
         </AmsTCPPacket>
- 
+
       </outgoing-plc-message>
       <incoming-plc-message name="Receive Ads Read Response">
         <AmsTCPPacket>
@@ -1082,16 +1094,19 @@
             <fields>
               <hurz1>
                 <SymbolicAdsField>
-                  <symbolicAddress>main.f_trigDateiGelesen.M</symbolicAddress>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>BOOL</dataType>
+                  <symbolicAddress dataType="string" bitLength="200">main.f_trigDateiGelesen.M</symbolicAddress>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">BOOL</dataType>
                 </SymbolicAdsField>
               </hurz1>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz1 result="OK">
-              <PlcBOOL>false</PlcBOOL>
+            <hurz1>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcBOOL dataType="string" bitLength="40">false</PlcBOOL>
+              </ResponseItem>
             </hurz1>
           </values>
         </PlcReadResponse>
@@ -1248,16 +1263,19 @@
             <fields>
               <hurz1>
                 <SymbolicAdsField>
-                  <symbolicAddress>main.f_trigDateiGelesen.M</symbolicAddress>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>BOOL</dataType>
+                  <symbolicAddress dataType="string" bitLength="200">main.f_trigDateiGelesen.M</symbolicAddress>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">BOOL</dataType>
                 </SymbolicAdsField>
               </hurz1>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz1 result="OK">
-              <PlcBOOL>false</PlcBOOL>
+            <hurz1>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcBOOL dataType="string" bitLength="40">false</PlcBOOL>
+              </ResponseItem>
             </hurz1>
           </values>
         </PlcReadResponse>
diff --git a/protocols/modbus/src/test/resources/protocols/modbus/DriverTestsuite.xml b/protocols/modbus/src/test/resources/protocols/modbus/DriverTestsuite.xml
index 2724c2d..2998551 100644
--- a/protocols/modbus/src/test/resources/protocols/modbus/DriverTestsuite.xml
+++ b/protocols/modbus/src/test/resources/protocols/modbus/DriverTestsuite.xml
@@ -95,16 +95,19 @@
             <fields>
               <hurz>
                 <ModbusFieldHoldingRegister>
-                  <address>0</address>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>REAL</dataType>
+                  <address dataType="int" bitLength="64">0</address>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">REAL</dataType>
                 </ModbusFieldHoldingRegister>
               </hurz>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz result="OK">
-              <PlcREAL>3.1415927</PlcREAL>
+            <hurz>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+              </ResponseItem>
             </hurz>
           </values>
         </PlcReadResponse>
@@ -182,19 +185,22 @@
             <fields>
               <hurz>
                 <ModbusFieldHoldingRegister>
-                  <address>0</address>
-                  <numberOfElements>2</numberOfElements>
-                  <dataType>REAL</dataType>
+                  <address dataType="int" bitLength="64">0</address>
+                  <numberOfElements dataType="int" bitLength="64">2</numberOfElements>
+                  <dataType dataType="string" bitLength="32">REAL</dataType>
                 </ModbusFieldHoldingRegister>
               </hurz>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz result="OK">
-              <PlcList>
-                <PlcREAL>3.1415927</PlcREAL>
-                <PlcREAL>3.1415927</PlcREAL>
-              </PlcList>
+            <hurz>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcList>
+                  <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+                  <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+                </PlcList>
+              </ResponseItem>
             </hurz>
           </values>
         </PlcReadResponse>
@@ -319,26 +325,32 @@
             <fields>
               <hurz1>
                 <ModbusFieldHoldingRegister>
-                  <address>0</address>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>REAL</dataType>
+                  <address dataType="int" bitLength="64">0</address>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">REAL</dataType>
                 </ModbusFieldHoldingRegister>
               </hurz1>
               <hurz2>
                 <ModbusFieldHoldingRegister>
-                  <address>2</address>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>REAL</dataType>
+                  <address dataType="int" bitLength="64">2</address>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">REAL</dataType>
                 </ModbusFieldHoldingRegister>
               </hurz2>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz1 result="OK">
-              <PlcREAL>3.1415927</PlcREAL>
+            <hurz1>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+              </ResponseItem>
             </hurz1>
-            <hurz2 result="OK">
-              <PlcREAL>3.1415927</PlcREAL>
+            <hurz2>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcREAL dataType="string" bitLength="72">3.1415927</PlcREAL>
+              </ResponseItem>
             </hurz2>
           </values>
         </PlcReadResponse>
@@ -415,16 +427,16 @@
             <fields>
               <hurz>
                 <ModbusFieldHoldingRegister>
-                  <address>0</address>
-                  <numberOfElements>1</numberOfElements>
-                  <dataType>REAL</dataType>
+                  <address dataType="int" bitLength="64">0</address>
+                  <numberOfElements dataType="int" bitLength="64">1</numberOfElements>
+                  <dataType dataType="string" bitLength="32">REAL</dataType>
                 </ModbusFieldHoldingRegister>
-                <value>3.1415927</value>
+                <value dataType="string" bitLength="72">3.1415927</value>
               </hurz>
             </fields>
           </PlcWriteRequest>
           <fields>
-            <hurz result="OK"/>
+            <hurz dataType="string" bitLength="16">OK</hurz>
           </fields>
         </PlcWriteResponse>
       </api-response>
@@ -505,17 +517,17 @@
             <fields>
               <hurz>
                 <ModbusFieldHoldingRegister>
-                  <address>0</address>
-                  <numberOfElements>2</numberOfElements>
-                  <dataType>REAL</dataType>
+                  <address dataType="int" bitLength="64">0</address>
+                  <numberOfElements dataType="int" bitLength="64">2</numberOfElements>
+                  <dataType dataType="string" bitLength="32">REAL</dataType>
                 </ModbusFieldHoldingRegister>
-                <value>3.1415927</value>
-                <value>3.1415927</value>
+                <value dataType="string" bitLength="72">3.1415927</value>
+                <value dataType="string" bitLength="72">3.1415927</value>
               </hurz>
             </fields>
           </PlcWriteRequest>
           <fields>
-            <hurz result="OK"/>
+            <hurz dataType="string" bitLength="16">OK</hurz>
           </fields>
         </PlcWriteResponse>
       </api-response>
diff --git a/protocols/s7/src/test/resources/protocols/s7/DriverTestsuite.xml b/protocols/s7/src/test/resources/protocols/s7/DriverTestsuite.xml
index 7f188b6..6b5e78c 100644
--- a/protocols/s7/src/test/resources/protocols/s7/DriverTestsuite.xml
+++ b/protocols/s7/src/test/resources/protocols/s7/DriverTestsuite.xml
@@ -535,19 +535,22 @@
             <fields>
               <hurz>
                 <S7Field>
-                  <memoryArea>OUTPUTS</memoryArea>
-                  <blockNumber>0</blockNumber>
-                  <byteOffset>0</byteOffset>
-                  <bitOffset>0</bitOffset>
-                  <numElements>1</numElements>
-                  <dataType>BOOL</dataType>
+                  <memoryArea dataType="string" bitLength="56">OUTPUTS</memoryArea>
+                  <blockNumber dataType="int" bitLength="64">0</blockNumber>
+                  <byteOffset dataType="int" bitLength="64">0</byteOffset>
+                  <bitOffset dataType="int" bitLength="64">0</bitOffset>
+                  <numElements dataType="int" bitLength="64">1</numElements>
+                  <dataType dataType="string" bitLength="32">BOOL</dataType>
                 </S7Field>
               </hurz>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz result="OK">
-              <PlcBOOL>true</PlcBOOL>
+            <hurz>
+              <ResponseItem>
+                <result dataType="string" bitLength="16">OK</result>
+                <PlcBOOL dataType="string" bitLength="32">true</PlcBOOL>
+              </ResponseItem>
             </hurz>
           </values>
         </PlcReadResponse>
@@ -668,18 +671,22 @@
             <fields>
               <hurz>
                 <S7Field>
-                  <memoryArea>OUTPUTS</memoryArea>
-                  <blockNumber>0</blockNumber>
-                  <byteOffset>0</byteOffset>
-                  <bitOffset>0</bitOffset>
-                  <numElements>1</numElements>
-                  <dataType>BOOL</dataType>
+                  <memoryArea dataType="string" bitLength="56">OUTPUTS</memoryArea>
+                  <blockNumber dataType="int" bitLength="64">0</blockNumber>
+                  <byteOffset dataType="int" bitLength="64">0</byteOffset>
+                  <bitOffset dataType="int" bitLength="64">0</bitOffset>
+                  <numElements dataType="int" bitLength="64">1</numElements>
+                  <dataType dataType="string" bitLength="32">BOOL</dataType>
                 </S7Field>
               </hurz>
             </fields>
           </PlcReadRequest>
           <values>
-            <hurz result="ACCESS_DENIED"/>
+            <hurz>
+              <ResponseItem>
+                <result dataType="string" bitLength="104">ACCESS_DENIED</result>
+              </ResponseItem>
+            </hurz>
           </values>
         </PlcReadResponse>
       </api-response>