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

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


The following commit(s) were added to refs/heads/master by this push:
     new b01792d  adjusted ADS and Modbus to new exception type
b01792d is described below

commit b01792dddc71ec7925512df0a97291de84baaa17
Author: Sebastian Rühl <sru...@apache.org>
AuthorDate: Thu Aug 23 13:11:51 2018 +0200

    adjusted ADS and Modbus to new exception type
---
 .../ads/connection/AdsAbstractPlcConnection.java   |  6 ++--
 .../apache/plc4x/java/ads/model/AdsAddress.java    |  6 ++--
 .../plc4x/java/ads/model/SymbolicAdsAddress.java   |  6 ++--
 .../connection/AdsAbstractPlcConnectionTest.java   |  4 +--
 .../ads/connection/AdsSerialPlcConnectionTest.java | 14 +++++----
 .../ads/connection/AdsTcpPlcConnectionTests.java   | 10 ++++---
 .../plc4x/java/ads/model/AdsAddressTest.java       | 17 +++++------
 .../modbus/connection/BaseModbusPlcConnection.java |  5 ++--
 .../plc4x/java/modbus/model/CoilModbusAddress.java |  6 ++--
 .../model/MaskWriteRegisterModbusAddress.java      |  6 ++--
 .../model/ReadDiscreteInputsModbusAddress.java     |  6 ++--
 .../model/ReadHoldingRegistersModbusAddress.java   |  6 ++--
 .../model/ReadInputRegistersModbusAddress.java     |  6 ++--
 .../java/modbus/model/RegisterModbusAddress.java   |  6 ++--
 .../connection/ModbusSerialPlcConnectionTest.java  | 14 ++++-----
 .../connection/ModbusTcpPlcConnectionTests.java    | 18 ++++++------
 .../java/modbus/netty/Plc4XModbusProtocolTest.java | 33 ++++++++++++++++------
 17 files changed, 97 insertions(+), 72 deletions(-)

diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
index 9b394b8..b346a4c 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnection.java
@@ -34,6 +34,7 @@ import 
org.apache.plc4x.java.api.connection.PlcProprietarySender;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
 import org.apache.plc4x.java.api.exceptions.PlcConnectionException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
 import org.apache.plc4x.java.api.messages.*;
 import org.apache.plc4x.java.api.messages.items.RequestItem;
@@ -94,12 +95,13 @@ public abstract class AdsAbstractPlcConnection extends 
AbstractPlcConnection imp
 
 
     @Override
