Skip to content

Commit c31cf68

Browse files
committed
fix: ocpp callbacks were not triggered for ws/json
1 parent 3c653fd commit c31cf68

6 files changed

Lines changed: 66 additions & 30 deletions

File tree

src/main/java/de/rwth/idsg/steve/handler/AbstractOcppResponseHandler.java

Lines changed: 46 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,23 @@ public abstract class AbstractOcppResponseHandler<S extends RequestType, T exten
2727
// The default initial capacity is 10. We probably won't need that much.
2828
private ArrayList<OcppCallback<T>> callbackList = new ArrayList<>(2);
2929

30+
// -------------------------------------------------------------------------
31+
// AsyncHandler
32+
// -------------------------------------------------------------------------
33+
34+
@Override
35+
public void handleResponse(Response<T> res) {
36+
try {
37+
processResponse(res.get());
38+
} catch (Exception e) {
39+
processException(e);
40+
}
41+
}
42+
43+
// -------------------------------------------------------------------------
44+
// OcppResponseHandler
45+
// -------------------------------------------------------------------------
46+
3047
@Override
3148
public void addCallback(OcppCallback<T> cb) {
3249
callbackList.add(cb);
@@ -37,32 +54,21 @@ public S getRequest() {
3754
return requestTask.getRequest();
3855
}
3956

40-
// -------------------------------------------------------------------------
41-
// AsyncHandler
42-
// -------------------------------------------------------------------------
43-
4457
@Override
45-
public void handleResponse(Response<T> res) {
46-
try {
47-
handleResult(res.get());
48-
success(res.get());
58+
public abstract void handleResult(T response);
4959

50-
} catch (Exception e) {
51-
handleException(e);
52-
failed(e.getMessage());
53-
}
60+
@Override
61+
public void handleException(Exception e) {
62+
processException(e);
5463
}
5564

5665
// -------------------------------------------------------------------------
57-
// OcppResponseHandler
58-
//
59-
// Skip the method handleResult(T response), since it should be
60-
// implemented by subclasses depending on the actual response
66+
// WsOcppResponseHandler
6167
// -------------------------------------------------------------------------
6268

6369
@Override
64-
public void handleException(Exception e) {
65-
requestTask.addNewError(chargeBoxId, e);
70+
public void handleResponse(T response) {
71+
processResponse(response);
6672
}
6773

6874
/**
@@ -73,10 +79,12 @@ public void handleException(Exception e) {
7379
*/
7480
@Override
7581
public void handleError(OcppJsonError error) {
76-
requestTask.addNewResponse(chargeBoxId, error.toString());
77-
78-
// But, as far as the callbacks are concerned, this is still a failure.
79-
failed(error.getErrorDescription());
82+
try {
83+
requestTask.addNewResponse(chargeBoxId, error.toString());
84+
} finally {
85+
// But, as far as the callbacks are concerned, this is still a failure.
86+
failed(error.getErrorDescription());
87+
}
8088
}
8189

8290
// -------------------------------------------------------------------------
@@ -88,6 +96,22 @@ public void handleError(OcppJsonError error) {
8896
// callback in line.
8997
// -------------------------------------------------------------------------
9098

99+
private void processResponse(T response) {
100+
try {
101+
handleResult(response);
102+
} finally {
103+
success(response);
104+
}
105+
}
106+
107+
private void processException(Exception e) {
108+
try {
109+
requestTask.addNewError(chargeBoxId, e);
110+
} finally {
111+
failed(e.getMessage());
112+
}
113+
}
114+
91115
private void success(T response) {
92116
for (OcppCallback<T> c : callbackList) {
93117
try {
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package de.rwth.idsg.steve.handler;
2+
3+
import de.rwth.idsg.steve.ocpp.ResponseType;
4+
import de.rwth.idsg.steve.ocpp.ws.data.OcppJsonError;
5+
6+
/**
7+
* @author Sevket Goekay <goekay@dbis.rwth-aachen.de>
8+
* @since 20.06.2016
9+
*/
10+
public interface OcppJsonResponseHandler<T extends ResponseType> {
11+
void handleResponse(T response);
12+
void handleError(OcppJsonError error);
13+
}

src/main/java/de/rwth/idsg/steve/handler/OcppResponseHandler.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22

33
import de.rwth.idsg.steve.ocpp.RequestType;
44
import de.rwth.idsg.steve.ocpp.ResponseType;
5-
import de.rwth.idsg.steve.ocpp.ws.data.OcppJsonError;
65

76
import javax.xml.ws.AsyncHandler;
87

@@ -12,12 +11,12 @@
1211
* @author Sevket Goekay <goekay@dbis.rwth-aachen.de>
1312
* @since 21.03.2015
1413
*/
15-
public interface OcppResponseHandler<S extends RequestType, T extends ResponseType> extends AsyncHandler<T> {
14+
public interface OcppResponseHandler<S extends RequestType, T extends ResponseType>
15+
extends AsyncHandler<T>, OcppJsonResponseHandler<T> {
1616

1717
void addCallback(OcppCallback<T> cb);
1818
S getRequest();
1919

2020
void handleResult(T response);
21-
void handleError(OcppJsonError error);
2221
void handleException(Exception e);
2322
}

src/main/java/de/rwth/idsg/steve/ocpp/ws/data/CommunicationContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package de.rwth.idsg.steve.ocpp.ws.data;
22

3-
import de.rwth.idsg.steve.handler.OcppResponseHandler;
3+
import de.rwth.idsg.steve.handler.OcppJsonResponseHandler;
44
import lombok.Getter;
55
import lombok.Setter;
66
import org.springframework.web.socket.WebSocketSession;
@@ -23,7 +23,7 @@ public class CommunicationContext {
2323
private OcppJsonMessage incomingMessage;
2424
private OcppJsonMessage outgoingMessage;
2525

26-
private OcppResponseHandler handler;
26+
private OcppJsonResponseHandler handler;
2727
private FutureResponseContext futureResponseContext;
2828

2929
public boolean isSetOutgoingError() {

src/main/java/de/rwth/idsg/steve/ocpp/ws/data/FutureResponseContext.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package de.rwth.idsg.steve.ocpp.ws.data;
22

3-
import de.rwth.idsg.steve.handler.OcppResponseHandler;
3+
import de.rwth.idsg.steve.handler.OcppJsonResponseHandler;
44
import de.rwth.idsg.steve.ocpp.ResponseType;
55
import lombok.Getter;
66
import lombok.RequiredArgsConstructor;
@@ -14,6 +14,6 @@
1414
@Setter
1515
@RequiredArgsConstructor
1616
public class FutureResponseContext {
17-
private final OcppResponseHandler handler;
17+
private final OcppJsonResponseHandler handler;
1818
private final Class<? extends ResponseType> responseClass;
1919
}

src/main/java/de/rwth/idsg/steve/ocpp/ws/pipeline/IncomingPipeline.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ public void process(CommunicationContext context) {
4040

4141
} else if (msg instanceof OcppJsonResult) {
4242
OcppJsonResult result = (OcppJsonResult) msg;
43-
context.getHandler().handleResult(result.getPayload());
43+
context.getHandler().handleResponse(result.getPayload());
4444

4545
} else if (msg instanceof OcppJsonError) {
4646
OcppJsonError result = (OcppJsonError) msg;

0 commit comments

Comments
 (0)