@@ -57,9 +57,11 @@ public JacksonJsonRpcMapper() {
57
57
public JsonRpcRequest parse (String requestBody , ServiceDescription description ) {
58
58
JsonFactory jsonFactory = new MappingJsonFactory ();
59
59
String method = null , version = null ;
60
- final List <TreeNode > parameters = new ArrayList <>();
60
+ final List <TreeNode > parameters = new ArrayList <TreeNode >();
61
61
Object id = null ;
62
- try (JsonParser parser = jsonFactory .createParser (requestBody )) {
62
+ JsonParser parser = null ;
63
+ try {
64
+ parser = jsonFactory .createParser (requestBody );
63
65
while (parser .nextToken () != null ) {
64
66
JsonToken token = parser .currentToken ();
65
67
if (token == JsonToken .FIELD_NAME ) {
@@ -98,17 +100,25 @@ public JsonRpcRequest parse(String requestBody, ServiceDescription description)
98
100
}
99
101
} catch (IOException e ) {
100
102
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
+ }
101
111
}
102
112
103
113
if (method == null ) {
104
114
throw new IllegalArgumentException ("Could not find method to invoke in request" );
105
115
}
106
116
107
- List <Object > convertedParameters = new ArrayList <>(parameters .size ());
117
+ List <Object > convertedParameters = new ArrayList <Object >(parameters .size ());
108
118
if (!parameters .isEmpty ()) {
109
119
ProcedureDescription proc = description .getProcedure (method , parameters .size ());
110
120
Method internalMethod = proc .internal_getMethod ();
111
- for (int i = 0 ; i < internalMethod .getParameterCount () ; i ++) {
121
+ for (int i = 0 ; i < internalMethod .getParameterTypes (). length ; i ++) {
112
122
TreeNode parameterNode = parameters .get (i );
113
123
try {
114
124
Class <?> parameterType = internalMethod .getParameterTypes ()[i ];
@@ -132,7 +142,9 @@ public JsonRpcResponse parse(String responseBody, Class<?> expectedReturnType) {
132
142
Object result = null ;
133
143
JsonRpcException exception = null ;
134
144
Map <String , Object > errorMap = null ;
135
- try (JsonParser parser = jsonFactory .createParser (responseBody )) {
145
+ JsonParser parser = null ;
146
+ try {
147
+ parser = jsonFactory .createParser (responseBody );
136
148
while (parser .nextToken () != null ) {
137
149
JsonToken token = parser .currentToken ();
138
150
if (token == JsonToken .FIELD_NAME ) {
@@ -158,6 +170,14 @@ public JsonRpcResponse parse(String responseBody, Class<?> expectedReturnType) {
158
170
}
159
171
} catch (IOException e ) {
160
172
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
+ }
161
181
}
162
182
return new JsonRpcResponse (result , errorMap , exception );
163
183
}
0 commit comments