Skip to content

Commit 04e3d41

Browse files
committed
fix NPE with deserializing custom field empty set
1 parent c4f6d3b commit 04e3d41

File tree

5 files changed

+34
-1
lines changed

5 files changed

+34
-1
lines changed

commercetools/commercetools-sdk-java-api/src/main/java/com/commercetools/api/json/CustomFieldDeserializer.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,9 @@ private TypeReference<?> typeRef(JsonNode valueNode) {
143143
}
144144

145145
private ElemType elemType(JsonNode valueNode) {
146+
if (valueNode == null) {
147+
return ElemType.JSON_NODE;
148+
}
146149
JsonNodeType valueNodeType = valueNode.getNodeType();
147150
switch (valueNodeType) {
148151
case OBJECT:

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,12 @@
88
import java.time.LocalDate;
99
import java.time.LocalTime;
1010
import java.time.ZonedDateTime;
11+
import java.util.List;
1112
import java.util.Map;
1213

1314
import com.commercetools.api.models.common.LocalizedString;
1415
import com.commercetools.api.models.common.TypedMoney;
16+
import com.commercetools.api.models.order.Order;
1517
import com.commercetools.api.models.product.ProductReference;
1618
import com.commercetools.api.models.type.CustomFieldEnumValue;
1719
import com.commercetools.api.models.type.CustomFieldLocalizedEnumValue;
@@ -70,5 +72,13 @@ public void fields() throws IOException {
7072
number -> assertThat(number).isEqualTo(11.0));
7173
assertThat(fields.get("set-reference")).asList().first().isInstanceOf(ProductReference.class);
7274
assertThat(fields.get("set-money")).asList().first().isInstanceOf(TypedMoney.class);
75+
assertThat(fields.get("set-empty")).asList().isEmpty();
76+
}
77+
78+
@Test
79+
public void emptyField() throws IOException {
80+
Order order = JsonUtils.fromJsonString(stringFromResource("orderlineitem.json"), Order.class);
81+
82+
assertThat(order.getLineItems().get(0).getCustom().getFields().values().get("empty")).isInstanceOf(List.class);
7383
}
7484
}

commercetools/commercetools-sdk-java-api/src/test/resources/attributes.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -153,6 +153,10 @@
153153
}
154154
]
155155
]
156+
},
157+
{
158+
"name": "set-empty",
159+
"value": []
156160
}
157161
]
158162
}

commercetools/commercetools-sdk-java-api/src/test/resources/customfields.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
],
8080
"set-boolean": [
8181
true
82-
]
82+
],
83+
"set-empty": []
8384
}
8485
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
{
2+
"lineItems": [
3+
{
4+
"custom": {
5+
"type": {
6+
"typeId" : "type",
7+
"id": "12345"
8+
},
9+
"fields": {
10+
"empty": []
11+
}
12+
}
13+
}
14+
]
15+
}

0 commit comments

Comments
 (0)