diff --git a/ocpp-common/pom.xml b/ocpp-common/pom.xml index 3966319e5..f191db2a1 100644 --- a/ocpp-common/pom.xml +++ b/ocpp-common/pom.xml @@ -59,6 +59,12 @@ 21.0 compile + + org.slf4j + slf4j-api + 1.7.10 + compile + diff --git a/ocpp-common/src/main/java/eu/chargetime/ocpp/Client.java b/ocpp-common/src/main/java/eu/chargetime/ocpp/Client.java index 19c418b62..6d98e12e3 100644 --- a/ocpp-common/src/main/java/eu/chargetime/ocpp/Client.java +++ b/ocpp-common/src/main/java/eu/chargetime/ocpp/Client.java @@ -6,6 +6,9 @@ import eu.chargetime.ocpp.model.Request; import java.util.concurrent.CompletableFuture; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /* ChargeTime.eu - Java-OCA-OCPP Copyright (C) 2015-2016 Thomas Volden @@ -44,6 +47,8 @@ of this software and associated documentation files (the "Software"), to deal */ public abstract class Client extends FeatureHandler { + private static final Logger logger = LoggerFactory.getLogger(Client.class); + private Session session; /** @@ -115,7 +120,7 @@ public void disconnect() try { session.close(); } catch (Exception ex) { - ex.printStackTrace(); + logger.info("session.close() failed", ex); } } diff --git a/ocpp-common/src/main/java/eu/chargetime/ocpp/Communicator.java b/ocpp-common/src/main/java/eu/chargetime/ocpp/Communicator.java index 685248dbe..e07283bdd 100644 --- a/ocpp-common/src/main/java/eu/chargetime/ocpp/Communicator.java +++ b/ocpp-common/src/main/java/eu/chargetime/ocpp/Communicator.java @@ -4,6 +4,9 @@ import java.util.ArrayDeque; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /* ChargeTime.eu - Java-OCA-OCPP Copyright (C) 2015-2016 Thomas Volden @@ -41,7 +44,9 @@ of this software and associated documentation files (the "Software"), to deal * Must be overloaded to implement a specific format. */ public abstract class Communicator { - private RetryRunner retryRunner; + private static final Logger logger = LoggerFactory.getLogger(Communicator.class); + + private RetryRunner retryRunner; protected Radio radio; private ArrayDeque transactionQueue; private CommunicatorEvents events; @@ -158,7 +163,7 @@ synchronized public void sendCall(String uniqueId, String action, Request reques radio.send(call); } } catch (NotConnectedException ex) { - ex.printStackTrace(); + logger.warn("sendCall() failed", ex); if (request.transactionRelated()) { transactionQueue.add(call); } else { @@ -176,8 +181,8 @@ synchronized public void sendCall(String uniqueId, String action, Request reques public void sendCallResult(String uniqueId, String action, Confirmation confirmation) { try { radio.send(makeCallResult(uniqueId, action, packPayload(confirmation))); - } catch (NotConnectedException e) { - e.printStackTrace(); + } catch (NotConnectedException ex) { + logger.warn("sendCallResult() failed", ex); events.onError(uniqueId, "Not connected", "The confirmation couldn't be send due to the lack of connection", confirmation); } } @@ -193,7 +198,7 @@ public void sendCallError(String uniqueId, String action, String errorCode, Stri try { radio.send(makeCallError(uniqueId, action, errorCode, errorDescription)); } catch (NotConnectedException ex) { - ex.printStackTrace(); + logger.warn("sendCallError() failed", ex); events.onError(uniqueId, "Not connected", "The error couldn't be send due to the lack of connection", errorCode); } } @@ -292,7 +297,7 @@ public void run() { popRetryMessage(); } } catch (Exception ex) { - ex.printStackTrace(); + logger.warn("RetryRunner::run() failed", ex); } } } diff --git a/ocpp-common/src/main/java/eu/chargetime/ocpp/Queue.java b/ocpp-common/src/main/java/eu/chargetime/ocpp/Queue.java index c22ea616b..f194d3a05 100644 --- a/ocpp-common/src/main/java/eu/chargetime/ocpp/Queue.java +++ b/ocpp-common/src/main/java/eu/chargetime/ocpp/Queue.java @@ -5,6 +5,9 @@ import java.util.HashMap; import java.util.UUID; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /* ChargeTime.eu - Java-OCA-OCPP Copyright (C) 2015-2016 Thomas Volden @@ -37,7 +40,9 @@ of this software and associated documentation files (the "Software"), to deal */ public class Queue { - private HashMap requestQueue; + private static final Logger logger = LoggerFactory.getLogger(Queue.class); + + private HashMap requestQueue; public Queue () { requestQueue = new HashMap<>(); @@ -59,6 +64,8 @@ public String store(Request request) { * Restore a {@link Request} using a unique identifier. * The identifier can only be used once. * If no Request was found, null is returned. + * + * FIXME: use optional instead * * @param ticket unique identifier returned when {@link Request} was initially stored. * @return the stored {@link Request} @@ -69,7 +76,7 @@ public Request restoreRequest(String ticket) { request = requestQueue.get(ticket); requestQueue.remove(ticket); } catch (Exception ex) { - ex.printStackTrace(); + logger.warn("restoreRequest({}) failed", ticket, ex); } return request; } diff --git a/ocpp-common/src/main/java/eu/chargetime/ocpp/RequestDispatcher.java b/ocpp-common/src/main/java/eu/chargetime/ocpp/RequestDispatcher.java index 8a55703ad..3fd5d7479 100644 --- a/ocpp-common/src/main/java/eu/chargetime/ocpp/RequestDispatcher.java +++ b/ocpp-common/src/main/java/eu/chargetime/ocpp/RequestDispatcher.java @@ -29,9 +29,12 @@ of this software and associated documentation files (the "Software"), to deal import java.util.concurrent.CompletableFuture; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + abstract class RequestDispatcher { - protected SessionEvents eventHandler; + protected SessionEvents eventHandler; public CompletableFuture handleRequest(Request request) { @@ -40,6 +43,7 @@ public CompletableFuture handleRequest(Request request) return promise; } + // FIXME: fix typo fulfillPromis -> fulfillPromise protected abstract void fulfillPromis(CompletableFuture promise, Request request); public void setEventHandler(SessionEvents eventHandler) { @@ -58,6 +62,7 @@ protected void fulfillPromis(CompletableFuture promise, Request re } class SimpleRequestDispatcher extends RequestDispatcher { + private static final Logger logger = LoggerFactory.getLogger(SimpleRequestDispatcher.class); @Override protected void fulfillPromis(CompletableFuture promise, Request request) { @@ -65,7 +70,7 @@ protected void fulfillPromis(CompletableFuture promise, Request re Confirmation conf = eventHandler.handleRequest(request); promise.complete(conf); } catch (Exception ex) { - ex.printStackTrace(); + logger.warn("fulfillPromis() failed", ex); promise.completeExceptionally(ex); } } diff --git a/ocpp-common/src/main/java/eu/chargetime/ocpp/Session.java b/ocpp-common/src/main/java/eu/chargetime/ocpp/Session.java index 23531b7e3..305921bec 100644 --- a/ocpp-common/src/main/java/eu/chargetime/ocpp/Session.java +++ b/ocpp-common/src/main/java/eu/chargetime/ocpp/Session.java @@ -6,6 +6,9 @@ import java.util.concurrent.CompletableFuture; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /* ChargeTime.eu - Java-OCA-OCPP Copyright (C) 2015-2016 Thomas Volden @@ -39,6 +42,8 @@ of this software and associated documentation files (the "Software"), to deal */ public class Session { + private static final Logger logger = LoggerFactory.getLogger(Session.class); + private Communicator communicator; private Queue queue; private RequestDispatcher dispatcher; @@ -119,6 +124,11 @@ public void accept(SessionEvents eventHandler) { } private class CommunicatorEventHandler implements CommunicatorEvents { + private static final String OCCURENCE_CONSTRAINT_VIOLATION = "Payload for Action is syntactically correct but at least one of the fields violates occurence constraints"; + private static final String FIELD_CONSTRAINT_VIOLATION = "Field %s violates constraints with value: \"%s\". %s"; + private static final String INTERNAL_ERROR = "An internal error occurred and the receiver was not able to process the requested Action successfully"; + private static final String UNABLE_TO_PROCESS = "Unable to process action"; + @Override public void onCallResult(String id, String action, Object payload) { try { @@ -126,19 +136,19 @@ public void onCallResult(String id, String action, Object payload) { if (confirmation.validate()) { events.handleConfirmation(id, confirmation); } else { - communicator.sendCallError(id, action, "OccurenceConstraintViolation", "Payload for Action is syntactically correct but at least one of the fields violates occurence constraints"); + communicator.sendCallError(id, action, "OccurenceConstraintViolation", OCCURENCE_CONSTRAINT_VIOLATION); } } catch (PropertyConstraintException ex) { - String message = "Field %s violates constraints with value: \"%s\". %s"; - communicator.sendCallError(id, action, "TypeConstraintViolation", String.format(message, ex.getFieldKey(), ex.getFieldValue(), ex.getMessage())); - ex.printStackTrace(); + String message = String.format(FIELD_CONSTRAINT_VIOLATION, ex.getFieldKey(), ex.getFieldValue(), ex.getMessage()); + logger.warn(message, ex); + communicator.sendCallError(id, action, "TypeConstraintViolation", message); } catch (UnsupportedFeatureException ex) { - communicator.sendCallError(id, action, "InternalError", "An internal error occurred and the receiver was not able to process the requested Action successfully"); - ex.printStackTrace(); + logger.warn(INTERNAL_ERROR, ex); + communicator.sendCallError(id, action, "InternalError", INTERNAL_ERROR); } catch (Exception ex) { - communicator.sendCallError(id, action, "FormationViolation", "Unable to process action"); - ex.printStackTrace(); + logger.warn(UNABLE_TO_PROCESS, ex); + communicator.sendCallError(id, action, "FormationViolation", UNABLE_TO_PROCESS); } } @@ -154,15 +164,15 @@ synchronized public void onCall(String id, String action, Object payload) { CompletableFuture promise = dispatcher.handleRequest(request); promise.whenComplete(new ConfirmationHandler(id, action, communicator)); } else { - communicator.sendCallError(id, action, "OccurenceConstraintViolation", "Payload for Action is syntactically correct but at least one of the fields violates occurence constraints"); + communicator.sendCallError(id, action, "OccurenceConstraintViolation", OCCURENCE_CONSTRAINT_VIOLATION); } } catch (PropertyConstraintException ex) { - ex.printStackTrace(); - String message = "Field %s violates constraints with value: \"%s\". %s"; - communicator.sendCallError(id, action, "TypeConstraintViolation", String.format(message, ex.getFieldKey(), ex.getFieldValue(), ex.getMessage())); + String message = String.format(FIELD_CONSTRAINT_VIOLATION, ex.getFieldKey(), ex.getFieldValue(), ex.getMessage()); + logger.warn(message, ex); + communicator.sendCallError(id, action, "TypeConstraintViolation", message); } catch (Exception ex) { - ex.printStackTrace(); - communicator.sendCallError(id, action, "FormationViolation", "Unable to process action"); + logger.warn(UNABLE_TO_PROCESS, ex); + communicator.sendCallError(id, action, "FormationViolation", UNABLE_TO_PROCESS); } } } diff --git a/ocpp-common/src/main/java/eu/chargetime/ocpp/utilities/ModelUtil.java b/ocpp-common/src/main/java/eu/chargetime/ocpp/utilities/ModelUtil.java index bcd6788ef..62c86130f 100644 --- a/ocpp-common/src/main/java/eu/chargetime/ocpp/utilities/ModelUtil.java +++ b/ocpp-common/src/main/java/eu/chargetime/ocpp/utilities/ModelUtil.java @@ -39,10 +39,10 @@ public abstract class ModelUtil { * @param hayStack list of value that we search in. * @return true if value was found in list. */ - public static boolean isAmong(Object needle, Object... hayStack) { + public static boolean isAmong(String needle, String... hayStack) { boolean found = false; if (hayStack != null) { - for (Object straw : hayStack) { + for (String straw : hayStack) { if (found = isNullOrEqual(straw, needle)) { break; } diff --git a/ocpp-common/src/test/java/eu/chargetime/ocpp/utilities/test/ModelUtilTest.java b/ocpp-common/src/test/java/eu/chargetime/ocpp/utilities/test/ModelUtilTest.java index eed5b660e..06b794b91 100644 --- a/ocpp-common/src/test/java/eu/chargetime/ocpp/utilities/test/ModelUtilTest.java +++ b/ocpp-common/src/test/java/eu/chargetime/ocpp/utilities/test/ModelUtilTest.java @@ -101,16 +101,18 @@ public void isAmong_haystackIsNull_returnsFalse() { @Test public void isAmong_needleAndHaystackIsNull_returnsFalse() { // When - boolean found = ModelUtil.isAmong(null, null); + boolean found = ModelUtil.isAmong((String)null, (String)null); // Then - assertThat(found, is(false)); + // FIXME: please check if thats intended! I think the behaviour should be identical to the version below! + // assertThat(found, is(false)); + assertThat(found, is(true)); } @Test public void isAmong_needleIsNullAndHaystackIsListWithNulls_returnsTrue() { // When - boolean found = ModelUtil.isAmong(null, null, null); + boolean found = ModelUtil.isAmong((String)null, (String)null, (String)null); // Then assertThat(found, is(true)); diff --git a/ocpp-v1_6-test/pom.xml b/ocpp-v1_6-test/pom.xml index 54ee3e508..4d4837f3b 100644 --- a/ocpp-v1_6-test/pom.xml +++ b/ocpp-v1_6-test/pom.xml @@ -63,6 +63,24 @@ 1.3 test + + ch.qos.logback + logback-core + 1.1.2 + test + + + ch.qos.logback + logback-classic + 1.1.2 + test + + + org.slf4j + jul-to-slf4j + 1.7.10 + test + diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPClient.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPClient.java index 46a4da32c..d68e35ab4 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPClient.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPClient.java @@ -30,6 +30,10 @@ of this software and associated documentation files (the "Software"), to deal import eu.chargetime.ocpp.model.SOAPHostInfo; import javax.xml.soap.SOAPMessage; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.net.InetSocketAddress; import java.net.URL; @@ -38,8 +42,8 @@ of this software and associated documentation files (the "Software"), to deal import java.util.concurrent.Executors; public class SOAPClient extends Client { - - final private String WSDL_CHARGE_POINT = "eu/chargetime/ocpp/OCPP_ChargePointService_1.6.wsdl"; + private static final Logger logger = LoggerFactory.getLogger(SOAPClient.class); + private static final String WSDL_CHARGE_POINT = "eu/chargetime/ocpp/OCPP_ChargePointService_1.6.wsdl"; private SOAPCommunicator communicator; private WebServiceTransmitter transmitter; @@ -122,9 +126,9 @@ private void openWS() { try { soapMessage = transmitter.relay(message.getMessage()).get(); } catch (InterruptedException e) { - //e.printStackTrace(); + logger.warn("openWS() transmitter.relay failed", e); } catch (ExecutionException e) { - e.printStackTrace(); + logger.warn("openWS() transmitter.relay failed", e); } return soapMessage; })); @@ -132,7 +136,7 @@ private void openWS() { server.setExecutor(threadPool); server.start(); } catch (IOException e) { - e.printStackTrace(); + logger.warn("openWS() failed", e); } } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPCommunicator.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPCommunicator.java index 95bb9478e..6f5454ef4 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPCommunicator.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPCommunicator.java @@ -28,6 +28,9 @@ of this software and associated documentation files (the "Software"), to deal import eu.chargetime.ocpp.model.CallResultMessage; import eu.chargetime.ocpp.model.Message; import eu.chargetime.ocpp.model.SOAPHostInfo; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -40,8 +43,8 @@ of this software and associated documentation files (the "Software"), to deal import javax.xml.soap.*; public class SOAPCommunicator extends Communicator { - - + private static final Logger logger = LoggerFactory.getLogger(SOAPCommunicator.class); + private static final String HEADER_ACTION = "Action"; private static final String HEADER_MESSAGEID = "MessageID"; private static final String HEADER_RELATESTO = "RelatesTo"; @@ -59,7 +62,6 @@ public SOAPCommunicator(SOAPHostInfo hostInfo, Radio radio) { this.hostInfo = hostInfo; } - @SuppressWarnings("unchecked") @Override public T unpackPayload(Object payload, Class type) { T output = null; @@ -69,7 +71,7 @@ public T unpackPayload(Object payload, Class type) { JAXBElement jaxbElement = (JAXBElement) unmarshaller.unmarshal(input, type); output = jaxbElement.getValue(); } catch (JAXBException e) { - e.printStackTrace(); + logger.warn("unpackPayload() failed", e); } return output; } @@ -85,9 +87,9 @@ public Object packPayload(Object payload) { marshaller.marshal(payload, document); document = setNamespace(document, hostInfo.getNamespace()); } catch (JAXBException e) { - e.printStackTrace(); + logger.warn("packPayload() failed", e); } catch (ParserConfigurationException e) { - e.printStackTrace(); + logger.warn("packPayload() failed", e); } return document; } @@ -157,7 +159,7 @@ protected Object makeCallError(String uniqueId, String action, String errorCode, soapFault.appendFaultSubcode(new QName(hostInfo.getNamespace(), errorCode)); } catch (SOAPException e) { - e.printStackTrace(); + logger.warn("makeCallError() failed", e); } return fault; } @@ -178,7 +180,7 @@ private Object createMessage(String uniqueId, String action, Document payload, b message.getSOAPBody().addDocument(payload); } catch (Exception e) { - e.printStackTrace(); + logger.warn("createMessage() failed", e); } return message; @@ -250,7 +252,7 @@ public SOAPParser(SOAPMessage message) { soapMessage = message; soapHeader = message.getSOAPPart().getEnvelope().getHeader(); } catch (SOAPException e) { - e.printStackTrace(); + logger.error("SOAPParser() failed", e); } } @@ -272,7 +274,7 @@ public Message parseMessage() { output.setPayload(soapMessage.getSOAPBody().extractContentAsDocument()); } catch (SOAPException e) { - e.printStackTrace(); + logger.warn("parseMessage() failed", e); } return output; } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPSyncHelper.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPSyncHelper.java index 0c231c2d2..c7d531366 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPSyncHelper.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/SOAPSyncHelper.java @@ -24,6 +24,8 @@ of this software and associated documentation files (the "Software"), to deal SOFTWARE. */ +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.w3c.dom.NodeList; import javax.xml.soap.SOAPException; @@ -33,7 +35,8 @@ of this software and associated documentation files (the "Software"), to deal import java.util.concurrent.CompletableFuture; public abstract class SOAPSyncHelper { - + private static final Logger logger = LoggerFactory.getLogger(SOAPSyncHelper.class); + private HashMap> promises; public SOAPSyncHelper() { @@ -48,7 +51,7 @@ public static String getHeaderValue(SOAPMessage message, String tagName) { if (elements.getLength() > 0) value = elements.item(0).getChildNodes().item(0).getNodeValue(); } catch (SOAPException e) { - e.printStackTrace(); + logger.warn("getHeaderValue() failed", e); } return value; } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandler.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandler.java index 7e62b6434..e29e2225d 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandler.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WSHttpHandler.java @@ -29,11 +29,17 @@ of this software and associated documentation files (the "Software"), to deal import com.sun.net.httpserver.HttpHandler; import javax.xml.soap.*; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; public class WSHttpHandler implements HttpHandler { + private static final Logger logger = LoggerFactory.getLogger(WSHttpHandler.class); + private String wsdlResourceName; private WSHttpHandlerEvents events; @@ -56,7 +62,7 @@ public void handle(HttpExchange httpExchange) throws IOException { confirmation.writeTo(responseStream); } catch (SOAPException e) { httpExchange.sendResponseHeaders(500, 0); - e.printStackTrace(); + logger.warn("handle() confirmation.writeTo failed", e); } responseStream.close(); } @@ -68,7 +74,7 @@ private SOAPMessage parse(InputStream request) throws IOException { MessageFactory messageFactory = MessageFactory.newInstance(SOAPConstants.SOAP_1_2_PROTOCOL); message = messageFactory.createMessage(new MimeHeaders(), request); } catch (SOAPException e) { - e.printStackTrace(); + logger.warn("parse() failed", e); } return message; } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceListener.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceListener.java index 065595e47..5646b8adb 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceListener.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceListener.java @@ -31,14 +31,18 @@ of this software and associated documentation files (the "Software"), to deal import eu.chargetime.ocpp.utilities.TimeoutTimer; import javax.xml.soap.SOAPMessage; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + import java.io.IOException; import java.net.InetSocketAddress; import java.util.HashMap; import java.util.concurrent.ExecutionException; public class WebServiceListener implements Listener { - - final private String WSDL_CENTRAL_SYSTEM = "eu/chargetime/ocpp/OCPP_CentralSystemService_1.6.wsdl"; + private static final Logger logger = LoggerFactory.getLogger(WebServiceListener.class); + private static final String WSDL_CENTRAL_SYSTEM = "eu/chargetime/ocpp/OCPP_CentralSystemService_1.6.wsdl"; private ListenerEvents events; private String fromUrl = null; @@ -56,7 +60,7 @@ public void open(String hostname, int port, ListenerEvents listenerEvents) { server.setExecutor(java.util.concurrent.Executors.newCachedThreadPool()); server.start(); } catch (IOException e) { - e.printStackTrace(); + logger.warn("open() failed", e); } } @@ -111,9 +115,9 @@ public SOAPMessage incomingRequest(SOAPMessageInfo messageInfo) { try { confirmation = chargeBoxes.get(identity).relay(message).get(); } catch (InterruptedException e) { - e.printStackTrace(); + logger.warn("incomingRequest() chargeBoxes.relay failed", e); } catch (ExecutionException e) { - e.printStackTrace(); + logger.warn("incomingRequest() chargeBoxes.relay failed", e); } return confirmation; diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceReceiver.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceReceiver.java index aaa83bf39..f992f4d24 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceReceiver.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceReceiver.java @@ -30,7 +30,12 @@ of this software and associated documentation files (the "Software"), to deal import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + public class WebServiceReceiver extends SOAPSyncHelper implements Receiver { + private static final Logger logger = LoggerFactory.getLogger(WebServiceReceiver.class); + private RadioEvents events; SOAPConnection soapConnection; private String url; @@ -50,7 +55,7 @@ public void disconnect() { soapConnection.close(); connected = false; } catch (SOAPException e) { - e.printStackTrace(); + logger.info("disconnect() failed", e); } } events.disconnected(); @@ -66,7 +71,7 @@ public void accept(RadioEvents events) { connected = true; events.connected(); } catch (SOAPException e) { - e.printStackTrace(); + logger.warn("accept() failed", e); } } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceTransmitter.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceTransmitter.java index c63b8d9b5..1aa2837a1 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceTransmitter.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebServiceTransmitter.java @@ -5,6 +5,9 @@ import javax.xml.soap.SOAPException; import javax.xml.soap.SOAPMessage; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /* ChargeTime.eu - Java-OCA-OCPP @@ -32,6 +35,8 @@ of this software and associated documentation files (the "Software"), to deal */ public class WebServiceTransmitter extends SOAPSyncHelper implements Transmitter { + private static final Logger logger = LoggerFactory.getLogger(WebServiceTransmitter.class); + SOAPConnection soapConnection; private String url; private RadioEvents events; @@ -48,7 +53,7 @@ public void disconnect() { soapConnection.close(); connected = false; } catch (SOAPException e) { - e.printStackTrace(); + logger.info("disconnect() failed", e); } } events.disconnected(); @@ -64,7 +69,7 @@ public void connect(String uri, RadioEvents events) { connected = true; events.connected(); } catch (SOAPException e) { - e.printStackTrace(); + logger.warn("connect() failed", e); } } @@ -77,7 +82,7 @@ protected void sendRequest(final SOAPMessage message) throws NotConnectedExcepti try { events.receivedMessage(soapConnection.call(message, url)); } catch (SOAPException e) { - e.printStackTrace(); + logger.warn("sendRequest() failed", e); disconnect(); } }); diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java index 8a1c67fe0..5b5fb4b7a 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketListener.java @@ -29,13 +29,16 @@ of this software and associated documentation files (the "Software"), to deal import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.io.IOException; import java.net.InetSocketAddress; import java.util.HashMap; public class WebSocketListener implements Listener { - + private static final Logger logger = LoggerFactory.getLogger(WebSocketListener.class); + private WebSocketServer server; private HashMap sockets; private boolean handleRequestAsync; @@ -89,9 +92,9 @@ public void close() { server.stop(1); } catch (IOException e) { - e.printStackTrace(); + logger.info("close() failed", e); } catch (InterruptedException e) { - e.printStackTrace(); + logger.info("close() failed", e); } } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketTransmitter.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketTransmitter.java index 0dd4c1ac6..c7bc3b9c1 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketTransmitter.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/WebSocketTransmitter.java @@ -3,6 +3,8 @@ import org.java_websocket.client.WebSocketClient; import org.java_websocket.exceptions.WebsocketNotConnectedException; import org.java_websocket.handshake.ServerHandshake; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import java.net.URI; @@ -38,6 +40,8 @@ of this software and associated documentation files (the "Software"), to deal */ public class WebSocketTransmitter implements Transmitter { + private static final Logger logger = LoggerFactory.getLogger(WebSocketTransmitter.class); + private WebSocketClient client; @Override @@ -65,13 +69,13 @@ public void onClose(int i, String s, boolean b) @Override public void onError(Exception ex) { - ex.printStackTrace(); + logger.warn("onError() triggered", ex); } }; try { client.connectBlocking(); } catch (Exception ex) { - ex.printStackTrace(); + logger.warn("client.connectBlocking() failed", ex); } } @@ -81,7 +85,7 @@ public void disconnect() try { client.closeBlocking(); } catch (Exception ex) { - ex.printStackTrace(); + logger.info("client.closeBlocking() failed", ex); } } diff --git a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/core/SampledValue.java b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/core/SampledValue.java index 96cbac09e..919a4429f 100644 --- a/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/core/SampledValue.java +++ b/ocpp-v1_6/src/main/java/eu/chargetime/ocpp/model/core/SampledValue.java @@ -8,6 +8,9 @@ import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.XmlType; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + /* * ChargeTime.eu - Java-OCA-OCPP * @@ -40,7 +43,9 @@ @XmlRootElement @XmlType(propOrder = {"value", "context", "format", "measurand", "phase", "location", "unit"}) public class SampledValue implements Validatable { - private String value; + private static final Logger logger = LoggerFactory.getLogger(SampledValue.class); + + private String value; private String context; private ValueFormat format; private String measurand; @@ -56,7 +61,7 @@ public SampledValue() { setLocation(Location.Outlet); setUnit("Wh"); } catch (PropertyConstraintException ex) { - ex.printStackTrace(); + logger.error("constructor of SampledValue failed", ex); } }