You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@plc4x.apache.org by sr...@apache.org on 2018/08/23 11:11:56 UTC
[incubator-plc4x] branch master updated: adjusted ADS and Modbus to
new exception type
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 <sr...@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();