diff --git a/src/main/java/org/stellar/sdk/Asset.java b/src/main/java/org/stellar/sdk/Asset.java
index ce3e27383..b24fca767 100644
--- a/src/main/java/org/stellar/sdk/Asset.java
+++ b/src/main/java/org/stellar/sdk/Asset.java
@@ -1,9 +1,14 @@
package org.stellar.sdk;
+import org.stellar.sdk.responses.AssetDeserializer;
+
+import com.google.gson.annotations.JsonAdapter;
+
/**
* Base Asset class.
* @see Assets
*/
+@JsonAdapter(AssetDeserializer.class)
public abstract class Asset implements Comparable {
Asset() {}
diff --git a/src/main/java/org/stellar/sdk/LiquidityPoolID.java b/src/main/java/org/stellar/sdk/LiquidityPoolID.java
index f5b97b58d..00e78914f 100644
--- a/src/main/java/org/stellar/sdk/LiquidityPoolID.java
+++ b/src/main/java/org/stellar/sdk/LiquidityPoolID.java
@@ -1,15 +1,20 @@
package org.stellar.sdk;
-import com.google.common.base.Objects;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
-import org.stellar.sdk.xdr.*;
+import org.stellar.sdk.responses.LiquidityPoolIDDeserializer;
+import org.stellar.sdk.xdr.LiquidityPoolType;
+import org.stellar.sdk.xdr.XdrDataOutputStream;
+
+import com.google.common.base.Objects;
+import com.google.gson.annotations.JsonAdapter;
/**
* Base LiquidityPoolID class.
* @see Liquidity Pool
*/
+@JsonAdapter(LiquidityPoolIDDeserializer.class)
public final class LiquidityPoolID {
protected final byte[] hash;
diff --git a/src/main/java/org/stellar/sdk/Predicate.java b/src/main/java/org/stellar/sdk/Predicate.java
index 892aec016..049f86735 100644
--- a/src/main/java/org/stellar/sdk/Predicate.java
+++ b/src/main/java/org/stellar/sdk/Predicate.java
@@ -1,7 +1,8 @@
package org.stellar.sdk;
-import com.google.common.base.Objects;
-import com.google.common.collect.Lists;
+import java.util.List;
+
+import org.stellar.sdk.responses.PredicateDeserializer;
import org.stellar.sdk.xdr.ClaimPredicate;
import org.stellar.sdk.xdr.ClaimPredicateType;
import org.stellar.sdk.xdr.Duration;
@@ -10,8 +11,11 @@
import org.stellar.sdk.xdr.Uint64;
import org.threeten.bp.Instant;
-import java.util.List;
+import com.google.common.base.Objects;
+import com.google.common.collect.Lists;
+import com.google.gson.annotations.JsonAdapter;
+@JsonAdapter(PredicateDeserializer.class)
public abstract class Predicate {
private static List convertXDRPredicates(ClaimPredicate[] predicates) {
diff --git a/src/main/java/org/stellar/sdk/responses/AssetDeserializer.java b/src/main/java/org/stellar/sdk/responses/AssetDeserializer.java
index 635905f5c..00c844e7e 100644
--- a/src/main/java/org/stellar/sdk/responses/AssetDeserializer.java
+++ b/src/main/java/org/stellar/sdk/responses/AssetDeserializer.java
@@ -1,17 +1,18 @@
package org.stellar.sdk.responses;
+import static com.google.common.base.Optional.fromNullable;
+
+import java.lang.reflect.Type;
+
+import org.stellar.sdk.Asset;
+
import com.google.common.base.Function;
import com.google.gson.JsonDeserializationContext;
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
-import org.stellar.sdk.Asset;
-
-import java.lang.reflect.Type;
-
-import static com.google.common.base.Optional.fromNullable;
-class AssetDeserializer implements JsonDeserializer {
+public class AssetDeserializer implements JsonDeserializer {
@Override
public Asset deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
if (!json.isJsonObject()) {
diff --git a/src/main/java/org/stellar/sdk/responses/EffectDeserializer.java b/src/main/java/org/stellar/sdk/responses/EffectDeserializer.java
index 797b8d24f..204c73fed 100644
--- a/src/main/java/org/stellar/sdk/responses/EffectDeserializer.java
+++ b/src/main/java/org/stellar/sdk/responses/EffectDeserializer.java
@@ -6,6 +6,7 @@
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
+import com.google.gson.annotations.JsonAdapter;
import org.stellar.sdk.Asset;
import org.stellar.sdk.LiquidityPoolID;
@@ -15,7 +16,7 @@
import java.lang.reflect.Type;
-class EffectDeserializer implements JsonDeserializer {
+public class EffectDeserializer implements JsonDeserializer {
@Override
public EffectResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
// Create new Gson object with adapters needed in Operation
diff --git a/src/main/java/org/stellar/sdk/responses/GsonSingleton.java b/src/main/java/org/stellar/sdk/responses/GsonSingleton.java
index 70e9afb15..f96525b51 100644
--- a/src/main/java/org/stellar/sdk/responses/GsonSingleton.java
+++ b/src/main/java/org/stellar/sdk/responses/GsonSingleton.java
@@ -1,16 +1,12 @@
package org.stellar.sdk.responses;
+import org.stellar.sdk.responses.effects.EffectResponse;
+import org.stellar.sdk.responses.operations.OperationResponse;
+
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.reflect.TypeToken;
-import org.stellar.sdk.Asset;
-import org.stellar.sdk.Predicate;
-import org.stellar.sdk.LiquidityPoolID;
-import org.stellar.sdk.responses.effects.EffectResponse;
-import org.stellar.sdk.responses.operations.OperationResponse;
-import org.stellar.sdk.xdr.LiquidityPoolType;
-
public class GsonSingleton {
private static Gson instance = null;
@@ -18,30 +14,24 @@ protected GsonSingleton() {}
public static Gson getInstance() {
if (instance == null) {
- TypeToken accountPageType = new TypeToken>() {};
- TypeToken assetPageType = new TypeToken>() {};
- TypeToken effectPageType = new TypeToken>() {};
- TypeToken ledgerPageType = new TypeToken>() {};
- TypeToken liquidityPoolPageType = new TypeToken>() {};
- TypeToken offerPageType = new TypeToken>() {};
- TypeToken operationPageType = new TypeToken>() {};
- TypeToken pathPageType = new TypeToken>() {};
- TypeToken tradePageType = new TypeToken>() {};
- TypeToken tradeAggregationPageType = new TypeToken>() {};
- TypeToken transactionPageType = new TypeToken>() {};
- TypeToken claimableBalancePageType = new TypeToken>() {};
+ TypeToken> accountPageType = new TypeToken>() {};
+ TypeToken> assetPageType = new TypeToken>() {};
+ TypeToken> effectPageType = new TypeToken>() {};
+ TypeToken> ledgerPageType = new TypeToken>() {};
+ TypeToken> liquidityPoolPageType = new TypeToken>() {};
+ TypeToken> offerPageType = new TypeToken>() {};
+ TypeToken> operationPageType = new TypeToken>() {};
+ TypeToken> pathPageType = new TypeToken>() {};
+ TypeToken> tradePageType = new TypeToken>() {};
+ TypeToken> tradeAggregationPageType = new TypeToken>() {};
+ TypeToken> transactionPageType = new TypeToken>() {};
+ TypeToken> claimableBalancePageType = new TypeToken>() {};
instance = new GsonBuilder()
- .registerTypeAdapter(Asset.class, new AssetDeserializer())
- .registerTypeAdapter(Predicate.class, new PredicateDeserializer())
- .registerTypeAdapter(OperationResponse.class, new OperationDeserializer())
- .registerTypeAdapter(EffectResponse.class, new EffectDeserializer())
- .registerTypeAdapter(LiquidityPoolID.class, new LiquidityPoolIDDeserializer())
- .registerTypeAdapter(LiquidityPoolType.class, new LiquidityPoolTypeDeserializer())
.registerTypeAdapter(TransactionResponse.class, new TransactionDeserializer())
.registerTypeAdapter(accountPageType.getType(), new PageDeserializer(accountPageType))
.registerTypeAdapter(assetPageType.getType(), new PageDeserializer(assetPageType))
- .registerTypeAdapter(effectPageType.getType(), new PageDeserializer(effectPageType))
+ .registerTypeAdapter(effectPageType.getType(), new PageDeserializer(effectPageType))
.registerTypeAdapter(ledgerPageType.getType(), new PageDeserializer(ledgerPageType))
.registerTypeAdapter(liquidityPoolPageType.getType(), new PageDeserializer(liquidityPoolPageType))
.registerTypeAdapter(offerPageType.getType(), new PageDeserializer(offerPageType))
diff --git a/src/main/java/org/stellar/sdk/responses/LiquidityPoolIDDeserializer.java b/src/main/java/org/stellar/sdk/responses/LiquidityPoolIDDeserializer.java
index 87c39b941..f29bf5b2c 100644
--- a/src/main/java/org/stellar/sdk/responses/LiquidityPoolIDDeserializer.java
+++ b/src/main/java/org/stellar/sdk/responses/LiquidityPoolIDDeserializer.java
@@ -4,12 +4,14 @@
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
+import com.google.gson.annotations.JsonAdapter;
import org.stellar.sdk.LiquidityPoolID;
import java.lang.reflect.Type;
-class LiquidityPoolIDDeserializer implements JsonDeserializer {
+
+public class LiquidityPoolIDDeserializer implements JsonDeserializer {
@Override
public LiquidityPoolID deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
return new LiquidityPoolID(json.getAsString());
diff --git a/src/main/java/org/stellar/sdk/responses/LiquidityPoolTypeDeserializer.java b/src/main/java/org/stellar/sdk/responses/LiquidityPoolTypeDeserializer.java
index baf7fc640..f8d657ce9 100644
--- a/src/main/java/org/stellar/sdk/responses/LiquidityPoolTypeDeserializer.java
+++ b/src/main/java/org/stellar/sdk/responses/LiquidityPoolTypeDeserializer.java
@@ -1,6 +1,8 @@
package org.stellar.sdk.responses;
import com.google.gson.*;
+import com.google.gson.annotations.JsonAdapter;
+
import org.stellar.sdk.xdr.LiquidityPoolType;
import java.lang.reflect.Type;
diff --git a/src/main/java/org/stellar/sdk/responses/OperationDeserializer.java b/src/main/java/org/stellar/sdk/responses/OperationDeserializer.java
index 5de300d34..165b4e802 100644
--- a/src/main/java/org/stellar/sdk/responses/OperationDeserializer.java
+++ b/src/main/java/org/stellar/sdk/responses/OperationDeserializer.java
@@ -7,6 +7,7 @@
import com.google.gson.JsonDeserializer;
import com.google.gson.JsonElement;
import com.google.gson.JsonParseException;
+import com.google.gson.annotations.JsonAdapter;
import org.stellar.sdk.Asset;
import org.stellar.sdk.LiquidityPoolID;
@@ -17,7 +18,7 @@
import java.lang.reflect.Type;
-class OperationDeserializer implements JsonDeserializer {
+public class OperationDeserializer implements JsonDeserializer {
private static final OperationType[] AllOperationTypes = OperationType.values();
@Override
public OperationResponse deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException {
diff --git a/src/main/java/org/stellar/sdk/responses/Page.java b/src/main/java/org/stellar/sdk/responses/Page.java
index c9756ef3a..969971945 100644
--- a/src/main/java/org/stellar/sdk/responses/Page.java
+++ b/src/main/java/org/stellar/sdk/responses/Page.java
@@ -1,16 +1,17 @@
package org.stellar.sdk.responses;
-import com.google.common.base.Preconditions;
-import com.google.gson.annotations.SerializedName;
-import com.google.gson.reflect.TypeToken;
-
-import org.stellar.sdk.requests.ResponseHandler;
-
import java.io.IOException;
import java.net.URISyntaxException;
import java.util.ArrayList;
+import org.stellar.sdk.requests.ResponseHandler;
+
+import com.google.common.base.Preconditions;
+import com.google.gson.annotations.JsonAdapter;
+import com.google.gson.annotations.SerializedName;
+import com.google.gson.reflect.TypeToken;
+
import okhttp3.OkHttpClient;
import okhttp3.Request;
diff --git a/src/main/java/org/stellar/sdk/responses/PageDeserializer.java b/src/main/java/org/stellar/sdk/responses/PageDeserializer.java
index deff00b30..2c17b0c7a 100644
--- a/src/main/java/org/stellar/sdk/responses/PageDeserializer.java
+++ b/src/main/java/org/stellar/sdk/responses/PageDeserializer.java
@@ -1,5 +1,7 @@
package org.stellar.sdk.responses;
+import java.lang.reflect.Type;
+
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonDeserializationContext;
@@ -9,13 +11,6 @@
import com.google.gson.JsonParseException;
import com.google.gson.reflect.TypeToken;
-import org.stellar.sdk.Asset;
-import org.stellar.sdk.Predicate;
-import org.stellar.sdk.responses.effects.EffectResponse;
-import org.stellar.sdk.responses.operations.OperationResponse;
-
-import java.lang.reflect.Type;
-
class PageDeserializer implements JsonDeserializer> {
private TypeToken> pageType;
@@ -39,14 +34,9 @@ public Page deserialize(JsonElement json, Type typeOfT, JsonDeserializationCo
// Create new Gson object with adapters needed in Page
Gson gson = new GsonBuilder()
- .registerTypeAdapter(Asset.class, new AssetDeserializer())
- .registerTypeAdapter(Predicate.class, new PredicateDeserializer())
- .registerTypeAdapter(OperationResponse.class, new OperationDeserializer())
- .registerTypeAdapter(EffectResponse.class, new EffectDeserializer())
- .registerTypeAdapter(LiquidityPoolResponse.class, new LiquidityPoolDeserializer())
.registerTypeAdapter(TransactionResponse.class, new TransactionDeserializer())
.create();
-
+
return gson.fromJson(newJson, pageType.getType());
}
}
diff --git a/src/main/java/org/stellar/sdk/responses/PredicateDeserializer.java b/src/main/java/org/stellar/sdk/responses/PredicateDeserializer.java
index a6795a799..f999b2e81 100644
--- a/src/main/java/org/stellar/sdk/responses/PredicateDeserializer.java
+++ b/src/main/java/org/stellar/sdk/responses/PredicateDeserializer.java
@@ -2,6 +2,8 @@
import com.google.common.collect.Lists;
import com.google.gson.*;
+import com.google.gson.annotations.JsonAdapter;
+
import org.stellar.sdk.Predicate;
import org.stellar.sdk.xdr.Duration;
import org.stellar.sdk.xdr.Int64;
diff --git a/src/main/java/org/stellar/sdk/responses/TransactionDeserializer.java b/src/main/java/org/stellar/sdk/responses/TransactionDeserializer.java
index 771d0f762..e7a65e01c 100644
--- a/src/main/java/org/stellar/sdk/responses/TransactionDeserializer.java
+++ b/src/main/java/org/stellar/sdk/responses/TransactionDeserializer.java
@@ -2,6 +2,7 @@
import com.google.common.io.BaseEncoding;
import com.google.gson.*;
+import com.google.gson.annotations.JsonAdapter;
import org.stellar.sdk.Memo;
import org.stellar.sdk.xdr.TransactionEnvelope;
diff --git a/src/main/java/org/stellar/sdk/responses/TransactionResponse.java b/src/main/java/org/stellar/sdk/responses/TransactionResponse.java
index 3c591e3c9..0ea1cc783 100644
--- a/src/main/java/org/stellar/sdk/responses/TransactionResponse.java
+++ b/src/main/java/org/stellar/sdk/responses/TransactionResponse.java
@@ -1,14 +1,14 @@
package org.stellar.sdk.responses;
-import com.google.common.base.Optional;
-import com.google.gson.annotations.SerializedName;
-
-import org.stellar.sdk.Memo;
+import static com.google.common.base.Preconditions.checkNotNull;
import java.math.BigInteger;
import java.util.List;
-import static com.google.common.base.Preconditions.checkNotNull;
+import org.stellar.sdk.Memo;
+
+import com.google.common.base.Optional;
+import com.google.gson.annotations.SerializedName;
/**
* Represents transaction response.
diff --git a/src/main/java/org/stellar/sdk/responses/effects/EffectResponse.java b/src/main/java/org/stellar/sdk/responses/effects/EffectResponse.java
index f15a050f6..7866fcf9b 100644
--- a/src/main/java/org/stellar/sdk/responses/effects/EffectResponse.java
+++ b/src/main/java/org/stellar/sdk/responses/effects/EffectResponse.java
@@ -1,13 +1,16 @@
package org.stellar.sdk.responses.effects;
-import com.google.common.base.Optional;
-import com.google.gson.annotations.SerializedName;
+import java.math.BigInteger;
+
+import org.stellar.sdk.responses.EffectDeserializer;
import org.stellar.sdk.responses.Link;
import org.stellar.sdk.responses.MuxedAccount;
import org.stellar.sdk.responses.Pageable;
import org.stellar.sdk.responses.Response;
-import java.math.BigInteger;
+import com.google.common.base.Optional;
+import com.google.gson.annotations.JsonAdapter;
+import com.google.gson.annotations.SerializedName;
/**
* Abstract class for effect responses.
@@ -15,6 +18,7 @@
* @see org.stellar.sdk.requests.EffectsRequestBuilder
* @see org.stellar.sdk.Server#effects()
*/
+@JsonAdapter(EffectDeserializer.class)
public abstract class EffectResponse extends Response implements Pageable {
@SerializedName("id")
private String id;
diff --git a/src/main/java/org/stellar/sdk/responses/operations/OperationResponse.java b/src/main/java/org/stellar/sdk/responses/operations/OperationResponse.java
index feda663b9..e36ab40da 100644
--- a/src/main/java/org/stellar/sdk/responses/operations/OperationResponse.java
+++ b/src/main/java/org/stellar/sdk/responses/operations/OperationResponse.java
@@ -1,6 +1,7 @@
package org.stellar.sdk.responses.operations;
import com.google.common.base.Optional;
+import com.google.gson.annotations.JsonAdapter;
import com.google.gson.annotations.SerializedName;
import org.stellar.sdk.responses.*;
@@ -13,6 +14,7 @@
* @see org.stellar.sdk.requests.OperationsRequestBuilder
* @see org.stellar.sdk.Server#operations()
*/
+@JsonAdapter(OperationDeserializer.class)
public abstract class OperationResponse extends Response implements Pageable {
@SerializedName("id")
private Long id;
diff --git a/src/main/java/org/stellar/sdk/xdr/LiquidityPoolType.java b/src/main/java/org/stellar/sdk/xdr/LiquidityPoolType.java
index 96a856e30..d659251a2 100644
--- a/src/main/java/org/stellar/sdk/xdr/LiquidityPoolType.java
+++ b/src/main/java/org/stellar/sdk/xdr/LiquidityPoolType.java
@@ -6,6 +6,10 @@
import java.io.IOException;
+import org.stellar.sdk.responses.LiquidityPoolTypeDeserializer;
+
+import com.google.gson.annotations.JsonAdapter;
+
// === xdr source ============================================================
@@ -15,6 +19,7 @@
// };
// ===========================================================================
+@JsonAdapter(LiquidityPoolTypeDeserializer.class)
public enum LiquidityPoolType implements XdrElement {
LIQUIDITY_POOL_CONSTANT_PRODUCT(0),
;
diff --git a/src/test/java/org/stellar/sdk/responses/TransactionPageDeserializerTest.java b/src/test/java/org/stellar/sdk/responses/TransactionPageDeserializerTest.java
index 4f5a5cd0e..9d3e40699 100644
--- a/src/test/java/org/stellar/sdk/responses/TransactionPageDeserializerTest.java
+++ b/src/test/java/org/stellar/sdk/responses/TransactionPageDeserializerTest.java
@@ -14,6 +14,7 @@ public void testDeserialize() {
assertEquals(transactionsPage.getRecords().get(0).getSourceAccount(), "GAAZI4TCR3TY5OJHCTJC2A4QSY6CJWJH5IAJTGKIN2ER7LBNVKOCCWN7");
assertEquals(transactionsPage.getRecords().get(0).getPagingToken(), "12884905984");
+ System.out.println(transactionsPage.getRecords().get(0));
assertTrue(transactionsPage.getRecords().get(0).getMemo() instanceof MemoText);
MemoText memoText = (MemoText) transactionsPage.getRecords().get(0).getMemo();
assertEquals(memoText.getText(), "hello world");