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

[incubator-plc4x] 01/02: - Made the FieldItems throw Exceptions in case of incompatible data types and values.

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

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

commit 5301025d40c67b59a9c87fe6bf794ab2ead02dd0
Author: Christofer Dutz <ch...@c-ware.de>
AuthorDate: Thu Oct 18 14:59:17 2018 +0200

    - Made the FieldItems throw Exceptions in case of incompatible data types and values.
---
 .../PlcIncompatibleDatatypeException.java          | 28 +++++++++
 .../messages/items/DefaultBigDecimalFieldItem.java | 71 +++++++++++----------
 .../messages/items/DefaultBigIntegerFieldItem.java | 73 +++++++++++-----------
 .../messages/items/DefaultBooleanFieldItem.java    |  8 ++-
 .../messages/items/DefaultByteArrayFieldItem.java  |  5 ++
 .../base/messages/items/DefaultByteFieldItem.java  | 71 +++++++++++----------
 .../messages/items/DefaultDoubleFieldItem.java     | 69 ++++++++++----------
 .../base/messages/items/DefaultFloatFieldItem.java | 69 ++++++++++----------
 .../messages/items/DefaultIntegerFieldItem.java    | 71 +++++++++++----------
 .../messages/items/DefaultLocalDateFieldItem.java  |  8 ++-
 .../items/DefaultLocalDateTimeFieldItem.java       | 20 +++---
 .../messages/items/DefaultLocalTimeFieldItem.java  |  8 ++-
 .../base/messages/items/DefaultLongFieldItem.java  | 71 +++++++++++----------
 .../base/messages/items/DefaultShortFieldItem.java | 71 +++++++++++----------
 .../messages/items/DefaultStringFieldItem.java     |  8 ++-
 .../plc4x/java/base/messages/items/FieldItem.java  | 31 ++++-----
 16 files changed, 382 insertions(+), 300 deletions(-)

