diff --git a/exonum-java-binding/CHANGELOG.md b/exonum-java-binding/CHANGELOG.md index 91a57393f7..a1ce31f190 100644 --- a/exonum-java-binding/CHANGELOG.md +++ b/exonum-java-binding/CHANGELOG.md @@ -31,6 +31,11 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0. - Moved all packages inside `com.exonum.binding` to `com.exonum.binding.core` package. That was required to give each module a unique root package to prevent 'split-packages' problem. The migration guide has a regexp to update the service automatically. +- Replaced redundant `TypeAdapterFactory` in 'common' module with a single + `CommonTypeAdapterFactory`. `BlockTypeAdapterFactory` is renamed to `CoreTypeAdapterFactory`. + `JsonSerializer#json` and `JsonSerializer#builder` register `CommonTypeAdapterFactory` + by default. `CoreTypeAdapterFactory` must be registered explicitly if needed. (#971) + ### Fixed - The default [`Transaction#info`][tx-info-07] implementation causing an error on `transaction` diff --git a/exonum-java-binding/common/pom.xml b/exonum-java-binding/common/pom.xml index 3aff7e75cb..d13dd15a28 100644 --- a/exonum-java-binding/common/pom.xml +++ b/exonum-java-binding/common/pom.xml @@ -62,7 +62,7 @@ com.ryanharter.auto.value - auto-value-gson-annotations + auto-value-gson-runtime diff --git a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/blockchain/TransactionResult.java b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/blockchain/TransactionResult.java index 525b396526..148482667e 100644 --- a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/blockchain/TransactionResult.java +++ b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/blockchain/TransactionResult.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkArgument; +import com.exonum.binding.common.serialization.json.CommonTypeAdapterFactory; import com.google.auto.value.AutoValue; import com.google.common.base.Strings; import com.google.gson.Gson; @@ -119,7 +120,7 @@ public boolean isSuccessful() { /** * Provides a Gson type adapter for this class. * - * @see com.exonum.binding.common.serialization.json.TransactionResultAdapterFactory + * @see CommonTypeAdapterFactory */ public static TypeAdapter typeAdapter(Gson gson) { return new AutoValue_TransactionResult.GsonTypeAdapter(gson); diff --git a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/ConsensusConfiguration.java b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/ConsensusConfiguration.java index 14c033d3af..3a27cbde1f 100644 --- a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/ConsensusConfiguration.java +++ b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/ConsensusConfiguration.java @@ -89,7 +89,7 @@ public abstract class ConsensusConfiguration { /** * Provides a Gson type adapter for this class. * - * @see com.exonum.binding.common.serialization.json.StoredConfigurationAdapterFactory + * @see com.exonum.binding.common.serialization.json.CommonTypeAdapterFactory */ public static TypeAdapter typeAdapter(Gson gson) { return new AutoValue_ConsensusConfiguration.GsonTypeAdapter(gson); diff --git a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/StoredConfiguration.java b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/StoredConfiguration.java index e2205d10b3..07582ebdc9 100644 --- a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/StoredConfiguration.java +++ b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/StoredConfiguration.java @@ -67,7 +67,7 @@ public abstract class StoredConfiguration { /** * Provides a Gson type adapter for this class. * - * @see com.exonum.binding.common.serialization.json.StoredConfigurationAdapterFactory + * @see com.exonum.binding.common.serialization.json.CommonTypeAdapterFactory */ public static TypeAdapter typeAdapter(Gson gson) { return new AutoValue_StoredConfiguration.GsonTypeAdapter(gson); diff --git a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/ValidatorKey.java b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/ValidatorKey.java index 64b4cdd8a9..1d5e3ff39b 100644 --- a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/ValidatorKey.java +++ b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/configuration/ValidatorKey.java @@ -42,7 +42,7 @@ public abstract class ValidatorKey { /** * Provides a Gson type adapter for this class. * - * @see com.exonum.binding.common.serialization.json.StoredConfigurationAdapterFactory + * @see com.exonum.binding.common.serialization.json.CommonTypeAdapterFactory */ public static TypeAdapter typeAdapter(Gson gson) { return new AutoValue_ValidatorKey.GsonTypeAdapter(gson); diff --git a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/TransactionResultAdapterFactory.java b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/CommonTypeAdapterFactory.java similarity index 69% rename from exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/TransactionResultAdapterFactory.java rename to exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/CommonTypeAdapterFactory.java index c6f31b103c..b02661b8b8 100644 --- a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/TransactionResultAdapterFactory.java +++ b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/CommonTypeAdapterFactory.java @@ -20,19 +20,24 @@ import com.ryanharter.auto.value.gson.GsonTypeAdapterFactory; /** - * Class used to automatically create Gson type adapters for AutoValue classes. - * Note that you need to provide static factory method in your AutoValue class. + * Class used to automatically create Gson type adapters for all AutoValue classes + * located in this module. + * + *

Note that you need to provide an accessible static factory method in your AutoValue class. * *


  *   public static TypeAdapter<TransactionResult> typeAdapter(Gson gson) {
  *     return new AutoValue_TransactionResult.GsonTypeAdapter(gson);
  *   }
  * 
+ * + * @see + * Using TypeAdapterFactory */ @GsonTypeAdapterFactory -public abstract class TransactionResultAdapterFactory implements TypeAdapterFactory { +public abstract class CommonTypeAdapterFactory implements TypeAdapterFactory { public static TypeAdapterFactory create() { - return new AutoValueGson_TransactionResultAdapterFactory(); + return new AutoValueGson_CommonTypeAdapterFactory(); } } diff --git a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/JsonSerializer.java b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/JsonSerializer.java index 6660943002..5ea6c12032 100644 --- a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/JsonSerializer.java +++ b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/JsonSerializer.java @@ -47,7 +47,7 @@ public static GsonBuilder builder() { .registerTypeHierarchyAdapter(HashCode.class, new HashCodeJsonSerializer()) .registerTypeAdapter(PublicKey.class, new PublicKeyJsonSerializer()) .registerTypeAdapter(ZonedDateTime.class, new ZonedDateTimeJsonSerializer()) - .registerTypeAdapterFactory(StoredConfigurationAdapterFactory.create()) + .registerTypeAdapterFactory(CommonTypeAdapterFactory.create()) .setLongSerializationPolicy(LongSerializationPolicy.STRING); } diff --git a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/StoredConfigurationAdapterFactory.java b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/StoredConfigurationAdapterFactory.java deleted file mode 100644 index b73c358c7b..0000000000 --- a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/StoredConfigurationAdapterFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2018 The Exonum Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.exonum.binding.common.serialization.json; - -import com.google.gson.TypeAdapterFactory; -import com.ryanharter.auto.value.gson.GsonTypeAdapterFactory; - -/** - * Class used to automatically create Gson type adapters for AutoValue classes. - * Note that you need to provide static factory method in your AutoValue class. - * - *

- *   public static TypeAdapter<StoredConfiguration> typeAdapter(Gson gson) {
- *     return new AutoValue_StoredConfiguration.GsonTypeAdapter(gson);
- *   }
- * 
- */ -@GsonTypeAdapterFactory -public abstract class StoredConfigurationAdapterFactory implements TypeAdapterFactory { - - public static TypeAdapterFactory create() { - return new AutoValueGson_StoredConfigurationAdapterFactory(); - } -} diff --git a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/TransactionLocationAdapterFactory.java b/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/TransactionLocationAdapterFactory.java deleted file mode 100644 index a7657ef887..0000000000 --- a/exonum-java-binding/common/src/main/java/com/exonum/binding/common/serialization/json/TransactionLocationAdapterFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -/* - * Copyright 2018 The Exonum Team - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.exonum.binding.common.serialization.json; - -import com.google.gson.TypeAdapterFactory; -import com.ryanharter.auto.value.gson.GsonTypeAdapterFactory; - -/** - * Class used to automatically create Gson type adapters for AutoValue classes. - * Note that you need to provide static factory method in your AutoValue class. - * - *

- *   public static TypeAdapter<TransactionLocation> typeAdapter(Gson gson) {
- *     return new AutoValue_TransactionLocation.GsonTypeAdapter(gson);
- *   }
- * 
- */ -@GsonTypeAdapterFactory -public abstract class TransactionLocationAdapterFactory implements TypeAdapterFactory { - - public static TypeAdapterFactory create() { - return new AutoValueGson_TransactionLocationAdapterFactory(); - } -} diff --git a/exonum-java-binding/core/findbugs-exclude.xml b/exonum-java-binding/core/findbugs-exclude.xml index c8949890bc..b1fd6a72b6 100644 --- a/exonum-java-binding/core/findbugs-exclude.xml +++ b/exonum-java-binding/core/findbugs-exclude.xml @@ -12,6 +12,9 @@ + + @@ -19,7 +22,11 @@ - + + + + + diff --git a/exonum-java-binding/core/pom.xml b/exonum-java-binding/core/pom.xml index 6931d77898..e85fb5ad3e 100644 --- a/exonum-java-binding/core/pom.xml +++ b/exonum-java-binding/core/pom.xml @@ -91,8 +91,7 @@ com.ryanharter.auto.value - auto-value-gson-annotations - + auto-value-gson-runtime diff --git a/exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/Block.java b/exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/Block.java index d400de8079..554d6ebc41 100644 --- a/exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/Block.java +++ b/exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/Block.java @@ -19,6 +19,7 @@ import static com.google.common.base.Preconditions.checkState; import com.exonum.binding.common.hash.HashCode; +import com.exonum.binding.core.blockchain.serialization.CoreTypeAdapterFactory; import com.exonum.binding.core.service.Schema; import com.google.auto.value.AutoValue; import com.google.gson.Gson; @@ -100,7 +101,7 @@ public int hashCode() { /** * Provides a Gson type adapter for this class. * - * @see com.exonum.binding.core.blockchain.serialization.BlockAdapterFactory + * @see CoreTypeAdapterFactory */ public static TypeAdapter typeAdapter(Gson gson) { return new AutoValue_Block.GsonTypeAdapter(gson); diff --git a/exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/serialization/BlockAdapterFactory.java b/exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/serialization/CoreTypeAdapterFactory.java similarity index 59% rename from exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/serialization/BlockAdapterFactory.java rename to exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/serialization/CoreTypeAdapterFactory.java index f186645a2a..3db5659b22 100644 --- a/exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/serialization/BlockAdapterFactory.java +++ b/exonum-java-binding/core/src/main/java/com/exonum/binding/core/blockchain/serialization/CoreTypeAdapterFactory.java @@ -20,19 +20,24 @@ import com.ryanharter.auto.value.gson.GsonTypeAdapterFactory; /** - * Class used to automatically create Gson type adapters for AutoValue classes. - * Note that you need to provide static factory method in your AutoValue class. + * Class used to automatically create Gson type adapters for all AutoValue classes + * located in this module. + * + *

Note that you need to provide an accessible static factory method in your AutoValue class. * *


- *   public static TypeAdapter<Block> typeAdapter(Gson gson) {
- *     return new AutoValue_Block.GsonTypeAdapter(gson);
+ *   public static TypeAdapter<TransactionResult> typeAdapter(Gson gson) {
+ *     return new AutoValue_TransactionResult.GsonTypeAdapter(gson);
  *   }
  * 
+ * + * @see + * Using TypeAdapterFactory */ @GsonTypeAdapterFactory -public abstract class BlockAdapterFactory implements TypeAdapterFactory { +public abstract class CoreTypeAdapterFactory implements TypeAdapterFactory { public static TypeAdapterFactory create() { - return new AutoValueGson_BlockAdapterFactory(); + return new AutoValueGson_CoreTypeAdapterFactory(); } } diff --git a/exonum-java-binding/pom.xml b/exonum-java-binding/pom.xml index 93b5c7ce1d..4eee2dccf7 100644 --- a/exonum-java-binding/pom.xml +++ b/exonum-java-binding/pom.xml @@ -122,7 +122,7 @@ 3.1.9 1.3.2 2.8.5 - 0.8.0 + 1.0.0 @@ -173,7 +173,7 @@ com.ryanharter.auto.value - auto-value-gson-annotations + auto-value-gson-runtime ${auto-value-gson.version} diff --git a/exonum-java-binding/qa-service/src/test/java/com/exonum/binding/qaservice/ApiControllerIntegrationTest.java b/exonum-java-binding/qa-service/src/test/java/com/exonum/binding/qaservice/ApiControllerIntegrationTest.java index 46fea05005..35a06ee92d 100644 --- a/exonum-java-binding/qa-service/src/test/java/com/exonum/binding/qaservice/ApiControllerIntegrationTest.java +++ b/exonum-java-binding/qa-service/src/test/java/com/exonum/binding/qaservice/ApiControllerIntegrationTest.java @@ -46,9 +46,7 @@ import com.exonum.binding.common.crypto.PublicKey; import com.exonum.binding.common.hash.HashCode; import com.exonum.binding.common.serialization.json.JsonSerializer; -import com.exonum.binding.common.serialization.json.TransactionLocationAdapterFactory; -import com.exonum.binding.common.serialization.json.TransactionResultAdapterFactory; -import com.exonum.binding.core.blockchain.serialization.BlockAdapterFactory; +import com.exonum.binding.core.blockchain.serialization.CoreTypeAdapterFactory; import com.google.common.collect.ImmutableMap; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; @@ -94,9 +92,7 @@ class ApiControllerIntegrationTest { private static final HashCode HASH_1 = HashCode.fromInt(0x00); private static final Gson JSON_SERIALIZER = JsonSerializer.builder() - .registerTypeAdapterFactory(BlockAdapterFactory.create()) - .registerTypeAdapterFactory(TransactionLocationAdapterFactory.create()) - .registerTypeAdapterFactory(TransactionResultAdapterFactory.create()) + .registerTypeAdapterFactory(CoreTypeAdapterFactory.create()) .create(); @Mock