From 258af9b5ac301fcbc8011ed3bff538659adfeedb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marc=20M=C3=BCltin?= Date: Thu, 28 Jul 2016 19:13:00 +0200 Subject: [PATCH] Bugfix: An empty catch clause in the StatefulTransportLayerClient.java caused a weired EXI Codec error message ("ERROR: 'EXI No valid EXI document according distinguishing bits'") when a message timeout occurred (e.g. with the small timeout value of 250ms for CurrentDemandRes). This was confusing since there was no obvious reason for the EXI Codec error message. Now there is some meaningful error catch clause which makes clear that the header of the received message could not be read, which then terminates the communication session. --- RISE-V2G-EVCC/EVCCConfig.properties | 2 +- .../transportLayer/StatefulTransportLayerClient.java | 11 ++++++++++- .../shared/messageHandling/MessageHandler.java | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/RISE-V2G-EVCC/EVCCConfig.properties b/RISE-V2G-EVCC/EVCCConfig.properties index 8c977d1..ff74488 100644 --- a/RISE-V2G-EVCC/EVCCConfig.properties +++ b/RISE-V2G-EVCC/EVCCConfig.properties @@ -68,7 +68,7 @@ RequestedPaymentOption = # - DC_extended # - DC_combo_core # - DC_unique -RequestedEnergyTransferMode = +RequestedEnergyTransferMode = DC_core # XML representation of messages diff --git a/RISE-V2G-EVCC/src/main/java/org/eclipse/risev2g/evcc/transportLayer/StatefulTransportLayerClient.java b/RISE-V2G-EVCC/src/main/java/org/eclipse/risev2g/evcc/transportLayer/StatefulTransportLayerClient.java index 0b3ca99..7280f8e 100644 --- a/RISE-V2G-EVCC/src/main/java/org/eclipse/risev2g/evcc/transportLayer/StatefulTransportLayerClient.java +++ b/RISE-V2G-EVCC/src/main/java/org/eclipse/risev2g/evcc/transportLayer/StatefulTransportLayerClient.java @@ -54,7 +54,16 @@ public abstract class StatefulTransportLayerClient extends Observable implement try { setBytesReadFromInputStream(getInStream().read(getV2gTPHeader())); } catch (IOException e) { - + /* + * If there are no bytes buffered on the socket, or all buffered bytes have been consumed by read, + * then all subsequent calls to read will throw an IOException. + */ + stopAndNotify("IOExeption occurred while trying to read the header of the incoming message. " + + "Maybe timeout occurred?", e); + return false; + } catch (NullPointerException e2) { + stopAndNotify("NullPointerException occurred while trying to read the header of the incoming message", e2); + return false; } if (getBytesReadFromInputStream() < 0) { diff --git a/RISE-V2G-Shared/src/main/java/org/eclipse/risev2g/shared/messageHandling/MessageHandler.java b/RISE-V2G-Shared/src/main/java/org/eclipse/risev2g/shared/messageHandling/MessageHandler.java index 310f0ab..6a5f014 100644 --- a/RISE-V2G-Shared/src/main/java/org/eclipse/risev2g/shared/messageHandling/MessageHandler.java +++ b/RISE-V2G-Shared/src/main/java/org/eclipse/risev2g/shared/messageHandling/MessageHandler.java @@ -117,7 +117,7 @@ public class MessageHandler { byte[] encodedEXI = getExiCodec().encodeEXI(jaxbObject, false); // For test purposes you can log the byte array -// getLogger().debug("Encoded EXI byte array: " + ByteUtils.toStringFromByteArray(encodedEXI)); +// getLogger().debug("Encoded EXI byte array: " + ByteUtils.toHexString(encodedEXI)); return encodedEXI; }