-    public Address parseAddress(String addressString) {
+    public Address parseAddress(String addressString) throws 
PlcInvalidAddressException {
         if (AdsAddress.matches(addressString)) {
             return AdsAddress.of(addressString);
-        } else {
+        } else if (SymbolicAdsAddress.matches(addressString)) {
             return SymbolicAdsAddress.of(addressString);
         }
+        throw new PlcInvalidAddressException(addressString);
     }
 
     @Override
diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsAddress.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsAddress.java
index 2f6c6a2..905c448 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsAddress.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/AdsAddress.java
@@ -19,6 +19,7 @@
 package org.apache.plc4x.java.ads.model;
 
 import org.apache.plc4x.java.ads.api.util.ByteValue;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.Objects;
@@ -47,11 +48,10 @@ public class AdsAddress implements Address {
         return new AdsAddress(indexGroup, indexOffset);
     }
 
-    public static AdsAddress of(String address) {
+    public static AdsAddress of(String address) throws 
PlcInvalidAddressException {
         Matcher matcher = RESOURCE_ADDRESS_PATTERN.matcher(address);
         if (!matcher.matches()) {
-            throw new IllegalArgumentException(
-                "address " + address + " doesn't match 
'{indexGroup}/{indexOffset}' RAW:" + RESOURCE_ADDRESS_PATTERN);
+            throw new PlcInvalidAddressException(address, 
RESOURCE_ADDRESS_PATTERN, "{indexGroup}/{indexOffset}");
         }
 
         String indexGroupStringHex = matcher.group("indexGroupHex");
diff --git 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsAddress.java
 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsAddress.java
index 2bf000c..e997690 100644
--- 
a/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsAddress.java
+++ 
b/plc4j/protocols/ads/src/main/java/org/apache/plc4x/java/ads/model/SymbolicAdsAddress.java
@@ -18,6 +18,7 @@
  */
 package org.apache.plc4x.java.ads.model;
 
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 import org.apache.plc4x.java.api.model.Address;
 
 import java.util.Objects;
@@ -36,11 +37,10 @@ public class SymbolicAdsAddress implements Address {
         this.symbolicAddress = Objects.requireNonNull(symbolicAddress);
     }
 
-    public static SymbolicAdsAddress of(String address) {
+    public static SymbolicAdsAddress of(String address) throws 
PlcInvalidAddressException {
         Matcher matcher = SYMBOLIC_ADDRESS_PATTERN.matcher(address);
         if (!matcher.matches()) {
-            throw new IllegalArgumentException(
-                "address " + address + " doesn't match '{address}' RAW:" + 
SYMBOLIC_ADDRESS_PATTERN);
+            throw new PlcInvalidAddressException(address, 
SYMBOLIC_ADDRESS_PATTERN, "{address}");
         }
         String symbolicAddress = matcher.group("symbolicAddress");
 
diff --git 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
index 1445363..dccbf4c 100644
--- 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
+++ 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsAbstractPlcConnectionTest.java
@@ -123,7 +123,7 @@ public class AdsAbstractPlcConnectionTest {
     }
 
     @Test
-    public void parseAddress() {
+    public void parseAddress() throws Exception {
         Address address = SUT.parseAddress("0/0");
         assertNotNull(address);
         Address SymbolicAddress = SUT.parseAddress("Main.byByte[0]");
@@ -192,7 +192,7 @@ public class AdsAbstractPlcConnectionTest {
     }
 
     @Test
-    public void mapAddress() {
+    public void mapAddress() throws Exception {
         // positive
         {
             
when(channel.writeAndFlush(any(PlcRequestContainer.class))).then(invocation -> {
diff --git 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
index 703c205..6555d5a 100644
--- 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
+++ 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsSerialPlcConnectionTest.java
@@ -30,10 +30,12 @@ import org.apache.plc4x.java.ads.api.serial.AmsSerialFrame;
 import org.apache.plc4x.java.ads.api.serial.types.*;
 import org.apache.plc4x.java.ads.model.AdsAddress;
 import org.apache.plc4x.java.ads.model.SymbolicAdsAddress;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.base.connection.AbstractPlcConnection;
 import org.apache.plc4x.java.base.connection.SerialChannelFactory;
+import org.hamcrest.Matchers;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -77,13 +79,13 @@ public class AdsSerialPlcConnectionTest {
     public void emptyParseAddress() {
         try {
             SUT.parseAddress("");
-        } catch (IllegalArgumentException exception) {
-            assertTrue("Unexpected exception", 
exception.getMessage().startsWith("address  doesn't match "));
+        } catch (PlcInvalidAddressException exception) {
+            assertThat(exception.getMessage(), Matchers.startsWith(" 
invalid"));
         }
     }
 
     @Test
-    public void parseAddress() {
+    public void parseAddress() throws Exception {
         try {
             AdsAddress address = (AdsAddress) SUT.parseAddress("0/1");
             assertEquals(address.getIndexGroup(), 0);
@@ -94,7 +96,7 @@ public class AdsSerialPlcConnectionTest {
     }
 
     @Test
-    public void parseSymbolicAddress() {
+    public void parseSymbolicAddress() throws Exception {
         try {
             SymbolicAdsAddress address = (SymbolicAdsAddress) 
SUT.parseAddress("Main.variable");
             assertEquals(address.getSymbolicAddress(), "Main.variable");
@@ -180,7 +182,7 @@ public class AdsSerialPlcConnectionTest {
                             FragmentNumber.of((byte) 0)
                         ).getByteBuf();
                         try {
-                            MethodUtils.invokeMethod(byteBuf, 
true,"setRefCnt", 2);
+                            MethodUtils.invokeMethod(byteBuf, true, 
"setRefCnt", 2);
                         } catch (NoSuchMethodException | 
IllegalAccessException | InvocationTargetException e) {
                             throw new RuntimeException(e);
                         }
@@ -210,7 +212,7 @@ public class AdsSerialPlcConnectionTest {
                             )
                         ).getByteBuf();
                         try {
-                            MethodUtils.invokeMethod(byteBuf, 
true,"setRefCnt", 2);
+                            MethodUtils.invokeMethod(byteBuf, true, 
"setRefCnt", 2);
                         } catch (NoSuchMethodException | 
IllegalAccessException | InvocationTargetException e) {
                             throw new RuntimeException(e);
                         }
diff --git 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
index aa56d79..cebfc31 100644
--- 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
+++ 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/connection/AdsTcpPlcConnectionTests.java
@@ -29,6 +29,7 @@ import org.apache.plc4x.java.ads.api.generic.types.AmsPort;
 import org.apache.plc4x.java.ads.model.AdsAddress;
 import org.apache.plc4x.java.ads.model.SymbolicAdsAddress;
 import org.apache.plc4x.java.ads.protocol.Plc4x2AdsProtocol;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 import org.apache.plc4x.java.api.messages.PlcProprietaryRequest;
 import org.apache.plc4x.java.api.messages.PlcProprietaryResponse;
 import org.apache.plc4x.java.api.messages.PlcSubscriptionRequest;
@@ -36,6 +37,7 @@ import 
org.apache.plc4x.java.api.messages.PlcSubscriptionResponse;
 import org.apache.plc4x.java.api.messages.items.SubscriptionEventItem;
 import 
org.apache.plc4x.java.api.messages.items.SubscriptionRequestChangeOfStateItem;
 import org.apache.plc4x.java.base.messages.PlcRequestContainer;
+import org.hamcrest.Matchers;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -93,13 +95,13 @@ public class AdsTcpPlcConnectionTests {
     public void emptyParseAddress() {
         try {
             SUT.parseAddress("");
-        } catch (IllegalArgumentException exception) {
-            assertTrue("Unexpected exception", 
exception.getMessage().startsWith("address  doesn't match "));
+        } catch (PlcInvalidAddressException exception) {
+            assertThat(exception.getMessage(), Matchers.startsWith(" 
invalid"));
         }
     }
 
     @Test
-    public void parseAddress() {
+    public void parseAddress() throws Exception {
         try {
             AdsAddress address = (AdsAddress) SUT.parseAddress("1/1");
             assertEquals(address.getIndexGroup(), 1);
@@ -110,7 +112,7 @@ public class AdsTcpPlcConnectionTests {
     }
 
     @Test
-    public void parseSymbolicAddress() {
+    public void parseSymbolicAddress() throws Exception {
         try {
             SymbolicAdsAddress address = (SymbolicAdsAddress) 
SUT.parseAddress("Main.variable");
             assertEquals(address.getSymbolicAddress(), "Main.variable");
diff --git 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsAddressTest.java
 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsAddressTest.java
index f3348da..e92331c 100644
--- 
a/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsAddressTest.java
+++ 
b/plc4j/protocols/ads/src/test/java/org/apache/plc4x/java/ads/model/AdsAddressTest.java
@@ -18,6 +18,7 @@
  */
 package org.apache.plc4x.java.ads.model;
 
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 import org.junit.Test;
 
 import static org.hamcrest.CoreMatchers.is;
@@ -26,31 +27,31 @@ import static org.junit.Assert.assertThat;
 public class AdsAddressTest {
 
     @Test
-    public void of() {
+    public void of() throws Exception {
         AdsAddress address = AdsAddress.of("1/10");
         assertThat(address.getIndexGroup(), is(1L));
         assertThat(address.getIndexOffset(), is(10L));
     }
 
     @Test
-    public void ofHex() {
+    public void ofHex() throws Exception {
         AdsAddress address = AdsAddress.of("0x1/0xff");
         assertThat(address.getIndexGroup(), is(1L));
         assertThat(address.getIndexOffset(), is(255L));
     }
 
-    @Test(expected  = IllegalArgumentException.class)
-    public void stringInAddress() {
+    @Test(expected = PlcInvalidAddressException.class)
+    public void stringInAddress() throws Exception {
         AdsAddress address = AdsAddress.of("group/offset");
     }
 
-    @Test(expected  = IllegalArgumentException.class)
-    public void singleNumberAddress() {
+    @Test(expected = PlcInvalidAddressException.class)
+    public void singleNumberAddress() throws Exception {
         AdsAddress address = AdsAddress.of("10");
     }
 
-    @Test(expected  = IllegalArgumentException.class)
-    public void wrongSeperator() {
+    @Test(expected = PlcInvalidAddressException.class)
+    public void wrongSeperator() throws Exception {
         AdsAddress address = AdsAddress.of("1:10");
     }
 
diff --git 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
index e8a671c..1d59692 100644
--- 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
+++ 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/connection/BaseModbusPlcConnection.java
@@ -22,6 +22,7 @@ import io.netty.channel.ChannelFuture;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.plc4x.java.api.connection.PlcReader;
 import org.apache.plc4x.java.api.connection.PlcWriter;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcReadResponse;
 import org.apache.plc4x.java.api.messages.PlcWriteRequest;
@@ -61,7 +62,7 @@ public abstract class BaseModbusPlcConnection extends 
AbstractPlcConnection impl
     }
 
     @Override
-    public Address parseAddress(String addressString) {
+    public Address parseAddress(String addressString) throws 
PlcInvalidAddressException {
         if 
(MaskWriteRegisterModbusAddress.ADDRESS_PATTERN.matcher(addressString).matches())
 {
             return MaskWriteRegisterModbusAddress.of(addressString);
         } else if 
(ReadDiscreteInputsModbusAddress.ADDRESS_PATTERN.matcher(addressString).matches())
 {
@@ -75,7 +76,7 @@ public abstract class BaseModbusPlcConnection extends 
AbstractPlcConnection impl
         } else if 
(RegisterModbusAddress.ADDRESS_PATTERN.matcher(addressString).matches()) {
             return RegisterModbusAddress.of(addressString);
         }
-        return null;
+        throw new PlcInvalidAddressException(addressString);
     }
 
     @Override
diff --git 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java
 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java
index bfbd06a..0a71f1d 100644
--- 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java
+++ 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/CoilModbusAddress.java
@@ -18,7 +18,7 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -31,10 +31,10 @@ public class CoilModbusAddress extends ModbusAddress {
         super(address);
     }
 
-    public static CoilModbusAddress of(String addressString) {
+    public static CoilModbusAddress of(String addressString) throws 
PlcInvalidAddressException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcRuntimeException(addressString + " doesn't match " + 
ADDRESS_PATTERN);
+            throw new PlcInvalidAddressException(addressString, 
ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
         return new CoilModbusAddress(address);
diff --git 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusAddress.java
 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusAddress.java
index afff67a..87f1587 100644
--- 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusAddress.java
+++ 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/MaskWriteRegisterModbusAddress.java
@@ -18,7 +18,7 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 
 import java.util.Objects;
 import java.util.regex.Matcher;
@@ -37,10 +37,10 @@ public class MaskWriteRegisterModbusAddress extends 
ModbusAddress {
         this.orMask = orMask;
     }
 
-    public static MaskWriteRegisterModbusAddress of(String addressString) {
+    public static MaskWriteRegisterModbusAddress of(String addressString) 
throws PlcInvalidAddressException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcRuntimeException(addressString + " doesn't match " + 
ADDRESS_PATTERN);
+            throw new PlcInvalidAddressException(addressString, 
ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
         int andMask = Integer.parseInt(matcher.group("andMask"));
diff --git 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusAddress.java
 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusAddress.java
index 8e0c17e..0e521b6 100644
--- 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusAddress.java
+++ 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadDiscreteInputsModbusAddress.java
@@ -18,7 +18,7 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -31,10 +31,10 @@ public class ReadDiscreteInputsModbusAddress extends 
ModbusAddress {
         super(address);
     }
 
-    public static ReadDiscreteInputsModbusAddress of(String addressString) {
+    public static ReadDiscreteInputsModbusAddress of(String addressString) 
throws PlcInvalidAddressException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcRuntimeException(addressString + " doesn't match " + 
ADDRESS_PATTERN);
+            throw new PlcInvalidAddressException(addressString, 
ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
         return new ReadDiscreteInputsModbusAddress(address);
diff --git 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusAddress.java
 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusAddress.java
index a8dd8f3..5a6c952 100644
--- 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusAddress.java
+++ 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadHoldingRegistersModbusAddress.java
@@ -18,7 +18,7 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -31,10 +31,10 @@ public class ReadHoldingRegistersModbusAddress extends 
ModbusAddress {
         super(address);
     }
 
-    public static ReadHoldingRegistersModbusAddress of(String addressString) {
+    public static ReadHoldingRegistersModbusAddress of(String addressString) 
throws PlcInvalidAddressException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcRuntimeException(addressString + " doesn't match " + 
ADDRESS_PATTERN);
+            throw new PlcInvalidAddressException(addressString, 
ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
         return new ReadHoldingRegistersModbusAddress(address);
diff --git 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusAddress.java
 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusAddress.java
index 9f3fe0c..27434e3 100644
--- 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusAddress.java
+++ 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/ReadInputRegistersModbusAddress.java
@@ -18,7 +18,7 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -31,10 +31,10 @@ public class ReadInputRegistersModbusAddress extends 
ModbusAddress {
         super(address);
     }
 
-    public static ReadInputRegistersModbusAddress of(String addressString) {
+    public static ReadInputRegistersModbusAddress of(String addressString) 
throws PlcInvalidAddressException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcRuntimeException(addressString + " doesn't match " + 
ADDRESS_PATTERN);
+            throw new PlcInvalidAddressException(addressString, 
ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
         return new ReadInputRegistersModbusAddress(address);
diff --git 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusAddress.java
 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusAddress.java
index 290f7de..7aa6c7b 100644
--- 
a/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusAddress.java
+++ 
b/plc4j/protocols/modbus/src/main/java/org/apache/plc4x/java/modbus/model/RegisterModbusAddress.java
@@ -18,7 +18,7 @@
  */
 package org.apache.plc4x.java.modbus.model;
 
-import org.apache.plc4x.java.api.exceptions.PlcRuntimeException;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
@@ -32,10 +32,10 @@ public class RegisterModbusAddress extends ModbusAddress {
         super(address);
     }
 
-    public static RegisterModbusAddress of(String addressString) {
+    public static RegisterModbusAddress of(String addressString) throws 
PlcInvalidAddressException {
         Matcher matcher = ADDRESS_PATTERN.matcher(addressString);
         if (!matcher.matches()) {
-            throw new PlcRuntimeException(addressString + " doesn't match " + 
ADDRESS_PATTERN);
+            throw new PlcInvalidAddressException(addressString, 
ADDRESS_PATTERN);
         }
         int address = Integer.parseInt(matcher.group("address"));
         return new RegisterModbusAddress(address);
diff --git 
a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
 
b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
index ce2fe47..8ce248a 100644
--- 
a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
+++ 
b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusSerialPlcConnectionTest.java
@@ -65,7 +65,7 @@ public class ModbusSerialPlcConnectionTest {
     }
 
     @Test
-    public void emptyParseAddress() {
+    public void emptyParseAddress() throws Exception {
         try {
             SUT.parseAddress("");
         } catch (IllegalArgumentException exception) {
@@ -74,7 +74,7 @@ public class ModbusSerialPlcConnectionTest {
     }
 
     @Test
-    public void parseCoilModbusAddress() {
+    public void parseCoilModbusAddress() throws Exception {
         try {
             CoilModbusAddress address = (CoilModbusAddress) 
SUT.parseAddress("0/1");
             assertEquals(address.getAddress(), 0);
@@ -84,7 +84,7 @@ public class ModbusSerialPlcConnectionTest {
     }
 
     @Test
-    public void parseMaskWriteRegisterModbusAddress() {
+    public void parseMaskWriteRegisterModbusAddress() throws Exception {
         try {
             MaskWriteRegisterModbusAddress address = 
(MaskWriteRegisterModbusAddress) SUT.parseAddress("0/1");
             assertEquals(address.getAddress(), 0);
@@ -94,7 +94,7 @@ public class ModbusSerialPlcConnectionTest {
     }
 
     @Test
-    public void parseReadDiscreteInputsModbusAddress() {
+    public void parseReadDiscreteInputsModbusAddress() throws Exception {
         try {
             ReadDiscreteInputsModbusAddress address = 
(ReadDiscreteInputsModbusAddress) SUT.parseAddress("0/1");
             assertEquals(address.getAddress(), 0);
@@ -104,7 +104,7 @@ public class ModbusSerialPlcConnectionTest {
     }
 
     @Test
-    public void parseReadHoldingRegistersModbusAddress() {
+    public void parseReadHoldingRegistersModbusAddress() throws Exception {
         try {
             ReadHoldingRegistersModbusAddress address = 
(ReadHoldingRegistersModbusAddress) SUT.parseAddress("0/1");
             assertEquals(address.getAddress(), 0);
@@ -114,7 +114,7 @@ public class ModbusSerialPlcConnectionTest {
     }
 
     @Test
-    public void parseReadInputRegistersModbusAddress() {
+    public void parseReadInputRegistersModbusAddress() throws Exception {
         try {
             ReadInputRegistersModbusAddress address = 
(ReadInputRegistersModbusAddress) SUT.parseAddress("0/1");
             assertEquals(address.getAddress(), 0);
@@ -124,7 +124,7 @@ public class ModbusSerialPlcConnectionTest {
     }
 
     @Test
-    public void parseRegisterAddress() {
+    public void parseRegisterAddress() throws Exception {
         try {
             RegisterModbusAddress address = (RegisterModbusAddress) 
SUT.parseAddress("0/1");
             assertEquals(address.getAddress(), 0);
diff --git 
a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnectionTests.java
 
b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnectionTests.java
index 3640e34..3334cfe 100644
--- 
a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnectionTests.java
+++ 
b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/connection/ModbusTcpPlcConnectionTests.java
@@ -21,7 +21,9 @@ package org.apache.plc4x.java.modbus.connection;
 
 import io.netty.channel.Channel;
 import org.apache.commons.lang3.reflect.FieldUtils;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 import org.apache.plc4x.java.modbus.model.*;
+import org.hamcrest.Matchers;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
@@ -64,13 +66,13 @@ public class ModbusTcpPlcConnectionTests {
     public void emptyParseAddress() {
         try {
             SUT.parseAddress("");
-        } catch (IllegalArgumentException exception) {
-            assertTrue("Unexpected exception", 
exception.getMessage().startsWith("address  doesn't match "));
+        } catch (PlcInvalidAddressException exception) {
+            assertThat(exception.getMessage(), Matchers.startsWith(" 
invalid"));
         }
     }
 
     @Test
-    public void parseCoilModbusAddress() {
+    public void parseCoilModbusAddress() throws Exception {
         try {
             CoilModbusAddress address = (CoilModbusAddress) 
SUT.parseAddress("coil:0");
             assertEquals(address.getAddress(), 0);
@@ -80,7 +82,7 @@ public class ModbusTcpPlcConnectionTests {
     }
 
     @Test
-    public void parseMaskWriteRegisterModbusAddress() {
+    public void parseMaskWriteRegisterModbusAddress() throws Exception {
         try {
             MaskWriteRegisterModbusAddress address = 
(MaskWriteRegisterModbusAddress) SUT.parseAddress("maskwrite:1/2/3");
             assertEquals(address.getAddress(), 1);
@@ -92,7 +94,7 @@ public class ModbusTcpPlcConnectionTests {
     }
 
     @Test
-    public void parseReadDiscreteInputsModbusAddress() {
+    public void parseReadDiscreteInputsModbusAddress() throws Exception {
         try {
             ReadDiscreteInputsModbusAddress address = 
(ReadDiscreteInputsModbusAddress) SUT.parseAddress("readdiscreteinputs:0");
             assertEquals(address.getAddress(), 0);
@@ -102,7 +104,7 @@ public class ModbusTcpPlcConnectionTests {
     }
 
     @Test
-    public void parseReadHoldingRegistersModbusAddress() {
+    public void parseReadHoldingRegistersModbusAddress() throws Exception {
         try {
             ReadHoldingRegistersModbusAddress address = 
(ReadHoldingRegistersModbusAddress) SUT.parseAddress("readholdingregisters:0");
             assertEquals(address.getAddress(), 0);
@@ -112,7 +114,7 @@ public class ModbusTcpPlcConnectionTests {
     }
 
     @Test
-    public void parseReadInputRegistersModbusAddress() {
+    public void parseReadInputRegistersModbusAddress() throws Exception {
         try {
             ReadInputRegistersModbusAddress address = 
(ReadInputRegistersModbusAddress) SUT.parseAddress("readinputregisters:0");
             assertEquals(address.getAddress(), 0);
@@ -122,7 +124,7 @@ public class ModbusTcpPlcConnectionTests {
     }
 
     @Test
-    public void parseRegisterAddress() {
+    public void parseRegisterAddress() throws Exception {
         try {
             RegisterModbusAddress address = (RegisterModbusAddress) 
SUT.parseAddress("register:0");
             assertEquals(address.getAddress(), 0);
diff --git 
a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
 
b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
index dc60d22..867d368 100644
--- 
a/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
+++ 
b/plc4j/protocols/modbus/src/test/java/org/apache/plc4x/java/modbus/netty/Plc4XModbusProtocolTest.java
@@ -25,6 +25,7 @@ import com.digitalpetri.modbus.responses.*;
 import io.netty.buffer.ByteBuf;
 import io.netty.buffer.Unpooled;
 import org.apache.commons.lang3.tuple.ImmutablePair;
+import org.apache.plc4x.java.api.exceptions.PlcInvalidAddressException;
 import org.apache.plc4x.java.api.messages.PlcReadRequest;
 import org.apache.plc4x.java.api.messages.PlcRequest;
 import org.apache.plc4x.java.api.messages.PlcResponse;
@@ -110,23 +111,36 @@ public class Plc4XModbusProtocolTest {
                 }
             })
             .map(dataTypePair -> Stream.of(
-                producePair(dataTypePair.getDataTypeClass(), 
CoilModbusAddress.of("coil:1"), new 
ReadCoilsResponse(Unpooled.wrappedBuffer(new byte[]{(byte) 0x1}))),
-                producePair(CoilModbusAddress.of("coil:1"), new 
WriteSingleCoilResponse(1, 1), mapDataTypePairForCoil(dataTypePair).getValue()),
+                producePair(dataTypePair.getDataTypeClass(), st(() -> 
CoilModbusAddress.of("coil:1")), new 
ReadCoilsResponse(Unpooled.wrappedBuffer(new byte[]{(byte) 0x1}))),
+                producePair(st(() -> CoilModbusAddress.of("coil:1")), new 
WriteSingleCoilResponse(1, 1), mapDataTypePairForCoil(dataTypePair).getValue()),
                 /* Read request no supported on maskwrite so how to handle?
                 producePair(pair.getDataTypeClass(), 
MaskWriteRegisterModbusAddress.of("maskwrite:1/1/2"), new 
MaskWriteRegisterResponse(1, 1, 2)),
                 */
-                
producePair(MaskWriteRegisterModbusAddress.of("maskwrite:1/1/2"), new 
MaskWriteRegisterResponse(1, 1, 2), 
mapDataTypePairForRegister(dataTypePair).getValue()),
-                producePair(dataTypePair.getDataTypeClass(), 
ReadDiscreteInputsModbusAddress.of("readdiscreteinputs:1"), new 
ReadDiscreteInputsResponse(Unpooled.wrappedBuffer(new byte[]{(byte) 0x01}))),
-                producePair(dataTypePair.getDataTypeClass(), 
ReadHoldingRegistersModbusAddress.of("readholdingregisters:1"), new 
ReadHoldingRegistersResponse(Unpooled.wrappedBuffer(cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())))),
-                producePair(dataTypePair.getDataTypeClass(), 
ReadInputRegistersModbusAddress.of("readinputregisters:1"), new 
ReadInputRegistersResponse(Unpooled.wrappedBuffer(cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())))),
-                producePair(CoilModbusAddress.of("coil:1"), new 
WriteMultipleCoilsResponse(1, 3), 
mapDataTypePairForCoil(dataTypePair).getValue(), 
mapDataTypePairForCoil(dataTypePair).getValue(), 
mapDataTypePairForCoil(dataTypePair).getValue()),
-                producePair(RegisterModbusAddress.of("register:1"), new 
WriteMultipleRegistersResponse(1, 3), 
mapDataTypePairForRegister(dataTypePair).getValue(), 
mapDataTypePairForRegister(dataTypePair).getValue(), 
mapDataTypePairForRegister(dataTypePair).getValue()),
-                producePair(RegisterModbusAddress.of("register:1"), new 
WriteSingleRegisterResponse(1, 
cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())[0]),
 mapDataTypePairForRegister(dataTypePair).getValue())
+                producePair(st(() -> 
MaskWriteRegisterModbusAddress.of("maskwrite:1/1/2")), new 
MaskWriteRegisterResponse(1, 1, 2), 
mapDataTypePairForRegister(dataTypePair).getValue()),
+                producePair(dataTypePair.getDataTypeClass(), st(() -> 
ReadDiscreteInputsModbusAddress.of("readdiscreteinputs:1")), new 
ReadDiscreteInputsResponse(Unpooled.wrappedBuffer(new byte[]{(byte) 0x01}))),
+                producePair(dataTypePair.getDataTypeClass(), st(() -> 
ReadHoldingRegistersModbusAddress.of("readholdingregisters:1")), new 
ReadHoldingRegistersResponse(Unpooled.wrappedBuffer(cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())))),
+                producePair(dataTypePair.getDataTypeClass(), st(() -> 
ReadInputRegistersModbusAddress.of("readinputregisters:1")), new 
ReadInputRegistersResponse(Unpooled.wrappedBuffer(cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())))),
+                producePair(st(() -> CoilModbusAddress.of("coil:1")), new 
WriteMultipleCoilsResponse(1, 3), 
mapDataTypePairForCoil(dataTypePair).getValue(), 
mapDataTypePairForCoil(dataTypePair).getValue(), 
mapDataTypePairForCoil(dataTypePair).getValue()),
+                producePair(st(() -> RegisterModbusAddress.of("register:1")), 
new WriteMultipleRegistersResponse(1, 3), 
mapDataTypePairForRegister(dataTypePair).getValue(), 
mapDataTypePairForRegister(dataTypePair).getValue(), 
mapDataTypePairForRegister(dataTypePair).getValue()),
+                producePair(st(() -> RegisterModbusAddress.of("register:1")), 
new WriteSingleRegisterResponse(1, 
cutRegister(mapDataTypePairForRegister(dataTypePair).getByteRepresentation())[0]),
 mapDataTypePairForRegister(dataTypePair).getValue())
             ))
             .flatMap(stream -> stream)
             .map(pair -> new 
Object[]{pair.left.getRequest().getRequestItem().orElseThrow(IllegalStateException::new).getDatatype().getSimpleName(),
 pair.left, pair.left.getResponseFuture(), 
pair.left.getRequest().getClass().getSimpleName(), pair.right, 
pair.right.getModbusPdu().getClass().getSimpleName()}).collect(Collectors.toList());
     }
 
+    @FunctionalInterface
+    public interface AddressSupplier<T> {
+        T getAddress() throws PlcInvalidAddressException;
+    }
+
+    public static <T> T st(AddressSupplier<T> supplier) {
+        try {
+            return supplier.getAddress();
+        } catch (PlcInvalidAddressException e) {
+            throw new RuntimeException(e);
+        }
+    }
+
     private static ImmutablePair<PlcRequestContainer<PlcReadRequest, 
PlcResponse>, ModbusTcpPayload> producePair(Class type, Address address, 
ModbusPdu modbusPdu) {
         return ImmutablePair.of(
             new PlcRequestContainer<>(
@@ -167,6 +181,7 @@ public class Plc4XModbusProtocolTest {
     private static byte[] cutRegister(byte[] right) {
         return new byte[]{right.length > 1 ? right[right.length - 2] : 0x0, 
right[right.length - 1]};
     }
+
     @Before
     public void setUp() {
         SUT = new Plc4XModbusProtocol();

Reply via email to