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");