diff --git a/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcIncompatibleDatatypeException.java b/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcIncompatibleDatatypeException.java
new file mode 100644
index 0000000..cb779df
--- /dev/null
+++ b/plc4j/api/src/main/java/org/apache/plc4x/java/api/exceptions/PlcIncompatibleDatatypeException.java
@@ -0,0 +1,28 @@
+/*
+ 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.api.exceptions;
+
+public class PlcIncompatibleDatatypeException extends PlcRuntimeException {
+
+    public PlcIncompatibleDatatypeException(Class<?> datatype, int index) {
+        super("Incompatible Datatype " + datatype.getName() + " at index " + index);
+    }
+
+}
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigDecimalFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigDecimalFieldItem.java
index 17a5ed7..2b9466c 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigDecimalFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigDecimalFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -39,10 +41,10 @@ public class DefaultBigDecimalFieldItem extends FieldItem<BigDecimal> {
 
     @Override
     public Boolean getBoolean(int index) {
-        if (isValidBoolean(index)) {
-            return getValue(index).compareTo(BigDecimal.ZERO) != 0;
+        if (!isValidBoolean(index)) {
+            throw new PlcIncompatibleDatatypeException(Boolean.class, index);
         }
-        return null;
+        return getValue(index).compareTo(BigDecimal.ZERO) != 0;
     }
 
     @Override
@@ -55,10 +57,10 @@ public class DefaultBigDecimalFieldItem extends FieldItem<BigDecimal> {
 
     @Override
     public Byte getByte(int index) {
-        if (isValidByte(index)) {
-            return getValue(index).byteValue();
+        if (!isValidByte(index)) {
+            throw new PlcIncompatibleDatatypeException(Byte.class, index);
         }
-        return null;
+        return getValue(index).byteValue();
     }
 
     @Override
@@ -71,10 +73,10 @@ public class DefaultBigDecimalFieldItem extends FieldItem<BigDecimal> {
 
     @Override
     public Short getShort(int index) {
-        if (isValidShort(index)) {
-            return getValue(index).shortValue();
+        if (!isValidShort(index)) {
+            throw new PlcIncompatibleDatatypeException(Short.class, index);
         }
-        return null;
+        return getValue(index).shortValue();
     }
 
     @Override
@@ -87,22 +89,10 @@ public class DefaultBigDecimalFieldItem extends FieldItem<BigDecimal> {
 
     @Override
     public Integer getInteger(int index) {
-        if (isValidInteger(index)) {
-            return getValue(index).intValue();
-        }
-        return null;
-    }
-
-    public boolean isValidBigInteger(int index) {
-        BigDecimal value = getValue(index);
-        return value != null;
-    }
-
-    public BigInteger getBigInteger(int index) {
-        if (isValidBigInteger(index)) {
-            return getValue(index).toBigInteger();
+        if (!isValidInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(Integer.class, index);
         }
-        return null;
+        return getValue(index).intValue();
     }
 
     @Override
@@ -115,10 +105,22 @@ public class DefaultBigDecimalFieldItem extends FieldItem<BigDecimal> {
 
     @Override
     public Long getLong(int index) {
-        if (isValidLong(index)) {
-            return getValue(index).longValue();
+        if (!isValidLong(index)) {
+            throw new PlcIncompatibleDatatypeException(Long.class, index);
         }
-        return null;
+        return getValue(index).longValue();
+    }
+
+    public boolean isValidBigInteger(int index) {
+        BigDecimal value = getValue(index);
+        return value != null;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        if (!isValidBigInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(BigInteger.class, index);
+        }
+        return getValue(index).toBigInteger();
     }
 
     @Override
@@ -131,10 +133,10 @@ public class DefaultBigDecimalFieldItem extends FieldItem<BigDecimal> {
 
     @Override
     public Float getFloat(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).floatValue();
+        if (!isValidFloat(index)) {
+            throw new PlcIncompatibleDatatypeException(Float.class, index);
         }
-        return null;
+        return getValue(index).floatValue();
     }
 
     @Override
@@ -147,10 +149,10 @@ public class DefaultBigDecimalFieldItem extends FieldItem<BigDecimal> {
 
     @Override
     public Double getDouble(int index) {
-        if (isValidDouble(index)) {
-            return getValue(index).doubleValue();
+        if (!isValidDouble(index)) {
+            throw new PlcIncompatibleDatatypeException(Double.class, index);
         }
-        return null;
+        return getValue(index).doubleValue();
     }
 
     public boolean isValidBigDecimal(int index) {
@@ -158,6 +160,9 @@ public class DefaultBigDecimalFieldItem extends FieldItem<BigDecimal> {
     }
 
     public BigDecimal getBigDecimal(int index) {
+        if(!isValidBigDecimal(index)) {
+            throw new PlcIncompatibleDatatypeException(BigDecimal.class, index);
+        }
         return getValue(index);
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigIntegerFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigIntegerFieldItem.java
index 9e30774..08decfb 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigIntegerFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBigIntegerFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -39,10 +41,10 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Boolean getBoolean(int index) {
-        if (isValidBoolean(index)) {
-            return getValue(index).compareTo(BigInteger.ZERO) == 0;
+        if (!isValidBoolean(index)) {
+            throw new PlcIncompatibleDatatypeException(Boolean.class, index);
         }
-        return null;
+        return getValue(index).compareTo(BigInteger.ZERO) == 0;
     }
 
     @Override
@@ -54,10 +56,10 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Byte getByte(int index) {
-        if (isValidByte(index)) {
-            return getValue(index).byteValue();
+        if (!isValidByte(index)) {
+            throw new PlcIncompatibleDatatypeException(Byte.class, index);
         }
-        return null;
+        return getValue(index).byteValue();
     }
 
     @Override
@@ -69,10 +71,10 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Short getShort(int index) {
-        if (isValidShort(index)) {
-            return getValue(index).shortValue();
+        if (!isValidShort(index)) {
+            throw new PlcIncompatibleDatatypeException(Short.class, index);
         }
-        return null;
+        return getValue(index).shortValue();
     }
 
     @Override
@@ -84,23 +86,10 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Integer getInteger(int index) {
-        if (isValidInteger(index)) {
-            BigInteger value = getValue(index);
-            return value.intValue();
-        }
-        return null;
-    }
-
-    public boolean isValidBigInteger(int index) {
-        BigInteger value = getValue(index);
-        return value != null;
-    }
-
-    public BigInteger getBigInteger(int index) {
-        if (isValidBigInteger(index)) {
-            return getValue(index);
+        if (!isValidInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(Integer.class, index);
         }
-        return null;
+        return getValue(index).intValue();
     }
 
     @Override
@@ -112,11 +101,22 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Long getLong(int index) {
-        if (isValidLong(index)) {
-            BigInteger value = getValue(index);
-            return value.longValue();
+        if (!isValidLong(index)) {
+            throw new PlcIncompatibleDatatypeException(Long.class, index);
         }
-        return null;
+        return getValue(index).longValue();
+    }
+
+    public boolean isValidBigInteger(int index) {
+        BigInteger value = getValue(index);
+        return value != null;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        if (!isValidBigInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(BigInteger.class, index);
+        }
+        return getValue(index);
     }
 
     @Override
@@ -132,10 +132,10 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Float getFloat(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).floatValue();
+        if (!isValidFloat(index)) {
+            throw new PlcIncompatibleDatatypeException(Float.class, index);
         }
-        return null;
+        return getValue(index).floatValue();
     }
 
     @Override
@@ -151,10 +151,10 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
 
     @Override
     public Double getDouble(int index) {
-        if (isValidDouble(index)) {
-            return getValue(index).doubleValue();
+        if (!isValidDouble(index)) {
+            throw new PlcIncompatibleDatatypeException(Double.class, index);
         }
-        return null;
+        return getValue(index).doubleValue();
     }
 
     public boolean isValidBigDecimal(int index) {
@@ -162,6 +162,9 @@ public class DefaultBigIntegerFieldItem extends FieldItem<BigInteger> {
     }
 
     public BigDecimal getBigDecimal(int index) {
+        if(!isValidBigDecimal(index)) {
+            throw new PlcIncompatibleDatatypeException(BigDecimal.class, index);
+        }
         return new BigDecimal(getValue(index));
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBooleanFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBooleanFieldItem.java
index abb02b4..0e85bed 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBooleanFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultBooleanFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.util.BitSet;
 
 public class DefaultBooleanFieldItem extends FieldItem<Boolean> {
@@ -38,10 +40,10 @@ public class DefaultBooleanFieldItem extends FieldItem<Boolean> {
 
     @Override
     public Boolean getBoolean(int index) {
-        if (isValidBoolean(index)) {
-            return getValue(index);
+        if (!isValidBoolean(index)) {
+            throw new PlcIncompatibleDatatypeException(Boolean.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
     @Override
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteArrayFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteArrayFieldItem.java
index 0aeac4f..b0732f5 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteArrayFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteArrayFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.util.Objects;
 
 public class DefaultByteArrayFieldItem extends FieldItem<Byte[]> {
@@ -42,6 +44,9 @@ public class DefaultByteArrayFieldItem extends FieldItem<Byte[]> {
 
     @Override
     public Byte[] getByteArray(int index) {
+        if(!isValidByteArray(index)) {
+            throw new PlcIncompatibleDatatypeException(Byte[].class, index);
+        }
         return getValue(index);
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteFieldItem.java
index eec3ad7..be6581e 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultByteFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -39,10 +41,10 @@ public class DefaultByteFieldItem extends FieldItem<Byte> {
 
     @Override
     public Boolean getBoolean(int index) {
-        if (isValidBoolean(index)) {
-            return getValue(index) != 0L;
+        if (!isValidBoolean(index)) {
+            throw new PlcIncompatibleDatatypeException(Boolean.class, index);
         }
-        return null;
+        return getValue(index) != 0L;
     }
 
     @Override
@@ -53,10 +55,10 @@ public class DefaultByteFieldItem extends FieldItem<Byte> {
 
     @Override
     public Byte getByte(int index) {
-        if (isValidByte(index)) {
-            return getValue(index);
+        if (!isValidByte(index)) {
+            throw new PlcIncompatibleDatatypeException(Byte.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
     @Override
@@ -67,10 +69,10 @@ public class DefaultByteFieldItem extends FieldItem<Byte> {
 
     @Override
     public Short getShort(int index) {
-        if (isValidShort(index)) {
-            return getValue(index).shortValue();
+        if (!isValidShort(index)) {
+            throw new PlcIncompatibleDatatypeException(Short.class, index);
         }
-        return null;
+        return getValue(index).shortValue();
     }
 
     @Override
@@ -81,22 +83,10 @@ public class DefaultByteFieldItem extends FieldItem<Byte> {
 
     @Override
     public Integer getInteger(int index) {
-        if (isValidInteger(index)) {
-            return getValue(index).intValue();
-        }
-        return null;
-    }
-
-    public boolean isValidBigInteger(int index) {
-        Byte value = getValue(index);
-        return value != null;
-    }
-
-    public BigInteger getBigInteger(int index) {
-        if (isValidBigInteger(index)) {
-            return BigInteger.valueOf(getValue(index));
+        if (!isValidInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(Integer.class, index);
         }
-        return null;
+        return getValue(index).intValue();
     }
 
     @Override
@@ -106,10 +96,22 @@ public class DefaultByteFieldItem extends FieldItem<Byte> {
 
     @Override
     public Long getLong(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).longValue();
+        if (!isValidLong(index)) {
+            throw new PlcIncompatibleDatatypeException(Long.class, index);
         }
-        return null;
+        return getValue(index).longValue();
+    }
+
+    public boolean isValidBigInteger(int index) {
+        Byte value = getValue(index);
+        return value != null;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        if (!isValidBigInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(BigInteger.class, index);
+        }
+        return BigInteger.valueOf(getValue(index));
     }
 
     @Override
@@ -120,10 +122,10 @@ public class DefaultByteFieldItem extends FieldItem<Byte> {
 
     @Override
     public Float getFloat(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).floatValue();
+        if (!isValidFloat(index)) {
+            throw new PlcIncompatibleDatatypeException(Float.class, index);
         }
-        return null;
+        return getValue(index).floatValue();
     }
 
     @Override
@@ -134,10 +136,10 @@ public class DefaultByteFieldItem extends FieldItem<Byte> {
 
     @Override
     public Double getDouble(int index) {
-        if (isValidDouble(index)) {
-            return getValue(index).doubleValue();
+        if (!isValidDouble(index)) {
+            throw new PlcIncompatibleDatatypeException(Double.class, index);
         }
-        return null;
+        return getValue(index).doubleValue();
     }
 
     public boolean isValidBigDecimal(int index) {
@@ -145,6 +147,9 @@ public class DefaultByteFieldItem extends FieldItem<Byte> {
     }
 
     public BigDecimal getBigDecimal(int index) {
+        if(!isValidBigDecimal(index)) {
+            throw new PlcIncompatibleDatatypeException(BigDecimal.class, index);
+        }
         return new BigDecimal(getValue(index));
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultDoubleFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultDoubleFieldItem.java
index 5019ca9..c010cc5 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultDoubleFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultDoubleFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -39,10 +41,10 @@ public class DefaultDoubleFieldItem extends FieldItem<Double> {
 
     @Override
     public Boolean getBoolean(int index) {
-        if (isValidBoolean(index)) {
-            return getValue(index) != 0L;
+        if (!isValidBoolean(index)) {
+            throw new PlcIncompatibleDatatypeException(Boolean.class, index);
         }
-        return null;
+        return getValue(index) != 0L;
     }
 
     @Override
@@ -53,10 +55,10 @@ public class DefaultDoubleFieldItem extends FieldItem<Double> {
 
     @Override
     public Byte getByte(int index) {
-        if (isValidByte(index)) {
-            return getValue(index).byteValue();
+        if (!isValidByte(index)) {
+            throw new PlcIncompatibleDatatypeException(Byte.class, index);
         }
-        return null;
+        return getValue(index).byteValue();
     }
 
     @Override
@@ -67,10 +69,10 @@ public class DefaultDoubleFieldItem extends FieldItem<Double> {
 
     @Override
     public Short getShort(int index) {
-        if (isValidShort(index)) {
-            return getValue(index).shortValue();
+        if (!isValidShort(index)) {
+            throw new PlcIncompatibleDatatypeException(Short.class, index);
         }
-        return null;
+        return getValue(index).shortValue();
     }
 
     @Override
@@ -81,36 +83,36 @@ public class DefaultDoubleFieldItem extends FieldItem<Double> {
 
     @Override
     public Integer getInteger(int index) {
-        if (isValidInteger(index)) {
-            return getValue(index).intValue();
+        if (!isValidInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(Integer.class, index);
         }
-        return null;
+        return getValue(index).intValue();
     }
 
-    public boolean isValidBigInteger(int index) {
+    @Override
+    public boolean isValidLong(int index) {
         Double value = getValue(index);
-        return value != null;
+        return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
     }
 
-    public BigInteger getBigInteger(int index) {
-        if (isValidBigInteger(index)) {
-            return BigInteger.valueOf(getValue(index).longValue());
+    @Override
+    public Long getLong(int index) {
+        if (!isValidLong(index)) {
+            throw new PlcIncompatibleDatatypeException(Long.class, index);
         }
-        return null;
+        return getValue(index).longValue();
     }
 
-    @Override
-    public boolean isValidLong(int index) {
+    public boolean isValidBigInteger(int index) {
         Double value = getValue(index);
-        return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
+        return value != null;
     }
 
-    @Override
-    public Long getLong(int index) {
-        if (isValidLong(index)) {
-            return getValue(index).longValue();
+    public BigInteger getBigInteger(int index) {
+        if (!isValidBigInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(BigInteger.class, index);
         }
-        return null;
+        return BigInteger.valueOf(getValue(index).longValue());
     }
 
     @Override
@@ -121,10 +123,10 @@ public class DefaultDoubleFieldItem extends FieldItem<Double> {
 
     @Override
     public Float getFloat(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).floatValue();
+        if (!isValidFloat(index)) {
+            throw new PlcIncompatibleDatatypeException(Float.class, index);
         }
-        return null;
+        return getValue(index).floatValue();
     }
 
     @Override
@@ -134,10 +136,10 @@ public class DefaultDoubleFieldItem extends FieldItem<Double> {
 
     @Override
     public Double getDouble(int index) {
-        if (isValidDouble(index)) {
-            return getValue(index);
+        if (!isValidDouble(index)) {
+            throw new PlcIncompatibleDatatypeException(Double.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
     public boolean isValidBigDecimal(int index) {
@@ -145,6 +147,9 @@ public class DefaultDoubleFieldItem extends FieldItem<Double> {
     }
 
     public BigDecimal getBigDecimal(int index) {
+        if(!isValidBigDecimal(index)) {
+            throw new PlcIncompatibleDatatypeException(BigDecimal.class, index);
+        }
         return new BigDecimal(getValue(index));
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatFieldItem.java
index 53f94e6..36cdc69 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultFloatFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -39,10 +41,10 @@ public class DefaultFloatFieldItem extends FieldItem<Float> {
 
     @Override
     public Boolean getBoolean(int index) {
-        if (isValidBoolean(index)) {
-            return getValue(index) != 0L;
+        if (!isValidBoolean(index)) {
+            throw new PlcIncompatibleDatatypeException(Boolean.class, index);
         }
-        return null;
+        return getValue(index) != 0L;
     }
 
     @Override
@@ -53,10 +55,10 @@ public class DefaultFloatFieldItem extends FieldItem<Float> {
 
     @Override
     public Byte getByte(int index) {
-        if (isValidByte(index)) {
-            return getValue(index).byteValue();
+        if (!isValidByte(index)) {
+            throw new PlcIncompatibleDatatypeException(Byte.class, index);
         }
-        return null;
+        return getValue(index).byteValue();
     }
 
     @Override
@@ -67,10 +69,10 @@ public class DefaultFloatFieldItem extends FieldItem<Float> {
 
     @Override
     public Short getShort(int index) {
-        if (isValidShort(index)) {
-            return getValue(index).shortValue();
+        if (!isValidShort(index)) {
+            throw new PlcIncompatibleDatatypeException(Short.class, index);
         }
-        return null;
+        return getValue(index).shortValue();
     }
 
     @Override
@@ -81,36 +83,36 @@ public class DefaultFloatFieldItem extends FieldItem<Float> {
 
     @Override
     public Integer getInteger(int index) {
-        if (isValidInteger(index)) {
-            return getValue(index).intValue();
+        if (!isValidInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(Integer.class, index);
         }
-        return null;
+        return getValue(index).intValue();
     }
 
-    public boolean isValidBigInteger(int index) {
+    @Override
+    public boolean isValidLong(int index) {
         Float value = getValue(index);
-        return value != null;
+        return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
     }
 
-    public BigInteger getBigInteger(int index) {
-        if (isValidBigInteger(index)) {
-            return BigInteger.valueOf(getValue(index).longValue());
+    @Override
+    public Long getLong(int index) {
+        if (!isValidLong(index)) {
+            throw new PlcIncompatibleDatatypeException(Long.class, index);
         }
-        return null;
+        return getValue(index).longValue();
     }
 
-    @Override
-    public boolean isValidLong(int index) {
+    public boolean isValidBigInteger(int index) {
         Float value = getValue(index);
-        return (value != null) && (value <= Long.MAX_VALUE) && (value >= Long.MIN_VALUE);
+        return value != null;
     }
 
-    @Override
-    public Long getLong(int index) {
-        if (isValidLong(index)) {
-            return getValue(index).longValue();
+    public BigInteger getBigInteger(int index) {
+        if (!isValidBigInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(BigInteger.class, index);
         }
-        return null;
+        return BigInteger.valueOf(getValue(index).longValue());
     }
 
     @Override
@@ -121,10 +123,10 @@ public class DefaultFloatFieldItem extends FieldItem<Float> {
 
     @Override
     public Float getFloat(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index);
+        if (!isValidFloat(index)) {
+            throw new PlcIncompatibleDatatypeException(Float.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
     @Override
@@ -134,10 +136,10 @@ public class DefaultFloatFieldItem extends FieldItem<Float> {
 
     @Override
     public Double getDouble(int index) {
-        if (isValidDouble(index)) {
-            return getValue(index).doubleValue();
+        if (!isValidDouble(index)) {
+            throw new PlcIncompatibleDatatypeException(Double.class, index);
         }
-        return null;
+        return getValue(index).doubleValue();
     }
 
     public boolean isValidBigDecimal(int index) {
@@ -145,6 +147,9 @@ public class DefaultFloatFieldItem extends FieldItem<Float> {
     }
 
     public BigDecimal getBigDecimal(int index) {
+        if(!isValidBigDecimal(index)) {
+            throw new PlcIncompatibleDatatypeException(BigDecimal.class, index);
+        }
         return new BigDecimal(getValue(index));
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
index 3f2de70..dc12131 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultIntegerFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -39,10 +41,10 @@ public class DefaultIntegerFieldItem extends FieldItem<Integer> {
 
     @Override
     public Boolean getBoolean(int index) {
-        if (isValidBoolean(index)) {
-            return getValue(index) != 0L;
+        if (!isValidBoolean(index)) {
+            throw new PlcIncompatibleDatatypeException(Boolean.class, index);
         }
-        return null;
+        return getValue(index) != 0L;
     }
 
     @Override
@@ -53,10 +55,10 @@ public class DefaultIntegerFieldItem extends FieldItem<Integer> {
 
     @Override
     public Byte getByte(int index) {
-        if (isValidByte(index)) {
-            return getValue(index).byteValue();
+        if (!isValidByte(index)) {
+            throw new PlcIncompatibleDatatypeException(Byte.class, index);
         }
-        return null;
+        return getValue(index).byteValue();
     }
 
     @Override
@@ -67,10 +69,10 @@ public class DefaultIntegerFieldItem extends FieldItem<Integer> {
 
     @Override
     public Short getShort(int index) {
-        if (isValidShort(index)) {
-            return getValue(index).shortValue();
+        if (!isValidShort(index)) {
+            throw new PlcIncompatibleDatatypeException(Short.class, index);
         }
-        return null;
+        return getValue(index).shortValue();
     }
 
     @Override
@@ -81,22 +83,10 @@ public class DefaultIntegerFieldItem extends FieldItem<Integer> {
 
     @Override
     public Integer getInteger(int index) {
-        if (isValidInteger(index)) {
-            return getValue(index);
-        }
-        return null;
-    }
-
-    public boolean isValidBigInteger(int index) {
-        Integer value = getValue(index);
-        return value != null;
-    }
-
-    public BigInteger getBigInteger(int index) {
-        if (isValidBigInteger(index)) {
-            return BigInteger.valueOf(getValue(index));
+        if (!isValidInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(Integer.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
     @Override
@@ -106,10 +96,22 @@ public class DefaultIntegerFieldItem extends FieldItem<Integer> {
 
     @Override
     public Long getLong(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).longValue();
+        if (!isValidFloat(index)) {
+            throw new PlcIncompatibleDatatypeException(Long.class, index);
         }
-        return null;
+        return getValue(index).longValue();
+    }
+
+    public boolean isValidBigInteger(int index) {
+        Integer value = getValue(index);
+        return value != null;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        if (!isValidBigInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(BigInteger.class, index);
+        }
+        return BigInteger.valueOf(getValue(index));
     }
 
     @Override
@@ -120,10 +122,10 @@ public class DefaultIntegerFieldItem extends FieldItem<Integer> {
 
     @Override
     public Float getFloat(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).floatValue();
+        if (!isValidFloat(index)) {
+            throw new PlcIncompatibleDatatypeException(Float.class, index);
         }
-        return null;
+        return getValue(index).floatValue();
     }
 
     @Override
@@ -134,10 +136,10 @@ public class DefaultIntegerFieldItem extends FieldItem<Integer> {
 
     @Override
     public Double getDouble(int index) {
-        if (isValidDouble(index)) {
-            return getValue(index).doubleValue();
+        if (!isValidDouble(index)) {
+            throw new PlcIncompatibleDatatypeException(Double.class, index);
         }
-        return null;
+        return getValue(index).doubleValue();
     }
 
     public boolean isValidBigDecimal(int index) {
@@ -145,6 +147,9 @@ public class DefaultIntegerFieldItem extends FieldItem<Integer> {
     }
 
     public BigDecimal getBigDecimal(int index) {
+        if(!isValidBigDecimal(index)) {
+            throw new PlcIncompatibleDatatypeException(BigDecimal.class, index);
+        }
         return new BigDecimal(getValue(index));
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalDateFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalDateFieldItem.java
index 6fedf24..f911464 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalDateFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalDateFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.time.LocalDate;
 
 public class DefaultLocalDateFieldItem extends FieldItem<LocalDate> {
@@ -38,10 +40,10 @@ public class DefaultLocalDateFieldItem extends FieldItem<LocalDate> {
 
     @Override
     public LocalDate getDate(int index) {
-        if (isValidTime(index)) {
-            return getValue(index);
+        if (!isValidTime(index)) {
+            throw new PlcIncompatibleDatatypeException(LocalDate.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalDateTimeFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalDateTimeFieldItem.java
index 8e9d371..c49a03a 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalDateTimeFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalDateTimeFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
@@ -40,10 +42,10 @@ public class DefaultLocalDateTimeFieldItem extends FieldItem<LocalDateTime> {
 
     @Override
     public LocalTime getTime(int index) {
-        if(isValidTime(index)) {
-            return getValue(index).toLocalTime();
+        if (!isValidTime(index)) {
+            throw new PlcIncompatibleDatatypeException(LocalTime.class, index);
         }
-        return null;
+        return getValue(index).toLocalTime();
     }
 
     @Override
@@ -53,10 +55,10 @@ public class DefaultLocalDateTimeFieldItem extends FieldItem<LocalDateTime> {
 
     @Override
     public LocalDate getDate(int index) {
-        if(isValidTime(index)) {
-            return getValue(index).toLocalDate();
+        if (!isValidTime(index)) {
+            throw new PlcIncompatibleDatatypeException(LocalDate.class, index);
         }
-        return null;
+        return getValue(index).toLocalDate();
     }
 
     @Override
@@ -66,10 +68,10 @@ public class DefaultLocalDateTimeFieldItem extends FieldItem<LocalDateTime> {
 
     @Override
     public LocalDateTime getDateTime(int index) {
-        if(isValidTime(index)) {
-            return getValue(index);
+        if (!isValidTime(index)) {
+            throw new PlcIncompatibleDatatypeException(LocalDateTime.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalTimeFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalTimeFieldItem.java
index fcaf0c7..149b0f8 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalTimeFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLocalTimeFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.time.LocalTime;
 
 public class DefaultLocalTimeFieldItem extends FieldItem<LocalTime> {
@@ -38,10 +40,10 @@ public class DefaultLocalTimeFieldItem extends FieldItem<LocalTime> {
 
     @Override
     public LocalTime getTime(int index) {
-        if (isValidTime(index)) {
-            return getValue(index);
+        if (!isValidTime(index)) {
+            throw new PlcIncompatibleDatatypeException(LocalTime.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLongFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLongFieldItem.java
index ff2e5e0..22d36dc 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLongFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultLongFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -39,10 +41,10 @@ public class DefaultLongFieldItem extends FieldItem<Long> {
 
     @Override
     public Boolean getBoolean(int index) {
-        if (isValidBoolean(index)) {
-            return getValue(index) != 0L;
+        if (!isValidBoolean(index)) {
+            throw new PlcIncompatibleDatatypeException(Boolean.class, index);
         }
-        return null;
+        return getValue(index) != 0L;
     }
 
     @Override
@@ -53,10 +55,10 @@ public class DefaultLongFieldItem extends FieldItem<Long> {
 
     @Override
     public Byte getByte(int index) {
-        if (isValidByte(index)) {
-            return getValue(index).byteValue();
+        if (!isValidByte(index)) {
+            throw new PlcIncompatibleDatatypeException(Byte.class, index);
         }
-        return null;
+        return getValue(index).byteValue();
     }
 
     @Override
@@ -67,10 +69,10 @@ public class DefaultLongFieldItem extends FieldItem<Long> {
 
     @Override
     public Short getShort(int index) {
-        if (isValidShort(index)) {
-            return getValue(index).shortValue();
+        if (!isValidShort(index)) {
+            throw new PlcIncompatibleDatatypeException(Short.class, index);
         }
-        return null;
+        return getValue(index).shortValue();
     }
 
     @Override
@@ -81,22 +83,10 @@ public class DefaultLongFieldItem extends FieldItem<Long> {
 
     @Override
     public Integer getInteger(int index) {
-        if (isValidInteger(index)) {
-            return getValue(index).intValue();
-        }
-        return null;
-    }
-
-    public boolean isValidBigInteger(int index) {
-        Long value = getValue(index);
-        return value != null;
-    }
-
-    public BigInteger getBigInteger(int index) {
-        if (isValidBigInteger(index)) {
-            return BigInteger.valueOf(getValue(index));
+        if (!isValidInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(Integer.class, index);
         }
-        return null;
+        return getValue(index).intValue();
     }
 
     @Override
@@ -106,10 +96,22 @@ public class DefaultLongFieldItem extends FieldItem<Long> {
 
     @Override
     public Long getLong(int index) {
-        if (isValidLong(index)) {
-            return getValue(index);
+        if (!isValidLong(index)) {
+            throw new PlcIncompatibleDatatypeException(Long.class, index);
         }
-        return null;
+        return getValue(index);
+    }
+
+    public boolean isValidBigInteger(int index) {
+        Long value = getValue(index);
+        return value != null;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        if (!isValidBigInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(BigInteger.class, index);
+        }
+        return BigInteger.valueOf(getValue(index));
     }
 
     @Override
@@ -120,10 +122,10 @@ public class DefaultLongFieldItem extends FieldItem<Long> {
 
     @Override
     public Float getFloat(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).floatValue();
+        if (!isValidFloat(index)) {
+            throw new PlcIncompatibleDatatypeException(Float.class, index);
         }
-        return null;
+        return getValue(index).floatValue();
     }
 
     @Override
@@ -134,10 +136,10 @@ public class DefaultLongFieldItem extends FieldItem<Long> {
 
     @Override
     public Double getDouble(int index) {
-        if (isValidDouble(index)) {
-            return getValue(index).doubleValue();
+        if (!isValidDouble(index)) {
+            throw new PlcIncompatibleDatatypeException(Double.class, index);
         }
-        return null;
+        return getValue(index).doubleValue();
     }
 
     public boolean isValidBigDecimal(int index) {
@@ -145,6 +147,9 @@ public class DefaultLongFieldItem extends FieldItem<Long> {
     }
 
     public BigDecimal getBigDecimal(int index) {
+        if(!isValidBigDecimal(index)) {
+            throw new PlcIncompatibleDatatypeException(BigDecimal.class, index);
+        }
         return new BigDecimal(getValue(index));
     }
 
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultShortFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultShortFieldItem.java
index a8e9d4e..2c61ad6 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultShortFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultShortFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 
@@ -39,10 +41,10 @@ public class DefaultShortFieldItem extends FieldItem<Short> {
 
     @Override
     public Boolean getBoolean(int index) {
-        if (isValidBoolean(index)) {
-            return getValue(index) != 0L;
+        if (!isValidBoolean(index)) {
+            throw new PlcIncompatibleDatatypeException(Boolean.class, index);
         }
-        return null;
+        return getValue(index) != 0L;
     }
 
     @Override
@@ -53,10 +55,10 @@ public class DefaultShortFieldItem extends FieldItem<Short> {
 
     @Override
     public Byte getByte(int index) {
-        if (isValidByte(index)) {
-            return getValue(index).byteValue();
+        if (!isValidByte(index)) {
+            throw new PlcIncompatibleDatatypeException(Byte.class, index);
         }
-        return null;
+        return getValue(index).byteValue();
     }
 
     @Override
@@ -67,10 +69,10 @@ public class DefaultShortFieldItem extends FieldItem<Short> {
 
     @Override
     public Short getShort(int index) {
-        if (isValidShort(index)) {
-            return getValue(index);
+        if (!isValidShort(index)) {
+            throw new PlcIncompatibleDatatypeException(Short.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
     @Override
@@ -81,22 +83,10 @@ public class DefaultShortFieldItem extends FieldItem<Short> {
 
     @Override
     public Integer getInteger(int index) {
-        if (isValidInteger(index)) {
-            return getValue(index).intValue();
-        }
-        return null;
-    }
-
-    public boolean isValidBigInteger(int index) {
-        Short value = getValue(index);
-        return value != null;
-    }
-
-    public BigInteger getBigInteger(int index) {
-        if (isValidBigInteger(index)) {
-            return BigInteger.valueOf(getValue(index));
+        if (!isValidInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(Integer.class, index);
         }
-        return null;
+        return getValue(index).intValue();
     }
 
     @Override
@@ -106,10 +96,22 @@ public class DefaultShortFieldItem extends FieldItem<Short> {
 
     @Override
     public Long getLong(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).longValue();
+        if (!isValidLong(index)) {
+            throw new PlcIncompatibleDatatypeException(Long.class, index);
         }
-        return null;
+        return getValue(index).longValue();
+    }
+
+    public boolean isValidBigInteger(int index) {
+        Short value = getValue(index);
+        return value != null;
+    }
+
+    public BigInteger getBigInteger(int index) {
+        if (!isValidBigInteger(index)) {
+            throw new PlcIncompatibleDatatypeException(BigInteger.class, index);
+        }
+        return BigInteger.valueOf(getValue(index));
     }
 
     @Override
@@ -120,10 +122,10 @@ public class DefaultShortFieldItem extends FieldItem<Short> {
 
     @Override
     public Float getFloat(int index) {
-        if (isValidFloat(index)) {
-            return getValue(index).floatValue();
+        if (!isValidFloat(index)) {
+            throw new PlcIncompatibleDatatypeException(Float.class, index);
         }
-        return null;
+        return getValue(index).floatValue();
     }
 
     @Override
@@ -134,10 +136,10 @@ public class DefaultShortFieldItem extends FieldItem<Short> {
 
     @Override
     public Double getDouble(int index) {
-        if (isValidDouble(index)) {
-            return getValue(index).doubleValue();
+        if (!isValidDouble(index)) {
+            throw new PlcIncompatibleDatatypeException(Double.class, index);
         }
-        return null;
+        return getValue(index).doubleValue();
     }
 
     public boolean isValidBigDecimal(int index) {
@@ -145,6 +147,9 @@ public class DefaultShortFieldItem extends FieldItem<Short> {
     }
 
     public BigDecimal getBigDecimal(int index) {
+        if(!isValidBigDecimal(index)) {
+            throw new PlcIncompatibleDatatypeException(BigDecimal.class, index);
+        }
         return new BigDecimal(getValue(index));
     }
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultStringFieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultStringFieldItem.java
index 395a6c8..d02bbd2 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultStringFieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/DefaultStringFieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 public class DefaultStringFieldItem extends FieldItem<String> {
 
     public DefaultStringFieldItem(String... values) {
@@ -36,10 +38,10 @@ public class DefaultStringFieldItem extends FieldItem<String> {
 
     @Override
     public String getString(int index) {
-        if(isValidString(index)) {
-            return getValue(index);
+        if (!isValidString(index)) {
+            throw new PlcIncompatibleDatatypeException(String.class, index);
         }
-        return null;
+        return getValue(index);
     }
 
 }
diff --git a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
index 7df46a9..14deb18 100644
--- a/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
+++ b/plc4j/protocols/driver-bases/base/src/main/java/org/apache/plc4x/java/base/messages/items/FieldItem.java
@@ -18,6 +18,8 @@ under the License.
 */
 package org.apache.plc4x.java.base.messages.items;
 
