Skip to content

Commit 0621fc2

Browse files
authored
Merge pull request #746 from commercetools/fix-deserialize-subtypes
Fix deserialization if subtype discriminator is missing
2 parents fe6974d + 4f1f258 commit 0621fc2

File tree

5 files changed

+44
-25
lines changed

5 files changed

+44
-25
lines changed

commercetools/commercetools-sdk-java-api/src/test/java/com/commercetools/CartDiscountTest.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
import static org.assertj.core.api.Assertions.assertThat;
55

66
import com.commercetools.api.models.cart_discount.*;
7+
import com.commercetools.api.models.common.ReferenceTypeId;
78

9+
import io.vrap.rmf.base.client.utils.json.JsonUtils;
10+
11+
import org.assertj.core.api.Assertions;
812
import org.junit.jupiter.api.Test;
913

1014
public class CartDiscountTest {
@@ -94,4 +98,17 @@ public void giftLineItemValueToDraft() {
9498
});
9599

96100
}
101+
102+
@Test
103+
public void deserializeGiftLineItemWithoutTypeId() {
104+
String json = "{\"value\": { \"type\": \"giftLineItem\", \"product\": { \"id\": \"foo\" } } }";
105+
CartDiscount cartDiscount = JsonUtils.fromJsonString(json, CartDiscount.class);
106+
Assertions.assertThat(cartDiscount.getValue())
107+
.isInstanceOfSatisfying(CartDiscountValueGiftLineItem.class, cartDiscountValueGiftLineItem -> {
108+
assertThat(cartDiscountValueGiftLineItem.getProduct().getId()).isEqualTo("foo");
109+
assertThat(cartDiscountValueGiftLineItem.getProduct().getTypeId())
110+
.isEqualTo(ReferenceTypeId.PRODUCT);
111+
});
112+
Assertions.assertThat(cartDiscount.getValue()).isInstanceOf(CartDiscountValueGiftLineItem.class);
113+
}
97114
}

gradle-scripts/extensions.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ ext {
55
convenience: 'com.commercetools.sdk.jvm.core:commercetools-convenience:2.16.0',
66
version: {
77
strictly '[1.62.0,)'
8-
prefer '2.14.0'
8+
prefer '2.16.0'
99
}
1010
]
1111

