Skip to content

Commit 7c684d8

Browse files
committed
fix Delivery discriminators
1 parent a2e4426 commit 7c684d8

File tree

3 files changed

+59
-2
lines changed

3 files changed

+59
-2
lines changed

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@
66

77
import com.commercetools.api.models.product.AttributeImpl;
88
import com.commercetools.api.models.product_search.ProductSearchFacetResult;
9+
import com.commercetools.api.models.subscription.DeliveryPayload;
10+
import com.commercetools.api.models.subscription.DeliveryPayloadMixin;
911
import com.commercetools.api.models.type.FieldContainerImpl;
1012
import com.fasterxml.jackson.core.type.TypeReference;
1113
import com.fasterxml.jackson.databind.module.SimpleModule;
@@ -63,5 +65,6 @@ public ApiModule(ModuleOptions options) {
6365
addDeserializer(FieldContainerImpl.class,
6466
new CustomFieldDeserializer(customFieldAsDateString, customFieldNumberAsDouble, customFieldTypes));
6567
}
68+
setMixInAnnotation(DeliveryPayload.class, DeliveryPayloadMixin.class);
6669
}
6770
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
2+
package com.commercetools.api.models.subscription;
3+
4+
import com.fasterxml.jackson.annotation.JsonSubTypes;
5+
import com.fasterxml.jackson.annotation.JsonTypeInfo;
6+
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
7+
8+
@JsonSubTypes({
9+
@JsonSubTypes.Type(value = com.commercetools.api.models.subscription.MessageDeliveryPayloadImpl.class, name = MessageDeliveryPayload.MESSAGE),
10+
@JsonSubTypes.Type(value = com.commercetools.api.models.subscription.ResourceCreatedDeliveryPayloadImpl.class, name = ResourceCreatedDeliveryPayload.RESOURCE_CREATED),
11+
@JsonSubTypes.Type(value = com.commercetools.api.models.subscription.ResourceDeletedDeliveryPayloadImpl.class, name = ResourceDeletedDeliveryPayload.RESOURCE_DELETED),
12+
@JsonSubTypes.Type(value = com.commercetools.api.models.subscription.ResourceUpdatedDeliveryPayloadImpl.class, name = ResourceUpdatedDeliveryPayload.RESOURCE_UPDATED) })
13+
@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.EXISTING_PROPERTY, property = "notificationType", defaultImpl = DeliveryPayloadImpl.class, visible = true)
14+
@JsonDeserialize(as = DeliveryPayloadImpl.class)
15+
public class DeliveryPayloadMixin {
16+
}

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

Lines changed: 40 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,7 @@
99
import com.commercetools.api.models.message.CustomerLastNameSetMessagePayload;
1010
import com.commercetools.api.models.message.MessagePayload;
1111
import com.commercetools.api.models.message.OrderCreatedMessagePayload;
12-
import com.commercetools.api.models.subscription.DeliveryPayload;
13-
import com.commercetools.api.models.subscription.MessageDeliveryPayload;
12+
import com.commercetools.api.models.subscription.*;
1413

1514
import io.vrap.rmf.base.client.utils.json.JsonUtils;
1615

@@ -19,6 +18,45 @@
1918

2019
public class MessagePayloadTest {
2120

21+
@Test
22+
public void delivery() {
23+
String messagePayload = "{\n" + " \"notificationType\":\"Message\",\n"
24+
+ " \"projectKey\":\"<project_key>\",\n" + " \"id\":\"<message_id>\",\n" + " \"version\":1,\n"
25+
+ " \"sequenceNumber\":2,\n" + " \"resource\":{\n" + " \"typeId\":\"customer\",\n"
26+
+ " \"id\":\"<customer_id>\"\n" + " },\n" + " \"resourceVersion\":2,\n"
27+
+ " \"resourceUserProvidedIdentifiers\":{},\n" + " \"type\":\"CustomerLastNameSet\",\n"
28+
+ " \"lastName\":\"Doe\",\n" + " \"createdAt\":\"2022-10-25T13:30:09.760Z\",\n"
29+
+ " \"lastModifiedAt\":\"2022-10-25T13:30:09.760Z\"\n" + "}";
30+
SubscriptionNotification deserializedObject = JsonUtils.fromJsonString(messagePayload,
31+
SubscriptionNotification.class);
32+
Assertions.assertThat(deserializedObject).isInstanceOf(MessageDeliveryPayload.class);
33+
34+
deserializedObject = JsonUtils.fromJsonString(messagePayload, DeliveryPayload.class);
35+
Assertions.assertThat(deserializedObject).isInstanceOf(MessageDeliveryPayload.class);
36+
37+
String eventPayload = "{\n" + " \"id\": \"3b364ca2-cbe5-42b4-a85a-37d4e57d659e\",\n"
38+
+ " \"notificationType\": \"Event\",\n" + " \"type\": \"ImportContainerCreated\",\n"
39+
+ " \"resourceType\": \"import-api\",\n" + " \"data\": {\n" + " \"version\": 1,\n"
40+
+ " \"key\": \"my-import-container\",\n" + " \"createdAt\": \"2025-03-26T17:28:20.376Z\",\n"
41+
+ " \"lastModifiedAt\": \"2025-03-26T17:28:20.376Z\"\n" + " },\n"
42+
+ " \"createdAt\": \"2025-03-26T17:28:20.397Z\"\n" + "}\n";
43+
deserializedObject = JsonUtils.fromJsonString(eventPayload, SubscriptionNotification.class);
44+
Assertions.assertThat(deserializedObject).isInstanceOf(EventDeliveryPayload.class);
45+
46+
String changePayload = "{\n" + " \"notificationType\":\"ResourceCreated\",\n"
47+
+ " \"projectKey\":\"<project_key>\",\n" + " \"resource\":{\n" + " \"typeId\":\"product\",\n"
48+
+ " \"id\":\"<product_id>\"\n" + " },\n" + " \"resourceUserProvidedIdentifiers\":{\n"
49+
+ " \"key\":\"example-product-key\",\n" + " \"slug\":{\n" + " \"en\":\"example-slug\"\n"
50+
+ " }\n" + " },\n" + " \"version\":1,\n" + " \"modifiedAt\":\"2022-10-25T13:23:05.384Z\"\n"
51+
+ "}\n";
52+
deserializedObject = JsonUtils.fromJsonString(changePayload, SubscriptionNotification.class);
53+
Assertions.assertThat(deserializedObject).isInstanceOf(ResourceCreatedDeliveryPayload.class);
54+
55+
deserializedObject = JsonUtils.fromJsonString(changePayload, DeliveryPayload.class);
56+
Assertions.assertThat(deserializedObject).isInstanceOf(ResourceCreatedDeliveryPayload.class);
57+
58+
}
59+
2260
@Test
2361
public void deserializeOrderCreatedMessageFromString() throws IOException {
2462
String payload = "{\"type\": \"OrderCreated\", \"order\": {}}";

0 commit comments

Comments
 (0)