summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java')
-rw-r--r--sca-java-2.x/trunk/modules/binding-jsonrpc-runtime/src/main/java/org/apache/tuscany/sca/binding/jsonrpc/provider/JsonRpcInvoker.java73
1 files changed, 38 insertions, 35 deletions
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<List<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<List<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;