From c526245f6de45f24c78745ef4c33f4e336ea3606 Mon Sep 17 00:00:00 2001 From: rfeng Date: Sun, 30 Sep 2012 15:12:41 +0000 Subject: Enhance the http client configuration to make it customizable git-svn-id: http://svn.us.apache.org/repos/asf/tuscany@1392033 13f79535-47bb-0310-9956-ffa450edef68 --- .../binding/jsonrpc/provider/JsonRpcInvoker.java | 73 +++++++++++----------- 1 file changed, 38 insertions(+), 35 deletions(-) (limited to 'sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc') diff --git a/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java b/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java index ca21599b14..e4374af233 100644 --- a/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java +++ b/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java @@ -122,52 +122,55 @@ public class JsonRpcInvoker implements Invoker, DataExchangeSemantics { response = httpClient.execute(post); - if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { - //success + try { + if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) { + //success - entity = response.getEntity(); - String entityResponse = EntityUtils.toString(entity); - entity.consumeContent(); - if (!db.equals(JSONDataBinding.NAME)) { - ObjectNode jsonResponse = (ObjectNode)JacksonHelper.MAPPER.readTree(entityResponse); + entity = response.getEntity(); + String entityResponse = EntityUtils.toString(entity); + // entity.consumeContent(); + if (!db.equals(JSONDataBinding.NAME)) { + ObjectNode jsonResponse = (ObjectNode)JacksonHelper.MAPPER.readTree(entityResponse); - if (jsonResponse.has("error") && jsonResponse.get("error") != NullNode.instance) { - processException(jsonResponse); - } - DataType> outputType = operation.getOutputType(); - DataType returnType = - (outputType != null && !outputType.getLogical().isEmpty()) ? outputType.getLogical().get(0) - : null; - - if (returnType == null) { - msg.setBody(null); - return msg; - } + if (jsonResponse.has("error") && jsonResponse.get("error") != NullNode.instance) { + processException(jsonResponse); + } + DataType> outputType = operation.getOutputType(); + DataType returnType = + (outputType != null && !outputType.getLogical().isEmpty()) ? outputType.getLogical().get(0) + : null; - //check requestId - if (!requestId.equalsIgnoreCase(jsonResponse.get("id").getTextValue())) { - throw new ServiceRuntimeException("Invalid response id:" + requestId); - } + if (returnType == null) { + msg.setBody(null); + return msg; + } - JsonNode rawResult = jsonResponse.get("result"); + //check requestId + if (!requestId.equalsIgnoreCase(jsonResponse.get("id").getTextValue())) { + throw new ServiceRuntimeException("Invalid response id:" + requestId); + } - Class returnClass = returnType.getPhysical(); - Type genericReturnType = returnType.getGenericType(); + JsonNode rawResult = jsonResponse.get("result"); - ObjectMapper mapper = createObjectMapper(returnClass); - String json = mapper.writeValueAsString(rawResult); + Class returnClass = returnType.getPhysical(); + Type genericReturnType = returnType.getGenericType(); - Object body = mapper.readValue(json, TypeFactory.type(genericReturnType)); + ObjectMapper mapper = createObjectMapper(returnClass); + String json = mapper.writeValueAsString(rawResult); + + Object body = mapper.readValue(json, TypeFactory.type(genericReturnType)); + + msg.setBody(body); + } else { + msg.setBody(entityResponse); + } - msg.setBody(body); } else { - msg.setBody(entityResponse); + throw new ServiceRuntimeException("Abnormal HTTP response: " + response.getStatusLine().toString()); } - - } else { + } finally { // Consume the content so the connection can be released - response.getEntity().consumeContent(); - throw new ServiceRuntimeException("Abnormal HTTP response: " + response.getStatusLine().toString()); + EntityUtils.consumeQuietly(response.getEntity()); } } catch (RuntimeException e) { throw e; -- cgit v1.2.3