Skip to content

Commit 4859ecd

Browse files
authoredSep 30, 2023
Merge pull request #239 from ubitricity/master
Add OCPP 2.0.1 and multi-protocol support
2 parents 62353f4 + 2e1fcd8 commit 4859ecd

File tree

455 files changed

+59043
-160
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

455 files changed

+59043
-160
lines changed
 

‎OCPP-J/pom.xml

+2-2
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
<groupId>eu.chargetime.ocpp</groupId>
88
<artifactId>OCPP-J</artifactId>
9-
<version>1.0.2</version>
9+
<version>1.2.0</version>
1010
<packaging>jar</packaging>
1111

1212
<name>Java-OCA-OCPP OCPP-J</name>
@@ -50,7 +50,7 @@
5050
<dependency>
5151
<groupId>eu.chargetime.ocpp</groupId>
5252
<artifactId>common</artifactId>
53-
<version>1.0.2</version>
53+
<version>1.2.0</version>
5454
</dependency>
5555
<dependency>
5656
<groupId>com.google.code.gson</groupId>

‎OCPP-J/src/main/java/eu/chargetime/ocpp/JSONCommunicator.java

+50-31
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,8 @@
44
import eu.chargetime.ocpp.model.CallErrorMessage;
55
import eu.chargetime.ocpp.model.CallMessage;
66
import eu.chargetime.ocpp.model.CallResultMessage;
7-
import eu.chargetime.ocpp.model.Message;
87
import eu.chargetime.ocpp.model.Exclude;
9-
8+
import eu.chargetime.ocpp.model.Message;
109
import java.lang.reflect.Type;
1110
import java.time.ZonedDateTime;
1211
import java.time.format.DateTimeFormatter;
@@ -79,6 +78,16 @@ public JSONCommunicator(Radio radio) {
7978
super(radio);
8079
}
8180

81+
/**
82+
* Handle required injections.
83+
*
84+
* @param radio instance of the {@link Radio}.
85+
* @param enableTransactionQueue true if transaction queue should be enabled.
86+
*/
87+
public JSONCommunicator(Radio radio, boolean enableTransactionQueue) {
88+
super(radio, enableTransactionQueue);
89+
}
90+
8291
private static class ZonedDateTimeSerializer
8392
implements JsonSerializer<ZonedDateTime>, JsonDeserializer<ZonedDateTime> {
8493

@@ -101,17 +110,18 @@ public ZonedDateTime deserialize(
101110
static {
102111
GsonBuilder builder = new GsonBuilder();
103112
builder.registerTypeAdapter(ZonedDateTime.class, new ZonedDateTimeSerializer());
104-
builder.addSerializationExclusionStrategy(new ExclusionStrategy() {
105-
@Override
106-
public boolean shouldSkipClass(Class<?> clazz) {
107-
return false;
108-
}
109-
110-
@Override
111-
public boolean shouldSkipField(FieldAttributes field) {
112-
return field.getAnnotation(Exclude.class) != null;
113-
}
114-
});
113+
builder.addSerializationExclusionStrategy(
114+
new ExclusionStrategy() {
115+
@Override
116+
public boolean shouldSkipClass(Class<?> clazz) {
117+
return false;
118+
}
119+
120+
@Override
121+
public boolean shouldSkipField(FieldAttributes field) {
122+
return field.getAnnotation(Exclude.class) != null;
123+
}
124+
});
115125

116126
gson = builder.disableHtmlEscaping().create();
117127
}
@@ -147,26 +157,35 @@ protected Message parse(Object json) {
147157
Message message;
148158
JsonParser parser = new JsonParser();
149159
JsonArray array = parser.parse(json.toString()).getAsJsonArray();
150-
151-
if (array.get(INDEX_MESSAGEID).getAsInt() == TYPENUMBER_CALL) {
152-
message = new CallMessage();
153-
message.setAction(array.get(INDEX_CALL_ACTION).getAsString());
154-
message.setPayload(array.get(INDEX_CALL_PAYLOAD).toString());
155-
} else if (array.get(INDEX_MESSAGEID).getAsInt() == TYPENUMBER_CALLRESULT) {
156-
message = new CallResultMessage();
157-
message.setPayload(array.get(INDEX_CALLRESULT_PAYLOAD).toString());
158-
} else if (array.get(INDEX_MESSAGEID).getAsInt() == TYPENUMBER_CALLERROR) {
159-
message = new CallErrorMessage();
160-
((CallErrorMessage) message).setErrorCode(array.get(INDEX_CALLERROR_ERRORCODE).getAsString());
161-
((CallErrorMessage) message)
162-
.setErrorDescription(array.get(INDEX_CALLERROR_DESCRIPTION).getAsString());
163-
((CallErrorMessage) message).setRawPayload(array.get(INDEX_CALLERROR_PAYLOAD).toString());
164-
} else {
165-
logger.error("Unknown message type of message: {}", json.toString());
166-
throw new IllegalArgumentException("Unknown message type");
160+
String messageId = "-1";
161+
162+
try {
163+
messageId = array.get(INDEX_UNIQUEID).getAsString();
164+
if (array.get(INDEX_MESSAGEID).getAsInt() == TYPENUMBER_CALL) {
165+
message = new CallMessage();
166+
message.setAction(array.get(INDEX_CALL_ACTION).getAsString());
167+
message.setPayload(array.get(INDEX_CALL_PAYLOAD).toString());
168+
} else if (array.get(INDEX_MESSAGEID).getAsInt() == TYPENUMBER_CALLRESULT) {
169+
message = new CallResultMessage();
170+
message.setPayload(array.get(INDEX_CALLRESULT_PAYLOAD).toString());
171+
} else if (array.get(INDEX_MESSAGEID).getAsInt() == TYPENUMBER_CALLERROR) {
172+
message = new CallErrorMessage();
173+
((CallErrorMessage) message).setErrorCode(array.get(INDEX_CALLERROR_ERRORCODE).getAsString());
174+
((CallErrorMessage) message)
175+
.setErrorDescription(array.get(INDEX_CALLERROR_DESCRIPTION).getAsString());
176+
((CallErrorMessage) message).setRawPayload(array.get(INDEX_CALLERROR_PAYLOAD).toString());
177+
} else {
178+
logger.error("Unknown message type of message: {}", json.toString());
179+
sendCallError(messageId, null, "MessageTypeNotSupported", null);
180+
return null;
181+
}
182+
} catch (Exception e) {
183+
logger.error("Exception while parsing message: {}", json.toString());
184+
sendCallError(messageId, null, "RpcFrameworkError", e.getMessage());
185+
return null;
167186
}
168187

169-
message.setId(array.get(INDEX_UNIQUEID).getAsString());
188+
message.setId(messageId);
170189

171190
return message;
172191
}

0 commit comments

Comments
 (0)
Please sign in to comment.