Skip to content

Commit 4acc6dc

Browse files
committed
Adapt JSON RPC support to Java 6
References #378
1 parent 6fced10 commit 4acc6dc

File tree

4 files changed

+39
-16
lines changed

4 files changed

+39
-16
lines changed

src/main/java/com/rabbitmq/tools/jsonrpc/JacksonJsonRpcMapper.java

Lines changed: 25 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -57,9 +57,11 @@ public JacksonJsonRpcMapper() {
5757
public JsonRpcRequest parse(String requestBody, ServiceDescription description) {
5858
JsonFactory jsonFactory = new MappingJsonFactory();
5959
String method = null, version = null;
60-
final List<TreeNode> parameters = new ArrayList<>();
60+
final List<TreeNode> parameters = new ArrayList<TreeNode>();
6161
Object id = null;
62-
try (JsonParser parser = jsonFactory.createParser(requestBody)) {
62+
JsonParser parser = null;
63+
try {
64+
parser = jsonFactory.createParser(requestBody);
6365
while (parser.nextToken() != null) {
6466
JsonToken token = parser.currentToken();
6567
if (token == JsonToken.FIELD_NAME) {
@@ -98,17 +100,25 @@ public JsonRpcRequest parse(String requestBody, ServiceDescription description)
98100
}
99101
} catch (IOException e) {
100102
throw new JsonRpcMappingException("Error during JSON parsing", e);
103+
} finally {
104+
if (parser != null) {
105+
try {
106+
parser.close();
107+
} catch (IOException e) {
108+
throw new JsonRpcMappingException("Error while closing JSON parser", e);
109+
}
110+
}
101111
}
102112

103113
if (method == null) {
104114
throw new IllegalArgumentException("Could not find method to invoke in request");
105115
}
106116

107-
List<Object> convertedParameters = new ArrayList<>(parameters.size());
117+
List<Object> convertedParameters = new ArrayList<Object>(parameters.size());
108118
if (!parameters.isEmpty()) {
109119
ProcedureDescription proc = description.getProcedure(method, parameters.size());
110120
Method internalMethod = proc.internal_getMethod();
111-
for (int i = 0; i < internalMethod.getParameterCount(); i++) {
121+
for (int i = 0; i < internalMethod.getParameterTypes().length; i++) {
112122
TreeNode parameterNode = parameters.get(i);
113123
try {
114124
Class<?> parameterType = internalMethod.getParameterTypes()[i];
@@ -132,7 +142,9 @@ public JsonRpcResponse parse(String responseBody, Class<?> expectedReturnType) {
132142
Object result = null;
133143
JsonRpcException exception = null;
134144
Map<String, Object> errorMap = null;
135-
try (JsonParser parser = jsonFactory.createParser(responseBody)) {
145+
JsonParser parser = null;
146+
try {
147+
parser = jsonFactory.createParser(responseBody);
136148
while (parser.nextToken() != null) {
137149
JsonToken token = parser.currentToken();
138150
if (token == JsonToken.FIELD_NAME) {
@@ -158,6 +170,14 @@ public JsonRpcResponse parse(String responseBody, Class<?> expectedReturnType) {
158170
}
159171
} catch (IOException e) {
160172
throw new JsonRpcMappingException("Error during JSON parsing", e);
173+
} finally {
174+
if (parser != null) {
175+
try {
176+
parser.close();
177+
} catch (IOException e) {
178+
throw new JsonRpcMappingException("Error while closing JSON parser", e);
179+
}
180+
}
161181
}
162182
return new JsonRpcResponse(result, errorMap, exception);
163183
}

src/main/java/com/rabbitmq/tools/jsonrpc/ServiceDescription.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ public ServiceDescription(Map<String, Object> rawServiceDescription) {
4848
}
4949

5050
public ServiceDescription(Class<?> klass) {
51-
this.procedures = new HashMap<>();
51+
this.procedures = new HashMap<String, ProcedureDescription>();
5252
for (Method m: klass.getMethods()) {
5353
ProcedureDescription proc = new ProcedureDescription(m);
5454
addProcedure(proc);
@@ -66,7 +66,7 @@ public Collection<ProcedureDescription> getProcs() {
6666

6767
/** Private API - used via reflection during parsing/loading */
6868
public void setProcs(Collection<Map<String, Object>> p) {
69-
procedures = new HashMap<>();
69+
procedures = new HashMap<String, ProcedureDescription>();
7070
for (Map<String, Object> pm: p) {
7171
ProcedureDescription proc = new ProcedureDescription(pm);
7272
addProcedure(proc);

src/test/java/com/rabbitmq/client/AbstractJsonRpcTest.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -43,11 +43,14 @@ public void init() throws Exception {
4343
serverChannel = serverConnection.createChannel();
4444
serverChannel.queueDeclare(queue, false, false, false, null);
4545
server = new JsonRpcServer(serverChannel, queue, RpcService.class, new DefaultRpcservice(), createMapper());
46-
new Thread(() -> {
47-
try {
48-
server.mainloop();
49-
} catch (Exception e) {
50-
// safe to ignore when loops ends/server is canceled
46+
new Thread(new Runnable() {
47+
@Override
48+
public void run() {
49+
try {
50+
server.mainloop();
51+
} catch (Exception e) {
52+
// safe to ignore when loops ends/server is canceled
53+
}
5154
}
5255
}).start();
5356
client = new JsonRpcClient(clientChannel, "", queue, 1000, createMapper());

src/test/java/com/rabbitmq/client/test/GeneratedClassesTest.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ public void amqpPropertiesEqualsHashCode() {
4545
checkEquals(
4646
new AMQP.BasicProperties.Builder()
4747
.deliveryMode(1)
48-
.headers(singletonMap("one", "two"))
48+
.headers(singletonMap("one", (Object) "two"))
4949
.correlationId("123")
5050
.expiration("later")
5151
.priority(10)
@@ -61,7 +61,7 @@ public void amqpPropertiesEqualsHashCode() {
6161
.build(),
6262
new AMQP.BasicProperties.Builder()
6363
.deliveryMode(1)
64-
.headers(singletonMap("one", "two"))
64+
.headers(singletonMap("one", (Object) "two"))
6565
.correlationId("123")
6666
.expiration("later")
6767
.priority(10)
@@ -79,7 +79,7 @@ public void amqpPropertiesEqualsHashCode() {
7979
checkNotEquals(
8080
new AMQP.BasicProperties.Builder()
8181
.deliveryMode(1)
82-
.headers(singletonMap("one", "two"))
82+
.headers(singletonMap("one", (Object) "two"))
8383
.correlationId("123")
8484
.expiration("later")
8585
.priority(10)
@@ -95,7 +95,7 @@ public void amqpPropertiesEqualsHashCode() {
9595
.build(),
9696
new AMQP.BasicProperties.Builder()
9797
.deliveryMode(2)
98-
.headers(singletonMap("one", "two"))
98+
.headers(singletonMap("one", (Object) "two"))
9999
.correlationId("123")
100100
.expiration("later")
101101
.priority(10)

0 commit comments

Comments
 (0)