4
4
import eu .chargetime .ocpp .model .CallErrorMessage ;
5
5
import eu .chargetime .ocpp .model .CallMessage ;
6
6
import eu .chargetime .ocpp .model .CallResultMessage ;
7
- import eu .chargetime .ocpp .model .Message ;
8
7
import eu .chargetime .ocpp .model .Exclude ;
9
-
8
+ import eu . chargetime . ocpp . model . Message ;
10
9
import java .lang .reflect .Type ;
11
10
import java .time .ZonedDateTime ;
12
11
import java .time .format .DateTimeFormatter ;
@@ -79,6 +78,16 @@ public JSONCommunicator(Radio radio) {
79
78
super (radio );
80
79
}
81
80
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
+
82
91
private static class ZonedDateTimeSerializer
83
92
implements JsonSerializer <ZonedDateTime >, JsonDeserializer <ZonedDateTime > {
84
93
@@ -101,17 +110,18 @@ public ZonedDateTime deserialize(
101
110
static {
102
111
GsonBuilder builder = new GsonBuilder ();
103
112
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
+ });
115
125
116
126
gson = builder .disableHtmlEscaping ().create ();
117
127
}
@@ -147,26 +157,35 @@ protected Message parse(Object json) {
147
157
Message message ;
148
158
JsonParser parser = new JsonParser ();
149
159
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 ;
167
186
}
168
187
169
- message .setId (array . get ( INDEX_UNIQUEID ). getAsString () );
188
+ message .setId (messageId );
170
189
171
190
return message ;
172
191
}
0 commit comments