Skip to content

Commit f6e3d9f

Browse files
adamthom-amznmillems
authored andcommitted
Fix binding of SdkPojoSupplier to event stream type header.
Event stream type header values are generated from the member name in the event stream structure, not the structure name of the event itself. When the member name and the event type mismatch, then unmarshalling of events sent from the service fails. From the spec: `:event-type: This header’s value, a UTF-8 string, is derived from the event’s member name in the eventstream structure`
1 parent c7b2909 commit f6e3d9f

File tree

4 files changed

+10
-5
lines changed

4 files changed

+10
-5
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
{
2+
"category": "AWS SDK for Java v2",
3+
"type": "bugfix",
4+
"description": "Fix unmarshalling of events when structure member name and shape name mismatch."
5+
}

codegen/src/main/java/software/amazon/awssdk/codegen/poet/client/specs/JsonProtocolSpec.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -417,9 +417,9 @@ private void responseHandlersForEventStreaming(OperationModel opModel, TypeName
417417
protocolFactory,
418418
JsonOperationMetadata.class,
419419
ClassName.get(EventStreamTaggedUnionPojoSupplier.class));
420-
EventStreamUtils.getEvents(eventStream)
420+
EventStreamUtils.getEventMembers(eventStream)
421421
.forEach(m -> builder.add(".putSdkPojoSupplier(\"$L\", $T::builder)\n",
422-
m.getC2jName(), poetExtensions.getModelClass(m.getC2jName())));
422+
m.getC2jName(), poetExtensions.getModelClass(m.getShape().getC2jName())));
423423
builder.add(".defaultSdkPojoSupplier(() -> $T.UNKNOWN)\n"
424424
+ ".build());\n", eventStreamBaseClass);
425425
}

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/c2j/json/service-2.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,7 @@
404404
"EventOne": {
405405
"shape": "EventOne"
406406
},
407-
"EventTwo": {
407+
"event-two": {
408408
"shape": "EventTwo"
409409
}
410410
},

codegen/src/test/resources/software/amazon/awssdk/codegen/poet/client/test-async-client-class.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -259,7 +259,7 @@ public CompletableFuture<Void> eventStreamOperation(EventStreamOperationRequest
259259
HttpResponseHandler<? extends EventStream> eventResponseHandler = protocolFactory.createResponseHandler(
260260
JsonOperationMetadata.builder().isPayloadJson(true).hasStreamingSuccessResponse(false).build(),
261261
EventStreamTaggedUnionPojoSupplier.builder().putSdkPojoSupplier("EventOne", EventOne::builder)
262-
.putSdkPojoSupplier("EventTwo", EventTwo::builder).defaultSdkPojoSupplier(() -> EventStream.UNKNOWN)
262+
.putSdkPojoSupplier("event-two", EventTwo::builder).defaultSdkPojoSupplier(() -> EventStream.UNKNOWN)
263263
.build());
264264

265265
HttpResponseHandler<AwsServiceException> errorResponseHandler = createErrorResponseHandler(protocolFactory,
@@ -397,7 +397,7 @@ public CompletableFuture<Void> eventStreamOperationWithOnlyOutput(
397397
HttpResponseHandler<? extends EventStream> eventResponseHandler = protocolFactory.createResponseHandler(
398398
JsonOperationMetadata.builder().isPayloadJson(true).hasStreamingSuccessResponse(false).build(),
399399
EventStreamTaggedUnionPojoSupplier.builder().putSdkPojoSupplier("EventOne", EventOne::builder)
400-
.putSdkPojoSupplier("EventTwo", EventTwo::builder).defaultSdkPojoSupplier(() -> EventStream.UNKNOWN)
400+
.putSdkPojoSupplier("event-two", EventTwo::builder).defaultSdkPojoSupplier(() -> EventStream.UNKNOWN)
401401
.build());
402402

403403
HttpResponseHandler<AwsServiceException> errorResponseHandler = createErrorResponseHandler(protocolFactory,

0 commit comments

Comments
 (0)