From 53664260979341c76488184f657ba9f1011d1839 Mon Sep 17 00:00:00 2001 From: Robert Schlabbach Date: Wed, 6 May 2020 11:25:55 +0200 Subject: [PATCH] Make OCPP library compatible with Android 8 Android 8's Jack has issues processing class files with lambda operations that implicitly use classes which are not part of the project, resulting in build failures. Replace the four occurrences where such lambdas are used with functionally identical but less shorthand code, so that the OCPP library will build for Android 8. --- .../ocpp/AsyncPromiseFulfillerDecorator.java | 9 ++++++++- .../eu/chargetime/ocpp/WebServiceListener.java | 10 +++++++--- .../eu/chargetime/ocpp/WebServiceReceiver.java | 13 ++++++++----- .../chargetime/ocpp/WebServiceTransmitter.java | 17 ++++++++++------- 4 files changed, 33 insertions(+), 16 deletions(-) diff --git a/ocpp-common/src/main/java/eu/chargetime/ocpp/AsyncPromiseFulfillerDecorator.java b/ocpp-common/src/main/java/eu/chargetime/ocpp/AsyncPromiseFulfillerDecorator.java index 52a8b0f8c..8ca6ad9fe 100644 --- a/ocpp-common/src/main/java/eu/chargetime/ocpp/AsyncPromiseFulfillerDecorator.java +++ b/ocpp-common/src/main/java/eu/chargetime/ocpp/AsyncPromiseFulfillerDecorator.java @@ -36,7 +36,14 @@ public class AsyncPromiseFulfillerDecorator implements PromiseFulfiller { @Override public void fulfill( CompletableFuture promise, SessionEvents eventHandler, Request request) { - new Thread(() -> promiseFulfiller.fulfill(promise, eventHandler, request)).start(); + new Thread( + new Runnable() { + @Override + public void run() { + promiseFulfiller.fulfill(promise, eventHandler, request); + } + }) + .start(); } public AsyncPromiseFulfillerDecorator(PromiseFulfiller promiseFulfiller) { 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 a60c5571e..d37dfe065 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 @@ -28,6 +28,7 @@ of this software and associated documentation files (the "Software"), to deal import com.sun.net.httpserver.HttpServer; import eu.chargetime.ocpp.model.SOAPHostInfo; import eu.chargetime.ocpp.model.SessionInformation; +import eu.chargetime.ocpp.utilities.TimeoutHandler; import eu.chargetime.ocpp.utilities.TimeoutTimer; import java.io.IOException; import java.net.InetSocketAddress; @@ -121,9 +122,12 @@ public SOAPMessage incomingRequest(SOAPMessageInfo messageInfo) { TimeoutTimer timeoutTimer = new TimeoutTimer( INITIAL_TIMEOUT, - () -> { - session.close(); - chargeBoxes.remove(identity); + new TimeoutHandler() { + @Override + public void timeout() { + session.close(); + chargeBoxes.remove(identity); + } }); // TODO: Decorator created but not used 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 0e543bf3c..71f59ceb1 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 @@ -89,11 +89,14 @@ void sendRequest(SOAPMessage message) throws NotConnectedException { if (!connected) throw new NotConnectedException(); new Thread( - () -> { - try { - events.receivedMessage(soapConnection.call(message, url)); - } catch (SOAPException e) { - disconnect(); + new Runnable() { + @Override + public void run() { + try { + events.receivedMessage(soapConnection.call(message, url)); + } catch (SOAPException e) { + disconnect(); + } } }) .start(); 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 b6f2a3318..a748c386f 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 @@ -82,13 +82,16 @@ protected void sendRequest(final SOAPMessage message) throws NotConnectedExcepti if (!connected) throw new NotConnectedException(); Thread thread = new Thread( - () -> { - try { - SOAPMessage response = soapConnection.call(message, url); - events.receivedMessage(response); - } catch (SOAPException e) { - logger.warn("sendRequest() failed", e); - disconnect(); + new Runnable() { + @Override + public void run() { + try { + SOAPMessage response = soapConnection.call(message, url); + events.receivedMessage(response); + } catch (SOAPException e) { + logger.warn("sendRequest() failed", e); + disconnect(); + } } }); thread.start();