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) {