licenses/commercetools-sdk-compat-v1/index.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"dependencies": [
33
{
44
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-java-client",
5-
"moduleVersion": "2.14.0",
5+
"moduleVersion": "2.16.0",
66
"moduleLicenses": [
77
{
88
"moduleLicense": "Apache License, Version 2.0",
@@ -12,7 +12,7 @@
1212
},
1313
{
1414
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-java-client-ahc-2_0",
15-
"moduleVersion": "2.14.0",
15+
"moduleVersion": "2.16.0",
1616
"moduleLicenses": [
1717
{
1818
"moduleLicense": "Apache License, Version 2.0",
@@ -22,7 +22,7 @@
2222
},
2323
{
2424
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-java-client-core",
25-
"moduleVersion": "2.14.0",
25+
"moduleVersion": "2.16.0",
2626
"moduleLicenses": [
2727
{
2828
"moduleLicense": "Apache License, Version 2.0",
@@ -32,7 +32,7 @@
3232
},
3333
{
3434
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-models",
35-
"moduleVersion": "2.14.0",
35+
"moduleVersion": "2.16.0",
3636
"moduleLicenses": [
3737
{
3838
"moduleLicense": "Apache License, Version 2.0",
@@ -42,7 +42,7 @@
4242
},
4343
{
4444
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-sdk-base",
45-
"moduleVersion": "2.14.0",
45+
"moduleVersion": "2.16.0",
4646
"moduleLicenses": [
4747
{
4848
"moduleLicense": "Apache License, Version 2.0",
@@ -52,7 +52,7 @@
5252
},
5353
{
5454
"moduleName": "com.commercetools.sdk.jvm.core:sdk-http",
55-
"moduleVersion": "2.14.0",
55+
"moduleVersion": "2.16.0",
5656
"moduleLicenses": [
5757
{
5858
"moduleLicense": "Apache License, Version 2.0",
@@ -62,7 +62,7 @@
6262
},
6363
{
6464
"moduleName": "com.commercetools.sdk.jvm.core:sdk-http-ahc-2_0",
65-
"moduleVersion": "2.14.0",
65+
"moduleVersion": "2.16.0",
6666
"moduleLicenses": [
6767
{
6868
"moduleLicense": "Apache License, Version 2.0",

licenses/index.json

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
"dependencies": [
33
{
44
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-java-client",
5-
"moduleVersion": "2.14.0",
5+
"moduleVersion": "2.16.0",
66
"moduleLicenses": [
77
{
88
"moduleLicense": "Apache License, Version 2.0",
@@ -12,7 +12,7 @@
1212
},
1313
{
1414
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-java-client-ahc-2_0",
15-
"moduleVersion": "2.14.0",
15+
"moduleVersion": "2.16.0",
1616
"moduleLicenses": [
1717
{
1818
"moduleLicense": "Apache License, Version 2.0",
@@ -22,7 +22,7 @@
2222
},
2323
{
2424
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-java-client-core",
25-
"moduleVersion": "2.14.0",
25+
"moduleVersion": "2.16.0",
2626
"moduleLicenses": [
2727
{
2828
"moduleLicense": "Apache License, Version 2.0",
@@ -32,7 +32,7 @@
3232
},
3333
{
3434
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-models",
35-
"moduleVersion": "2.14.0",
35+
"moduleVersion": "2.16.0",
3636
"moduleLicenses": [
3737
{
3838
"moduleLicense": "Apache License, Version 2.0",
@@ -42,7 +42,7 @@
4242
},
4343
{
4444
"moduleName": "com.commercetools.sdk.jvm.core:commercetools-sdk-base",
45-
"moduleVersion": "2.14.0",
45+
"moduleVersion": "2.16.0",
4646
"moduleLicenses": [
4747
{
4848
"moduleLicense": "Apache License, Version 2.0",
@@ -52,7 +52,7 @@
5252
},
5353
{
5454
"moduleName": "com.commercetools.sdk.jvm.core:sdk-http",
55-
"moduleVersion": "2.14.0",
55+
"moduleVersion": "2.16.0",
5656
"moduleLicenses": [
5757
{
5858
"moduleLicense": "Apache License, Version 2.0",
@@ -62,7 +62,7 @@
6262
},
6363
{
6464
"moduleName": "com.commercetools.sdk.jvm.core:sdk-http-ahc-2_0",
65-
"moduleVersion": "2.14.0",
65+
"moduleVersion": "2.16.0",
6666
"moduleLicenses": [
6767
{
6868
"moduleLicense": "Apache License, Version 2.0",

rmf/rmf-java-base/src/main/java/io/vrap/rmf/base/client/utils/json/JsonUtils.java

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import com.fasterxml.jackson.core.JsonProcessingException;
1212
import com.fasterxml.jackson.core.type.TypeReference;
1313
import com.fasterxml.jackson.databind.*;
14+
import com.fasterxml.jackson.databind.json.JsonMapper;
1415
import com.fasterxml.jackson.databind.module.SimpleModule;
1516
import com.fasterxml.jackson.databind.node.ArrayNode;
1617
import com.fasterxml.jackson.databind.node.ObjectNode;
@@ -52,17 +53,18 @@ public static ObjectMapper createObjectMapper(final ModuleOptions options) {
5253
final List<SimpleModule> moduleList = new ArrayList<>();
5354
suppliers.iterator().forEachRemaining(moduleSupplier -> moduleList.add(moduleSupplier.getModule(options)));
5455

55-
final ObjectMapper objectMapper = new ObjectMapper();
56-
objectMapper.registerModule(new JavaTimeModule()) //provides serialization and deserialization for LocalDate and LocalTime (JSR310 Jackson module)
57-
.registerModule(new ZonedDateTimeSerializationModule()) //custom serializer for LocalDate, LocalTime and ZonedDateTime
58-
.registerModule(new ZonedDateTimeDeserializationModule()) //custom deserializer for ZonedDateTime
59-
.registerModule(new LocalDateDeserializationModule()) //custom deserializer for LocalDate
60-
.registerModules(loader)
61-
.registerModules(moduleList)
62-
.setSerializationInclusion(JsonInclude.Include.NON_NULL) //ignore null fields
56+
return JsonMapper.builder()
57+
.addModule(new JavaTimeModule()) //provides serialization and deserialization for LocalDate and LocalTime (JSR310 Jackson module)
58+
.addModule(new ZonedDateTimeSerializationModule()) //custom serializer for LocalDate, LocalTime and ZonedDateTime
59+
.addModule(new ZonedDateTimeDeserializationModule()) //custom deserializer for ZonedDateTime
60+
.addModule(new LocalDateDeserializationModule()) //custom deserializer for LocalDate
61+
.addModules(loader)
62+
.addModules(moduleList)
63+
.serializationInclusion(JsonInclude.Include.NON_NULL) //ignore null fields
6364
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
64-
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
65-
return objectMapper;
65+
.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false)
66+
.configure(MapperFeature.REQUIRE_TYPE_ID_FOR_SUBTYPES, false)
67+
.build();
6668
}
6769

6870
/**

0 commit comments

Comments
 (0)