You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jclouds.apache.org by na...@apache.org on 2016/10/25 13:27:13 UTC

[2/3] jclouds git commit: JCLOUDS-1187: Do not load Json payloads to memory when serializing objects

JCLOUDS-1187: Do not load Json payloads to memory when serializing objects


Project: http://git-wip-us.apache.org/repos/asf/jclouds/repo
Commit: http://git-wip-us.apache.org/repos/asf/jclouds/commit/a43acaff
Tree: http://git-wip-us.apache.org/repos/asf/jclouds/tree/a43acaff
Diff: http://git-wip-us.apache.org/repos/asf/jclouds/diff/a43acaff

Branch: refs/heads/master
Commit: a43acaffce0cc04e05c15c55bd94cadcd55843f1
Parents: 37101b7
Author: Ignasi Barrera <na...@apache.org>
Authored: Sun Oct 23 19:27:35 2016 +0200
Committer: Ignasi Barrera <na...@apache.org>
Committed: Tue Oct 25 15:19:20 2016 +0200

----------------------------------------------------------------------
 .../org/jclouds/http/functions/ParseJson.java   |  5 ++--
 core/src/main/java/org/jclouds/io/Payload.java  |  2 +-
 core/src/main/java/org/jclouds/json/Json.java   | 13 ++++++++++
 .../org/jclouds/json/internal/GsonWrapper.java  | 26 ++++++++++++++++++++
 4 files changed, 42 insertions(+), 4 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jclouds/blob/a43acaff/core/src/main/java/org/jclouds/http/functions/ParseJson.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/http/functions/ParseJson.java b/core/src/main/java/org/jclouds/http/functions/ParseJson.java
index 58457ed..9b5d414 100644
--- a/core/src/main/java/org/jclouds/http/functions/ParseJson.java
+++ b/core/src/main/java/org/jclouds/http/functions/ParseJson.java
@@ -30,7 +30,6 @@ import org.jclouds.http.HttpResponse;
 import org.jclouds.http.HttpResponseException;
 import org.jclouds.json.Json;
 import org.jclouds.logging.Logger;
-import org.jclouds.util.Strings2;
 
 import com.google.common.base.Function;
 import com.google.inject.TypeLiteral;
@@ -57,8 +56,8 @@ public class ParseJson<T> implements Function<HttpResponse, T> {
     * parses the http response body to create a new {@code <T>}.
     */
    public T apply(HttpResponse from) {
-      InputStream gson = from.getPayload().getInput();
       try {
+         InputStream gson = from.getPayload().openStream();
          return apply(gson);
       } catch (Exception e) {
          StringBuilder message = new StringBuilder();
@@ -80,7 +79,7 @@ public class ParseJson<T> implements Function<HttpResponse, T> {
    @SuppressWarnings("unchecked")
    public <V> V apply(InputStream stream, Type type) throws IOException {
       try {
-         return (V) json.fromJson(Strings2.toStringAndClose(stream), type);
+         return (V) json.fromJson(stream, type);
       } finally {
          if (stream != null)
             stream.close();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a43acaff/core/src/main/java/org/jclouds/io/Payload.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/io/Payload.java b/core/src/main/java/org/jclouds/io/Payload.java
index 4754f33..543c3d7 100644
--- a/core/src/main/java/org/jclouds/io/Payload.java
+++ b/core/src/main/java/org/jclouds/io/Payload.java
@@ -30,7 +30,7 @@ public interface Payload extends Closeable {
    /**
     * Creates a new InputStream object of the payload.
     *
-    * @deprecated see openStream
+    * @deprecated see {@link Payload#openStream()}.
     */
    @Deprecated
    InputStream getInput();

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a43acaff/core/src/main/java/org/jclouds/json/Json.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/json/Json.java b/core/src/main/java/org/jclouds/json/Json.java
index 53e555d..35b2a14 100644
--- a/core/src/main/java/org/jclouds/json/Json.java
+++ b/core/src/main/java/org/jclouds/json/Json.java
@@ -16,6 +16,7 @@
  */
 package org.jclouds.json;
 
+import java.io.InputStream;
 import java.lang.reflect.Type;
 
 public interface Json {
@@ -42,5 +43,17 @@ public interface Json {
     * {@link #fromJson(Object, Type)}
     */
    <T> T fromJson(String json, Class<T> classOfT);
+   
+   /**
+    * Deserialize the generic object from json. If the object is not a generic type, use
+    * {@link #fromJson(Object, Class)}
+    */
+   <T> T fromJson(InputStream json, Type type);
+
+   /**
+    * Deserialize the object from json. If the object is a generic type, use
+    * {@link #fromJson(Object, Type)}
+    */
+   <T> T fromJson(InputStream json, Class<T> classOfT);
 
 }

http://git-wip-us.apache.org/repos/asf/jclouds/blob/a43acaff/core/src/main/java/org/jclouds/json/internal/GsonWrapper.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/jclouds/json/internal/GsonWrapper.java b/core/src/main/java/org/jclouds/json/internal/GsonWrapper.java
index 6f45df1..59ef71a 100644
--- a/core/src/main/java/org/jclouds/json/internal/GsonWrapper.java
+++ b/core/src/main/java/org/jclouds/json/internal/GsonWrapper.java
@@ -16,6 +16,11 @@
  */
 package org.jclouds.json.internal;
 
+import static org.jclouds.util.Closeables2.closeQuietly;
+
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
 import java.lang.reflect.Type;
 
 import javax.inject.Inject;
@@ -46,6 +51,27 @@ public class GsonWrapper extends ForwardingObject implements Json  {
    public <T> T fromJson(String json, Class<T> classOfT) {
       return gson.fromJson(json, classOfT);
    }
+   
+   @SuppressWarnings("unchecked")
+   @Override
+   public <T> T fromJson(InputStream json, Type type) {
+      Reader reader = new InputStreamReader(json);
+      try {
+         return (T) gson.fromJson(reader, type);
+      } finally {
+         closeQuietly(reader);
+      }
+   }
+
+   @Override
+   public <T> T fromJson(InputStream json, Class<T> classOfT) {
+      Reader reader = new InputStreamReader(json);
+      try {
+         return gson.fromJson(reader, classOfT);
+      } finally {
+         closeQuietly(reader);
+      }
+   }
 
    @Override
    public String toJson(Object src) {