+import org.apache.plc4x.java.api.exceptions.PlcIncompatibleDatatypeException;
+
 import java.math.BigDecimal;
 import java.math.BigInteger;
 import java.time.LocalDate;
@@ -44,7 +46,7 @@ public abstract class FieldItem<T> {
     }
 
     public Boolean getBoolean(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(Boolean.class, index);
     }
 
     public boolean isValidByte(int index) {
@@ -52,7 +54,7 @@ public abstract class FieldItem<T> {
     }
 
     public Byte getByte(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(Byte.class, index);
     }
 
     public boolean isValidShort(int index) {
@@ -60,7 +62,7 @@ public abstract class FieldItem<T> {
     }
 
     public Short getShort(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(Short.class, index);
     }
 
     public boolean isValidInteger(int index) {
@@ -68,7 +70,7 @@ public abstract class FieldItem<T> {
     }
 
     public Integer getInteger(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(Integer.class, index);
     }
 
     public boolean isValidBigInteger(int index) {
@@ -76,7 +78,7 @@ public abstract class FieldItem<T> {
     }
 
     public BigInteger getBigInteger(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(BigInteger.class, index);
     }
 
     public boolean isValidLong(int index) {
@@ -84,7 +86,7 @@ public abstract class FieldItem<T> {
     }
 
     public Long getLong(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(Long.class, index);
     }
 
     public boolean isValidFloat(int index) {
@@ -92,7 +94,7 @@ public abstract class FieldItem<T> {
     }
 
     public Float getFloat(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(Float.class, index);
     }
 
     public boolean isValidDouble(int index) {
@@ -100,7 +102,7 @@ public abstract class FieldItem<T> {
     }
 
     public Double getDouble(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(Double.class, index);
     }
 
     public boolean isValidBigDecimal(int index) {
@@ -108,7 +110,7 @@ public abstract class FieldItem<T> {
     }
 
     public BigDecimal getBigDecimal(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(BigDecimal.class, index);
     }
 
     public boolean isValidString(int index) {
@@ -116,7 +118,7 @@ public abstract class FieldItem<T> {
     }
 
     public String getString(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(String.class, index);
     }
 
     public boolean isValidTime(int index) {
@@ -124,7 +126,7 @@ public abstract class FieldItem<T> {
     }
 
     public LocalTime getTime(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(LocalTime.class, index);
     }
 
     public boolean isValidDate(int index) {
@@ -132,7 +134,7 @@ public abstract class FieldItem<T> {
     }
 
     public LocalDate getDate(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(LocalDate.class, index);
     }
 
     public boolean isValidDateTime(int index) {
@@ -140,7 +142,7 @@ public abstract class FieldItem<T> {
     }
 
     public LocalDateTime getDateTime(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(LocalDateTime.class, index);
     }
 
     public boolean isValidByteArray(int index) {
@@ -148,7 +150,7 @@ public abstract class FieldItem<T> {
     }
 
     public Byte[] getByteArray(int index) {
-        return null;
+        throw new PlcIncompatibleDatatypeException(Byte[].class, index);
     }
 
     public T[] getValues() {
@@ -186,5 +188,4 @@ public abstract class FieldItem<T> {
             '}';
     }
 
-    //ToDo Replace returning of null by Exceptions
 }