@@ -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 }
0 commit comments