Skip to content

Commit 3381d52

Browse files
author
Max Presman
committed
move JSON functionality to a central parser to abstract JSON libraries
1 parent 9ae8783 commit 3381d52

28 files changed

+142
-178
lines changed

src/main/java/com/pubnub/api/PubNub.java

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -24,35 +24,35 @@
2424
import com.pubnub.api.endpoints.push.RemoveAllPushChannelsForDevice;
2525
import com.pubnub.api.endpoints.push.RemoveChannelsFromPush;
2626
import com.pubnub.api.managers.BasePathManager;
27+
import com.pubnub.api.managers.MapperManager;
2728
import com.pubnub.api.managers.PublishSequenceManager;
2829
import com.pubnub.api.managers.RetrofitManager;
2930
import com.pubnub.api.managers.SubscriptionManager;
3031
import com.pubnub.api.vendor.Crypto;
31-
import lombok.AccessLevel;
3232
import lombok.Getter;
33-
import lombok.extern.slf4j.Slf4j;
3433

3534
import java.util.Date;
3635
import java.util.List;
3736
import java.util.UUID;
3837

3938

40-
@Getter
41-
@Slf4j
4239
public class PubNub {
4340

41+
@Getter
4442
private PNConfiguration configuration;
45-
@Getter(AccessLevel.NONE)
43+
44+
@Getter
45+
private MapperManager mapper;
46+
4647
private String instanceId;
47-
@Getter(AccessLevel.NONE)
48+
4849
private SubscriptionManager subscriptionManager;
49-
@Getter(AccessLevel.NONE)
50+
5051
private BasePathManager basePathManager;
51-
@Getter(AccessLevel.NONE)
52+
5253
private PublishSequenceManager publishSequenceManager;
53-
@Getter(AccessLevel.NONE)
54-
private RetrofitManager retrofitManager;
5554

55+
private RetrofitManager retrofitManager;
5656

5757
private static final int TIMESTAMP_DIVIDER = 1000;
5858
private static final int MAX_SEQUENCE = 65535;
@@ -61,6 +61,7 @@ public class PubNub {
6161

6262
public PubNub(final PNConfiguration initialConfig) {
6363
this.configuration = initialConfig;
64+
this.mapper = new MapperManager();
6465
this.basePathManager = new BasePathManager(initialConfig);
6566
this.retrofitManager = new RetrofitManager(this);
6667
this.subscriptionManager = new SubscriptionManager(this, retrofitManager);

src/main/java/com/pubnub/api/endpoints/Endpoint.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33

44
import com.fasterxml.jackson.databind.JsonNode;
5-
import com.fasterxml.jackson.databind.ObjectMapper;
65
import com.pubnub.api.PubNub;
76
import com.pubnub.api.PubNubException;
87
import com.pubnub.api.builder.PubNubErrorBuilder;
98
import com.pubnub.api.callbacks.PNCallback;
109
import com.pubnub.api.enums.PNOperationType;
1110
import com.pubnub.api.enums.PNStatusCategory;
11+
import com.pubnub.api.managers.MapperManager;
1212
import com.pubnub.api.models.consumer.PNErrorData;
1313
import com.pubnub.api.models.consumer.PNStatus;
1414
import lombok.AccessLevel;
@@ -50,12 +50,12 @@ public abstract class Endpoint<Input, Output> {
5050
private static final int SERVER_RESPONSE_FORBIDDEN = 403;
5151
private static final int SERVER_RESPONSE_BAD_REQUEST = 400;
5252

53-
private ObjectMapper mapper;
53+
private MapperManager mapper;
5454

5555
public Endpoint(final PubNub pubnubInstance, Retrofit retrofitInstance) {
5656
this.pubnub = pubnubInstance;
5757
this.retrofit = retrofitInstance;
58-
this.mapper = new ObjectMapper();
58+
this.mapper = this.pubnub.getMapper();
5959
}
6060

6161

@@ -87,8 +87,8 @@ public final Output sync() throws PubNubException {
8787
}
8888

8989
try {
90-
responseBody = mapper.readValue(responseBodyText, JsonNode.class);
91-
} catch (IOException e) {
90+
responseBody = mapper.fromJson(responseBodyText, JsonNode.class);
91+
} catch (PubNubException e) {
9292
responseBody = null;
9393
}
9494

@@ -138,8 +138,8 @@ public void onResponse(final Call<Input> performedCall, final Response<Input> re
138138
}
139139

140140
try {
141-
responseBody = mapper.readValue(responseBodyText, JsonNode.class);
142-
} catch (IOException e) {
141+
responseBody = mapper.fromJson(responseBodyText, JsonNode.class);
142+
} catch (PubNubException e) {
143143
responseBody = null;
144144
}
145145

@@ -225,7 +225,7 @@ public void onFailure(final Call<Input> performedCall, final Throwable throwable
225225
public void retry() {
226226
silenceFailures = false;
227227
async(cachedCallback);
228-
};
228+
}
229229

230230
/**
231231
* cancel the operation but do not alert anybody, useful for restarting the heartbeats and subscribe loops.

src/main/java/com/pubnub/api/endpoints/FetchMessages.java

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.pubnub.api.endpoints;
22

33
import com.fasterxml.jackson.databind.JsonNode;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
54
import com.fasterxml.jackson.databind.node.ObjectNode;
65
import com.pubnub.api.PubNub;
76
import com.pubnub.api.PubNubException;
87
import com.pubnub.api.PubNubUtil;
98
import com.pubnub.api.builder.PubNubErrorBuilder;
109
import com.pubnub.api.enums.PNOperationType;
10+
import com.pubnub.api.managers.MapperManager;
1111
import com.pubnub.api.models.server.HistoryForChannelsEnvelope;
1212
import com.pubnub.api.models.server.HistoryForChannelsItem;
1313
import com.pubnub.api.vendor.Crypto;
@@ -20,7 +20,6 @@
2020
import retrofit2.http.Path;
2121
import retrofit2.http.QueryMap;
2222

23-
import java.io.IOException;
2423
import java.util.ArrayList;
2524
import java.util.List;
2625
import java.util.Map;
@@ -116,7 +115,7 @@ private JsonNode processMessage(JsonNode message) throws PubNubException {
116115
}
117116

118117
Crypto crypto = new Crypto(this.getPubnub().getConfiguration().getCipherKey());
119-
ObjectMapper mapper = new ObjectMapper();
118+
MapperManager mapper = this.getPubnub().getMapper();
120119
String inputText;
121120
String outputText;
122121
JsonNode outputObject;
@@ -128,14 +127,9 @@ private JsonNode processMessage(JsonNode message) throws PubNubException {
128127
}
129128

130129
outputText = crypto.decrypt(inputText);
130+
outputObject = mapper.fromJson(outputText, JsonNode.class);
131131

132-
try {
133-
outputObject = mapper.readValue(outputText, JsonNode.class);
134-
} catch (IOException e) {
135-
throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_PARSING_ERROR).errormsg(e.getMessage()).build();
136-
}
137-
138-
// inject the decoded resposne into the payload
132+
// inject the decoded response into the payload
139133
if (message.isObject() && message.has("message")) {
140134
ObjectNode objectNode = (ObjectNode) message;
141135
objectNode.set("message", outputObject);

src/main/java/com/pubnub/api/endpoints/History.java

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.pubnub.api.endpoints;
22

33
import com.fasterxml.jackson.databind.JsonNode;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
54
import com.fasterxml.jackson.databind.node.ArrayNode;
65
import com.fasterxml.jackson.databind.node.ObjectNode;
7-
import com.pubnub.api.vendor.Crypto;
86
import com.pubnub.api.PubNub;
97
import com.pubnub.api.PubNubException;
108
import com.pubnub.api.builder.PubNubErrorBuilder;
119
import com.pubnub.api.enums.PNOperationType;
1210
import com.pubnub.api.models.consumer.history.PNHistoryItemResult;
1311
import com.pubnub.api.models.consumer.history.PNHistoryResult;
12+
import com.pubnub.api.vendor.Crypto;
1413
import lombok.Setter;
1514
import lombok.experimental.Accessors;
1615
import retrofit2.Call;
@@ -20,7 +19,6 @@
2019
import retrofit2.http.Path;
2120
import retrofit2.http.QueryMap;
2221

23-
import java.io.IOException;
2422
import java.util.ArrayList;
2523
import java.util.List;
2624
import java.util.Map;
@@ -137,7 +135,6 @@ private JsonNode processMessage(JsonNode message) throws PubNubException {
137135
}
138136

139137
Crypto crypto = new Crypto(this.getPubnub().getConfiguration().getCipherKey());
140-
ObjectMapper mapper = new ObjectMapper();
141138
String inputText;
142139
String outputText;
143140
JsonNode outputObject;
@@ -149,14 +146,9 @@ private JsonNode processMessage(JsonNode message) throws PubNubException {
149146
}
150147

151148
outputText = crypto.decrypt(inputText);
149+
outputObject = this.getPubnub().getMapper().fromJson(outputText, JsonNode.class);
152150

153-
try {
154-
outputObject = mapper.readValue(outputText, JsonNode.class);
155-
} catch (IOException e) {
156-
throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_PARSING_ERROR).errormsg(e.getMessage()).build();
157-
}
158-
159-
// inject the decoded resposne into the payload
151+
// inject the decoded response into the payload
160152
if (message.isObject() && message.has("pn_other")) {
161153
ObjectNode objectNode = (ObjectNode) message;
162154
objectNode.set("pn_other", outputObject);

src/main/java/com/pubnub/api/endpoints/access/Grant.java

Lines changed: 7 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
package com.pubnub.api.endpoints.access;
22

33
import com.fasterxml.jackson.core.type.TypeReference;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
54
import com.pubnub.api.PubNub;
65
import com.pubnub.api.PubNubException;
76
import com.pubnub.api.PubNubUtil;
87
import com.pubnub.api.builder.PubNubErrorBuilder;
98
import com.pubnub.api.endpoints.Endpoint;
109
import com.pubnub.api.enums.PNOperationType;
10+
import com.pubnub.api.managers.MapperManager;
1111
import com.pubnub.api.models.consumer.access_manager.PNAccessManagerGrantResult;
1212
import com.pubnub.api.models.consumer.access_manager.PNAccessManagerKeyData;
1313
import com.pubnub.api.models.consumer.access_manager.PNAccessManagerKeysData;
@@ -19,7 +19,6 @@
1919
import retrofit2.Response;
2020
import retrofit2.Retrofit;
2121

22-
import java.io.IOException;
2322
import java.util.ArrayList;
2423
import java.util.HashMap;
2524
import java.util.List;
@@ -101,7 +100,6 @@ protected Call<Envelope<AccessManagerGrantPayload>> doWork(Map<String, String> q
101100

102101
@Override
103102
protected PNAccessManagerGrantResult createResponse(Response<Envelope<AccessManagerGrantPayload>> input) throws PubNubException {
104-
ObjectMapper mapper = new ObjectMapper();
105103
PNAccessManagerGrantResult.PNAccessManagerGrantResultBuilder pnAccessManagerGrantResult = PNAccessManagerGrantResult.builder();
106104

107105
if (input.body() == null || input.body().getPayload() == null) {
@@ -121,18 +119,15 @@ protected PNAccessManagerGrantResult createResponse(Response<Envelope<AccessMana
121119
if (channelGroups.size() == 1) {
122120
constructedGroups.put(data.getChannelGroups().asText(), data.getAuthKeys());
123121
} else if (channelGroups.size() > 1) {
124-
try {
125-
HashMap<String, PNAccessManagerKeysData> channelGroupKeySet = mapper.readValue(data.getChannelGroups().toString(),
126-
new TypeReference<HashMap<String, PNAccessManagerKeysData>>() {
127-
});
122+
MapperManager mapper = this.getPubnub().getMapper();
123+
HashMap<String, PNAccessManagerKeysData> channelGroupKeySet = mapper.fromJson(data.getChannelGroups().toString(),
124+
new TypeReference<HashMap<String, PNAccessManagerKeysData>>() {
125+
});
128126
// for (String fetchedChannelGroup : channelGroupKeySet.keySet()) {
129127
// constructedGroups.put(fetchedChannelGroup, channelGroupKeySet.get(fetchedChannelGroup).getAuthKeys());
130128
// }
131-
for (Map.Entry<String, PNAccessManagerKeysData> entry : channelGroupKeySet.entrySet()) {
132-
constructedGroups.put(entry.getKey(), entry.getValue().getAuthKeys());
133-
}
134-
} catch (IOException e) {
135-
throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_PARSING_ERROR).errormsg(e.getMessage()).build();
129+
for (Map.Entry<String, PNAccessManagerKeysData> entry : channelGroupKeySet.entrySet()) {
130+
constructedGroups.put(entry.getKey(), entry.getValue().getAuthKeys());
136131
}
137132
}
138133
}

src/main/java/com/pubnub/api/endpoints/presence/Heartbeat.java

Lines changed: 3 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,12 @@
11
package com.pubnub.api.endpoints.presence;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
5-
import com.fasterxml.jackson.databind.ObjectWriter;
63
import com.pubnub.api.PubNub;
74
import com.pubnub.api.PubNubException;
85
import com.pubnub.api.PubNubUtil;
96
import com.pubnub.api.builder.PubNubErrorBuilder;
107
import com.pubnub.api.endpoints.Endpoint;
118
import com.pubnub.api.enums.PNOperationType;
9+
import com.pubnub.api.managers.MapperManager;
1210
import com.pubnub.api.models.server.Envelope;
1311
import lombok.Setter;
1412
import lombok.experimental.Accessors;
@@ -48,7 +46,7 @@ protected void validateParams() throws PubNubException {
4846

4947
@Override
5048
protected Call<Envelope> doWork(Map<String, String> params) throws PubNubException {
51-
ObjectWriter ow = new ObjectMapper().writer();
49+
MapperManager mapper = this.getPubnub().getMapper();
5250

5351
params.put("heartbeat", String.valueOf(this.getPubnub().getConfiguration().getPresenceTimeout()));
5452

@@ -65,14 +63,7 @@ protected Call<Envelope> doWork(Map<String, String> params) throws PubNubExcepti
6563
}
6664

6765
if (state != null) {
68-
String stringifiedState;
69-
70-
try {
71-
stringifiedState = ow.writeValueAsString(state);
72-
} catch (JsonProcessingException e) {
73-
throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INVALID_ARGUMENTS).errormsg(e.getMessage()).build();
74-
}
75-
66+
String stringifiedState = mapper.toJson(state);
7667
stringifiedState = PubNubUtil.urlEncode(stringifiedState);
7768
params.put("state", stringifiedState);
7869
}

src/main/java/com/pubnub/api/endpoints/presence/SetState.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
package com.pubnub.api.endpoints.presence;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
5-
import com.fasterxml.jackson.databind.ObjectWriter;
63
import com.pubnub.api.PubNub;
74
import com.pubnub.api.PubNubException;
85
import com.pubnub.api.PubNubUtil;
@@ -63,7 +60,6 @@ protected void validateParams() throws PubNubException {
6360

6461
@Override
6562
protected Call<Envelope<Map<String, Object>>> doWork(Map<String, String> params) throws PubNubException {
66-
ObjectWriter ow = new ObjectMapper().writer();
6763
String selectedUUID = uuid != null ? uuid : this.getPubnub().getConfiguration().getUuid();
6864
String stringifiedState;
6965

@@ -83,11 +79,7 @@ protected Call<Envelope<Map<String, Object>>> doWork(Map<String, String> params)
8379
params.put("channel-group", PubNubUtil.joinString(channelGroups, ","));
8480
}
8581

86-
try {
87-
stringifiedState = ow.writeValueAsString(state);
88-
} catch (JsonProcessingException e) {
89-
throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INVALID_ARGUMENTS).errormsg(e.getMessage()).build();
90-
}
82+
stringifiedState = this.getPubnub().getMapper().toJson(state);
9183

9284
stringifiedState = PubNubUtil.urlEncode(stringifiedState);
9385
params.put("state", stringifiedState);

src/main/java/com/pubnub/api/endpoints/pubsub/Publish.java

Lines changed: 7 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,12 @@
11
package com.pubnub.api.endpoints.pubsub;
22

3-
import com.fasterxml.jackson.core.JsonProcessingException;
4-
import com.fasterxml.jackson.databind.ObjectMapper;
53
import com.pubnub.api.PubNub;
64
import com.pubnub.api.PubNubException;
75
import com.pubnub.api.PubNubUtil;
86
import com.pubnub.api.builder.PubNubErrorBuilder;
97
import com.pubnub.api.endpoints.Endpoint;
108
import com.pubnub.api.enums.PNOperationType;
9+
import com.pubnub.api.managers.MapperManager;
1110
import com.pubnub.api.managers.PublishSequenceManager;
1211
import com.pubnub.api.models.consumer.PNPublishResult;
1312
import com.pubnub.api.vendor.Crypto;
@@ -65,24 +64,14 @@ protected final void validateParams() throws PubNubException {
6564

6665
@Override
6766
protected final Call<List<Object>> doWork(Map<String, String> params) throws PubNubException {
68-
String stringifiedMessage;
69-
String stringifiedMeta;
70-
ObjectMapper mapper = new ObjectMapper();
71-
72-
try {
73-
stringifiedMessage = mapper.writeValueAsString(message);
74-
} catch (JsonProcessingException e) {
75-
throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INVALID_ARGUMENTS).errormsg(e.getMessage()).build();
76-
}
67+
MapperManager mapper = this.getPubnub().getMapper();
68+
69+
String stringifiedMessage = mapper.toJson(message);
7770

7871
if (meta != null) {
79-
try {
80-
stringifiedMeta = mapper.writeValueAsString(meta);
81-
stringifiedMeta = PubNubUtil.urlEncode(stringifiedMeta);
82-
params.put("meta", stringifiedMeta);
83-
} catch (JsonProcessingException e) {
84-
throw PubNubException.builder().pubnubError(PubNubErrorBuilder.PNERROBJ_INVALID_ARGUMENTS).errormsg(e.getMessage()).build();
85-
}
72+
String stringifiedMeta = mapper.toJson(meta);
73+
stringifiedMeta = PubNubUtil.urlEncode(stringifiedMeta);
74+
params.put("meta", stringifiedMeta);
8675
}
8776

8877
if (shouldStore != null) {

0 commit comments

Comments
 (0)