diff --git a/.changes/next-release/bugfix-AWSSDKforJavav2-1924edd.json b/.changes/next-release/bugfix-AWSSDKforJavav2-1924edd.json new file mode 100644 index 000000000000..55144bd3403b --- /dev/null +++ b/.changes/next-release/bugfix-AWSSDKforJavav2-1924edd.json @@ -0,0 +1,6 @@ +{ + "type": "bugfix", + "category": "AWS SDK for Java v2", + "contributor": "", + "description": "Fix issue in generating event shapes shared between multiple eventstreams." +} diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/common/AbstractEnumClass.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/common/AbstractEnumClass.java index 60d2b52f9c2b..a797e7d84327 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/common/AbstractEnumClass.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/common/AbstractEnumClass.java @@ -56,12 +56,14 @@ public final TypeSpec poetSpec() { .addMethod(knownValuesSpec()) .addMethod(createConstructor()); + addSuperInterface(enumBuilder); addDeprecated(enumBuilder); addJavadoc(enumBuilder); addEnumConstants(enumBuilder); enumBuilder.addEnumConstant(UNKNOWN_TO_SDK_VERSION, TypeSpec.anonymousClassBuilder("null").build()); + addAdditionalMethods(enumBuilder); return enumBuilder.build(); } @@ -74,6 +76,14 @@ protected final ShapeModel getShape() { protected abstract void addJavadoc(Builder enumBuilder); protected abstract void addEnumConstants(Builder enumBuilder); + + protected void addSuperInterface(Builder enumBuilder) { + // no-op + } + + protected void addAdditionalMethods(Builder enumBuilder) { + // no-op + } private FieldSpec valueMapField() { ParameterizedTypeName mapType = ParameterizedTypeName.get(ClassName.get(Map.class), diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/eventstream/EventStreamUtils.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/eventstream/EventStreamUtils.java index 0d9b8a34e39d..73b501bb5ef6 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/eventstream/EventStreamUtils.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/eventstream/EventStreamUtils.java @@ -171,11 +171,11 @@ public static boolean doesShapeContainsEventStream(ShapeModel parentShape, Shape * Returns true if the given event shape is a sub-member of any operation request. */ public static boolean isRequestEvent(IntermediateModel model, ShapeModel eventShape) { - return getBaseEventStreamShape(model, eventShape) - .map(stream -> model.getOperations().values() - .stream() - .anyMatch(o -> doesShapeContainsEventStream(o.getInputShape(), stream))) - .orElse(false); + return getBaseEventStreamShapes(model, eventShape) + .stream() + .anyMatch(streamShape -> model.getOperations().values() + .stream() + .anyMatch(o -> doesShapeContainsEventStream(o.getInputShape(), streamShape))); } private static boolean operationContainsEventStream(OperationModel opModel, ShapeModel eventStreamShape) { diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/eventstream/EventTypeEnumSpec.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/eventstream/EventTypeEnumSpec.java index b404b44fcfec..5ecd09eac635 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/eventstream/EventTypeEnumSpec.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/eventstream/EventTypeEnumSpec.java @@ -16,13 +16,17 @@ package software.amazon.awssdk.codegen.poet.eventstream; import com.squareup.javapoet.ClassName; +import com.squareup.javapoet.MethodSpec; import com.squareup.javapoet.TypeSpec; +import javax.lang.model.element.Modifier; import software.amazon.awssdk.codegen.model.intermediate.IntermediateModel; import software.amazon.awssdk.codegen.model.intermediate.ShapeModel; import software.amazon.awssdk.codegen.naming.NamingStrategy; import software.amazon.awssdk.codegen.poet.common.AbstractEnumClass; +import software.amazon.awssdk.core.SdkEventType; public class EventTypeEnumSpec extends AbstractEnumClass { + private static final Object VALUE = "value"; private final String enumPackageName; private final IntermediateModel intermediateModel; @@ -32,6 +36,11 @@ public EventTypeEnumSpec(String enumPackageName, IntermediateModel intermediateM this.intermediateModel = intermediateModel; } + @Override + protected void addSuperInterface(TypeSpec.Builder enumBuilder) { + enumBuilder.addSuperinterface(ClassName.get(SdkEventType.class)); + } + @Override protected void addDeprecated(TypeSpec.Builder enumBuilder) { // no-op @@ -54,6 +63,18 @@ protected void addEnumConstants(TypeSpec.Builder enumBuilder) { }); } + @Override + protected void addAdditionalMethods(TypeSpec.Builder enumBuilder) { + enumBuilder.addMethod( + MethodSpec.methodBuilder("id") + .addAnnotation(Override.class) + .returns(String.class) + .addModifiers(Modifier.PUBLIC) + .addStatement("return $T.valueOf($N)", String.class, VALUE) + .build() + ); + } + @Override public ClassName className() { return ClassName.get(enumPackageName, "EventType"); diff --git a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/AwsServiceModel.java b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/AwsServiceModel.java index 757786cec28f..17e3eb4f5267 100644 --- a/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/AwsServiceModel.java +++ b/codegen/src/main/java/software/amazon/awssdk/codegen/poet/model/AwsServiceModel.java @@ -60,6 +60,7 @@ import software.amazon.awssdk.codegen.poet.PoetUtils; import software.amazon.awssdk.codegen.poet.eventstream.EventStreamUtils; import software.amazon.awssdk.codegen.poet.model.TypeProvider.TypeNameOptions; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.core.SdkField; import software.amazon.awssdk.core.SdkPojo; import software.amazon.awssdk.utils.StringUtils; @@ -71,6 +72,7 @@ */ public class AwsServiceModel implements ClassSpec { + public static final String UNKNOWN_TO_SDK_VERSION = "UNKNOWN_TO_SDK_VERSION"; private final IntermediateModel intermediateModel; private final ShapeModel shapeModel; private final PoetExtension poetExtensions; @@ -169,12 +171,10 @@ private TypeSpec eventStreamInterfaceSpec() { .addType(helper.eventTypeEnumSpec()); - ClassName eventTypeEnum = helper.eventTypeEnumClassName(); builder.addMethod(MethodSpec.methodBuilder("sdkEventType") - .addModifiers(Modifier.PUBLIC, Modifier.DEFAULT) - .returns(eventTypeEnum) + .addModifiers(Modifier.PUBLIC, Modifier.ABSTRACT) + .returns(SdkEventType.class) .addJavadoc("The type of this event. Corresponds to the {@code :event-type} header on the Message.") - .addStatement("return $T.UNKNOWN_TO_SDK_VERSION", eventTypeEnum) .build()); if (!outputOperations.isEmpty()) { @@ -209,8 +209,22 @@ private TypeSpec eventStreamInterfaceSpec() { } private void addEventSupport(TypeSpec.Builder specBuilder) { - EventStreamUtils.getBaseEventStreamShapes(intermediateModel, shapeModel) - .forEach(eventStream -> addEventSupport(specBuilder, eventStream)); + List eventStreamShapes = EventStreamUtils.getBaseEventStreamShapes(intermediateModel, shapeModel); + eventStreamShapes.forEach(eventStream -> addEventSupport(specBuilder, eventStream)); + + boolean legacyEvents = eventStreamShapes + .stream() + .anyMatch(this::useLegacyEventGenerationScheme); + + if (!legacyEvents) { + specBuilder.addMethod( + MethodSpec.methodBuilder("sdkEventType") + .addAnnotation(Override.class) + .addModifiers(PUBLIC) + .returns(SdkEventType.class) + .addStatement("throw new $T($S)", UnsupportedOperationException.class, "Unknown Event") + .build()); + } } private void addEventSupport(TypeSpec.Builder specBuilder, ShapeModel eventStream) { @@ -284,14 +298,19 @@ private List findOutputEventStreamOperations(Collection outputOperations, ClassName eventStreamModelClass) { + ClassName eventTypeEnum = eventStreamModelClass.nestedClass("EventType"); CodeBlock.Builder builder = CodeBlock.builder() .add("new $T() {\n" + " @Override\n" + " public $T<$T> sdkFields() {\n" + " return $T.emptyList();\n" + + " }\n" + + " @Override\n" + + " public SdkEventType sdkEventType() {\n" + + " return $T.$L;\n" + " }\n", eventStreamModelClass, List.class, SdkField.class, - Collections.class + Collections.class, eventTypeEnum, UNKNOWN_TO_SDK_VERSION ); for (OperationModel opModel : outputOperations) { diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventone.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventone.java index 48c7b5544789..0587c5aeecdb 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventone.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventone.java @@ -12,6 +12,7 @@ import java.util.function.Consumer; import java.util.function.Function; import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.core.SdkField; import software.amazon.awssdk.core.SdkPojo; import software.amazon.awssdk.core.protocol.MarshallLocation; @@ -148,6 +149,11 @@ public void accept(EventStreamOperationResponseHandler.Visitor visitor) { throw new UnsupportedOperationException(); } + @Override + public SdkEventType sdkEventType() { + throw new UnsupportedOperationException("Unknown Event"); + } + public interface Builder extends SdkPojo, CopyableBuilder { /** * Sets the value of the Foo property for this object. diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventstream.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventstream.java index 5ad94156118d..2ba1a7b55b3c 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventstream.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventstream.java @@ -7,6 +7,7 @@ import java.util.Set; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.core.SdkField; import software.amazon.awssdk.core.SdkPojo; import software.amazon.awssdk.services.jsonprotocoltests.model.eventstream.DefaultEventOne; @@ -31,6 +32,11 @@ public List> sdkFields() { return Collections.emptyList(); } + @Override + public SdkEventType sdkEventType() { + return EventType.UNKNOWN_TO_SDK_VERSION; + } + @Override public void accept(EventStreamOperationResponseHandler.Visitor visitor) { visitor.visitDefault(this); @@ -75,9 +81,7 @@ static EventTwo.Builder eventthreeBuilder() { /** * The type of this event. Corresponds to the {@code :event-type} header on the Message. */ - default EventType sdkEventType() { - return EventType.UNKNOWN_TO_SDK_VERSION; - } + SdkEventType sdkEventType(); /** * Calls the appropriate visit method depending on the subtype of {@link EventStream}. @@ -91,7 +95,7 @@ default EventType sdkEventType() { * The known possible types of events for {@code EventStream}. */ @Generated("software.amazon.awssdk:codegen") - enum EventType { + enum EventType implements SdkEventType { EVENT_ONE("EventOne"), SECOND_EVENT_ONE("SecondEventOne"), @@ -142,5 +146,10 @@ public static Set knownValues() { knownValues.remove(UNKNOWN_TO_SDK_VERSION); return knownValues; } + + @Override + public String id() { + return String.valueOf(value); + } } } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventtwo.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventtwo.java index a75b587bb251..9d7e2e44e313 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventtwo.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/eventtwo.java @@ -12,6 +12,7 @@ import java.util.function.Consumer; import java.util.function.Function; import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.core.SdkField; import software.amazon.awssdk.core.SdkPojo; import software.amazon.awssdk.core.protocol.MarshallLocation; @@ -148,6 +149,11 @@ public void accept(EventStreamOperationResponseHandler.Visitor visitor) { throw new UnsupportedOperationException(); } + @Override + public SdkEventType sdkEventType() { + throw new UnsupportedOperationException("Unknown Event"); + } + public interface Builder extends SdkPojo, CopyableBuilder { /** * Sets the value of the Bar property for this object. diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputevent.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputevent.java index 167b63bf2865..665851f1f9b1 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputevent.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputevent.java @@ -14,6 +14,7 @@ import java.util.function.Function; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.core.SdkBytes; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.core.SdkField; import software.amazon.awssdk.core.SdkPojo; import software.amazon.awssdk.core.protocol.MarshallLocation; @@ -145,6 +146,11 @@ private static BiConsumer setter(BiConsumer s) { return (obj, val) -> s.accept((Builder) obj, val); } + @Override + public SdkEventType sdkEventType() { + throw new UnsupportedOperationException("Unknown Event"); + } + public interface Builder extends SdkPojo, CopyableBuilder { /** * Sets the value of the ExplicitPayloadMember property for this object. diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventstream.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventstream.java index 3da0898bc8ce..f576b2108dd8 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventstream.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventstream.java @@ -5,6 +5,7 @@ import java.util.Set; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.services.jsonprotocoltests.model.inputeventstream.DefaultInputEvent; import software.amazon.awssdk.utils.internal.EnumUtils; @@ -24,15 +25,13 @@ static InputEvent.Builder inputEventBuilder() { /** * The type of this event. Corresponds to the {@code :event-type} header on the Message. */ - default EventType sdkEventType() { - return EventType.UNKNOWN_TO_SDK_VERSION; - } + SdkEventType sdkEventType(); /** * The known possible types of events for {@code InputEventStream}. */ @Generated("software.amazon.awssdk:codegen") - enum EventType { + enum EventType implements SdkEventType { INPUT_EVENT("InputEvent"), UNKNOWN_TO_SDK_VERSION(null); @@ -75,5 +74,10 @@ public static Set knownValues() { knownValues.remove(UNKNOWN_TO_SDK_VERSION); return knownValues; } + + @Override + public String id() { + return String.valueOf(value); + } } } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventstreamtwo.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventstreamtwo.java index 43530e1be8c1..bbc29f174001 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventstreamtwo.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventstreamtwo.java @@ -5,6 +5,7 @@ import java.util.Set; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.services.jsonprotocoltests.model.inputeventstreamtwo.DefaultInputEventTwo; import software.amazon.awssdk.utils.internal.EnumUtils; @@ -24,15 +25,13 @@ static InputEventTwo.Builder inputEventTwoBuilder() { /** * The type of this event. Corresponds to the {@code :event-type} header on the Message. */ - default EventType sdkEventType() { - return EventType.UNKNOWN_TO_SDK_VERSION; - } + SdkEventType sdkEventType(); /** * The known possible types of events for {@code InputEventStreamTwo}. */ @Generated("software.amazon.awssdk:codegen") - enum EventType { + enum EventType implements SdkEventType { INPUT_EVENT_TWO("InputEventTwo"), UNKNOWN_TO_SDK_VERSION(null); @@ -75,5 +74,10 @@ public static Set knownValues() { knownValues.remove(UNKNOWN_TO_SDK_VERSION); return knownValues; } + + @Override + public String id() { + return String.valueOf(value); + } } } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventtwo.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventtwo.java index ce1c91f4e817..2ee28db940f2 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventtwo.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/inputeventtwo.java @@ -14,6 +14,7 @@ import java.util.function.Function; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.core.SdkBytes; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.core.SdkField; import software.amazon.awssdk.core.SdkPojo; import software.amazon.awssdk.core.protocol.MarshallLocation; @@ -190,6 +191,11 @@ private static BiConsumer setter(BiConsumer s) { return (obj, val) -> s.accept((Builder) obj, val); } + @Override + public SdkEventType sdkEventType() { + throw new UnsupportedOperationException("Unknown Event"); + } + public interface Builder extends SdkPojo, CopyableBuilder { /** * Sets the value of the ImplicitPayloadMemberOne property for this object. diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/eventstream.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/eventstream.java index 7b4ee13981f9..4e9df33733f7 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/eventstream.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/eventstream.java @@ -7,6 +7,7 @@ import java.util.Set; import software.amazon.awssdk.annotations.Generated; import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.core.SdkField; import software.amazon.awssdk.core.SdkPojo; import software.amazon.awssdk.services.sharedeventstream.model.eventstream.DefaultPerson; @@ -27,6 +28,11 @@ public List> sdkFields() { return Collections.emptyList(); } + @Override + public SdkEventType sdkEventType() { + return EventType.UNKNOWN_TO_SDK_VERSION; + } + @Override public void accept(StreamBirthsResponseHandler.Visitor visitor) { visitor.visitDefault(this); @@ -48,9 +54,7 @@ static Person.Builder personBuilder() { /** * The type of this event. Corresponds to the {@code :event-type} header on the Message. */ - default EventType sdkEventType() { - return EventType.UNKNOWN_TO_SDK_VERSION; - } + SdkEventType sdkEventType(); /** * Calls the appropriate visit method depending on the subtype of {@link EventStream}. @@ -72,7 +76,7 @@ default EventType sdkEventType() { * The known possible types of events for {@code EventStream}. */ @Generated("software.amazon.awssdk:codegen") - enum EventType { + enum EventType implements SdkEventType { PERSON("Person"), UNKNOWN_TO_SDK_VERSION(null); @@ -115,5 +119,10 @@ public static Set knownValues() { knownValues.remove(UNKNOWN_TO_SDK_VERSION); return knownValues; } + + @Override + public String id() { + return String.valueOf(value); + } } } diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/getrandompersonresponse.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/getrandompersonresponse.java index 1342f9e0c370..f33308c20a69 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/getrandompersonresponse.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/getrandompersonresponse.java @@ -12,6 +12,7 @@ import java.util.function.Consumer; import java.util.function.Function; import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.core.SdkField; import software.amazon.awssdk.core.SdkPojo; import software.amazon.awssdk.core.protocol.MarshallLocation; @@ -158,6 +159,11 @@ private static BiConsumer setter(BiConsumer s) { return (obj, val) -> s.accept((Builder) obj, val); } + @Override + public SdkEventType sdkEventType() { + throw new UnsupportedOperationException("Unknown Event"); + } + public interface Builder extends SharedEventStreamResponse.Builder, SdkPojo, CopyableBuilder { /** diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/person.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/person.java index 9ee0ccbce85e..58480f294e3c 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/person.java +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/person.java @@ -13,6 +13,7 @@ import java.util.function.Consumer; import java.util.function.Function; import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.core.SdkEventType; import software.amazon.awssdk.core.SdkField; import software.amazon.awssdk.core.SdkPojo; import software.amazon.awssdk.core.protocol.MarshallLocation; @@ -25,7 +26,8 @@ /** */ @Generated("software.amazon.awssdk:codegen") -public class Person implements SdkPojo, Serializable, ToCopyableBuilder, EventStream { +public class Person implements SdkPojo, Serializable, ToCopyableBuilder, StreamBirthsInputEventStream, + EventStream, StreamDeathsInputEventStream { private static final SdkField NAME_FIELD = SdkField. builder(MarshallingType.STRING).memberName("Name") .getter(getter(Person::name)).setter(setter(Builder::name)) .traits(LocationTrait.builder().location(MarshallLocation.PAYLOAD).locationName("Name").build()).build(); @@ -180,6 +182,11 @@ public void accept(StreamDeathsResponseHandler.Visitor visitor) { throw new UnsupportedOperationException(); } + @Override + public SdkEventType sdkEventType() { + throw new UnsupportedOperationException("Unknown Event"); + } + public interface Builder extends SdkPojo, CopyableBuilder { /** * Sets the value of the Name property for this object. diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/service-2.json b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/service-2.json index 4fa3c6714366..afc9c3816424 100644 --- a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/service-2.json +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/service-2.json @@ -33,6 +33,26 @@ "shape": "PeopleOutput" } }, + "StreamBirthsInput" : { + "name": "StreamBirths", + "http": { + "method": "POST", + "requestUri": "/births" + }, + "input": { + "shape": "StreamBirthsInputRequest" + } + }, + "StreamDeathsInput" : { + "name": "StreamDeathsInput", + "http": { + "method": "POST", + "requestUri": "/deaths" + }, + "input": { + "shape": "StreamDeathsInputRequest" + } + }, "GetRandomPerson" : { "name" : "GetRandomPerson", "http": { @@ -79,6 +99,40 @@ } }, "event": true + }, + "StreamBirthsInputRequest": { + "type": "structure", + "members": { + "StreamBirthsInputEventStream": { + "shape": "StreamBirthsInputEventStream" + } + } + }, + "StreamDeathsInputRequest": { + "type": "structure", + "members": { + "StreamDeathsInputEventStream": { + "shape": "StreamDeathsInputEventStream" + } + } + }, + "StreamBirthsInputEventStream": { + "type": "structure", + "members": { + "Person": { + "shape": "Person" + } + }, + "eventstream": true + }, + "StreamDeathsInputEventStream": { + "type": "structure", + "members": { + "Person": { + "shape": "Person" + } + }, + "eventstream": true } }, "documentation": "A service that streams births and deaths" diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streambirthsinputeventstream.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streambirthsinputeventstream.java new file mode 100644 index 000000000000..c36641dbb56e --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streambirthsinputeventstream.java @@ -0,0 +1,83 @@ +package software.amazon.awssdk.services.sharedeventstream.model; + +import java.util.EnumSet; +import java.util.Map; +import java.util.Set; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.core.SdkEventType; +import software.amazon.awssdk.services.sharedeventstream.model.streambirthsinputeventstream.DefaultPerson; +import software.amazon.awssdk.utils.internal.EnumUtils; + +/** + * Base interface for all event types in StreamBirthsInputEventStream. + */ +@Generated("software.amazon.awssdk:codegen") +@SdkPublicApi +public interface StreamBirthsInputEventStream { + /** + * Create a builder for the {@code Person} event type for this stream. + */ + static Person.Builder personBuilder() { + return DefaultPerson.builder(); + } + + /** + * The type of this event. Corresponds to the {@code :event-type} header on the Message. + */ + SdkEventType sdkEventType(); + + /** + * The known possible types of events for {@code StreamBirthsInputEventStream}. + */ + @Generated("software.amazon.awssdk:codegen") + enum EventType implements SdkEventType { + PERSON("Person"), + + UNKNOWN_TO_SDK_VERSION(null); + + private static final Map VALUE_MAP = EnumUtils.uniqueIndex(EventType.class, EventType::toString); + + private final String value; + + private EventType(String value) { + this.value = value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + /** + * Use this in place of valueOf to convert the raw string returned by the service into the enum value. + * + * @param value + * real value + * @return EventType corresponding to the value + */ + public static EventType fromValue(String value) { + if (value == null) { + return null; + } + return VALUE_MAP.getOrDefault(value, UNKNOWN_TO_SDK_VERSION); + } + + /** + * Use this in place of {@link #values()} to return a {@link Set} of all values known to the SDK. This will + * return all known enum values except {@link #UNKNOWN_TO_SDK_VERSION}. + * + * @return a {@link Set} of known {@link EventType}s + */ + public static Set knownValues() { + Set knownValues = EnumSet.allOf(EventType.class); + knownValues.remove(UNKNOWN_TO_SDK_VERSION); + return knownValues; + } + + @Override + public String id() { + return String.valueOf(value); + } + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streambirthsinputrequest.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streambirthsinputrequest.java new file mode 100644 index 000000000000..1524d21efca4 --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streambirthsinputrequest.java @@ -0,0 +1,139 @@ +package software.amazon.awssdk.services.sharedeventstream.model; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Consumer; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; +import software.amazon.awssdk.core.SdkField; +import software.amazon.awssdk.core.SdkPojo; +import software.amazon.awssdk.utils.ToString; +import software.amazon.awssdk.utils.builder.CopyableBuilder; +import software.amazon.awssdk.utils.builder.ToCopyableBuilder; + +/** + */ +@Generated("software.amazon.awssdk:codegen") +public final class StreamBirthsInputRequest extends SharedEventStreamRequest implements + ToCopyableBuilder { + private static final List> SDK_FIELDS = Collections.emptyList(); + + private static final Map> SDK_NAME_TO_FIELD = memberNameToFieldInitializer(); + + private StreamBirthsInputRequest(BuilderImpl builder) { + super(builder); + } + + @Override + public Builder toBuilder() { + return new BuilderImpl(this); + } + + public static Builder builder() { + return new BuilderImpl(); + } + + public static Class serializableBuilderClass() { + return BuilderImpl.class; + } + + @Override + public final int hashCode() { + int hashCode = 1; + hashCode = 31 * hashCode + super.hashCode(); + return hashCode; + } + + @Override + public final boolean equals(Object obj) { + return super.equals(obj) && equalsBySdkFields(obj); + } + + @Override + public final boolean equalsBySdkFields(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof StreamBirthsInputRequest)) { + return false; + } + return true; + } + + /** + * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be + * redacted from this string using a placeholder value. + */ + @Override + public final String toString() { + return ToString.builder("StreamBirthsInputRequest").build(); + } + + public final Optional getValueForField(String fieldName, Class clazz) { + return Optional.empty(); + } + + @Override + public final List> sdkFields() { + return SDK_FIELDS; + } + + @Override + public final Map> sdkFieldNameToField() { + return SDK_NAME_TO_FIELD; + } + + private static Map> memberNameToFieldInitializer() { + return Collections.emptyMap(); + } + + public interface Builder extends SharedEventStreamRequest.Builder, SdkPojo, + CopyableBuilder { + @Override + Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration); + + @Override + Builder overrideConfiguration(Consumer builderConsumer); + } + + static final class BuilderImpl extends SharedEventStreamRequest.BuilderImpl implements Builder { + private BuilderImpl() { + } + + private BuilderImpl(StreamBirthsInputRequest model) { + super(model); + } + + @Override + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + super.overrideConfiguration(overrideConfiguration); + return this; + } + + @Override + public Builder overrideConfiguration(Consumer builderConsumer) { + super.overrideConfiguration(builderConsumer); + return this; + } + + @Override + public StreamBirthsInputRequest build() { + return new StreamBirthsInputRequest(this); + } + + @Override + public List> sdkFields() { + return SDK_FIELDS; + } + + @Override + public Map> sdkFieldNameToField() { + return SDK_NAME_TO_FIELD; + } + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streambirthsinputresponse.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streambirthsinputresponse.java new file mode 100644 index 000000000000..44ba1723fc9e --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streambirthsinputresponse.java @@ -0,0 +1,118 @@ +package software.amazon.awssdk.services.sharedeventstream.model; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.core.SdkField; +import software.amazon.awssdk.core.SdkPojo; +import software.amazon.awssdk.utils.ToString; +import software.amazon.awssdk.utils.builder.CopyableBuilder; +import software.amazon.awssdk.utils.builder.ToCopyableBuilder; + +@Generated("software.amazon.awssdk:codegen") +public final class StreamBirthsInputResponse extends SharedEventStreamResponse implements + ToCopyableBuilder { + private static final List> SDK_FIELDS = Collections.emptyList(); + + private static final Map> SDK_NAME_TO_FIELD = memberNameToFieldInitializer(); + + private StreamBirthsInputResponse(BuilderImpl builder) { + super(builder); + } + + @Override + public Builder toBuilder() { + return new BuilderImpl(this); + } + + public static Builder builder() { + return new BuilderImpl(); + } + + public static Class serializableBuilderClass() { + return BuilderImpl.class; + } + + @Override + public final int hashCode() { + int hashCode = 1; + hashCode = 31 * hashCode + super.hashCode(); + return hashCode; + } + + @Override + public final boolean equals(Object obj) { + return super.equals(obj) && equalsBySdkFields(obj); + } + + @Override + public final boolean equalsBySdkFields(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof StreamBirthsInputResponse)) { + return false; + } + return true; + } + + /** + * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be + * redacted from this string using a placeholder value. + */ + @Override + public final String toString() { + return ToString.builder("StreamBirthsInputResponse").build(); + } + + public final Optional getValueForField(String fieldName, Class clazz) { + return Optional.empty(); + } + + @Override + public final List> sdkFields() { + return SDK_FIELDS; + } + + @Override + public final Map> sdkFieldNameToField() { + return SDK_NAME_TO_FIELD; + } + + private static Map> memberNameToFieldInitializer() { + return Collections.emptyMap(); + } + + public interface Builder extends SharedEventStreamResponse.Builder, SdkPojo, + CopyableBuilder { + } + + static final class BuilderImpl extends SharedEventStreamResponse.BuilderImpl implements Builder { + private BuilderImpl() { + } + + private BuilderImpl(StreamBirthsInputResponse model) { + super(model); + } + + @Override + public StreamBirthsInputResponse build() { + return new StreamBirthsInputResponse(this); + } + + @Override + public List> sdkFields() { + return SDK_FIELDS; + } + + @Override + public Map> sdkFieldNameToField() { + return SDK_NAME_TO_FIELD; + } + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streamdeathsinputeventstream.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streamdeathsinputeventstream.java new file mode 100644 index 000000000000..ec159a657546 --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streamdeathsinputeventstream.java @@ -0,0 +1,83 @@ +package software.amazon.awssdk.services.sharedeventstream.model; + +import java.util.EnumSet; +import java.util.Map; +import java.util.Set; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.annotations.SdkPublicApi; +import software.amazon.awssdk.core.SdkEventType; +import software.amazon.awssdk.services.sharedeventstream.model.streamdeathsinputeventstream.DefaultPerson; +import software.amazon.awssdk.utils.internal.EnumUtils; + +/** + * Base interface for all event types in StreamDeathsInputEventStream. + */ +@Generated("software.amazon.awssdk:codegen") +@SdkPublicApi +public interface StreamDeathsInputEventStream { + /** + * Create a builder for the {@code Person} event type for this stream. + */ + static Person.Builder personBuilder() { + return DefaultPerson.builder(); + } + + /** + * The type of this event. Corresponds to the {@code :event-type} header on the Message. + */ + SdkEventType sdkEventType(); + + /** + * The known possible types of events for {@code StreamDeathsInputEventStream}. + */ + @Generated("software.amazon.awssdk:codegen") + enum EventType implements SdkEventType { + PERSON("Person"), + + UNKNOWN_TO_SDK_VERSION(null); + + private static final Map VALUE_MAP = EnumUtils.uniqueIndex(EventType.class, EventType::toString); + + private final String value; + + private EventType(String value) { + this.value = value; + } + + @Override + public String toString() { + return String.valueOf(value); + } + + /** + * Use this in place of valueOf to convert the raw string returned by the service into the enum value. + * + * @param value + * real value + * @return EventType corresponding to the value + */ + public static EventType fromValue(String value) { + if (value == null) { + return null; + } + return VALUE_MAP.getOrDefault(value, UNKNOWN_TO_SDK_VERSION); + } + + /** + * Use this in place of {@link #values()} to return a {@link Set} of all values known to the SDK. This will + * return all known enum values except {@link #UNKNOWN_TO_SDK_VERSION}. + * + * @return a {@link Set} of known {@link EventType}s + */ + public static Set knownValues() { + Set knownValues = EnumSet.allOf(EventType.class); + knownValues.remove(UNKNOWN_TO_SDK_VERSION); + return knownValues; + } + + @Override + public String id() { + return String.valueOf(value); + } + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streamdeathsinputrequest.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streamdeathsinputrequest.java new file mode 100644 index 000000000000..466d2820c5e6 --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streamdeathsinputrequest.java @@ -0,0 +1,139 @@ +package software.amazon.awssdk.services.sharedeventstream.model; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.function.Consumer; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.awscore.AwsRequestOverrideConfiguration; +import software.amazon.awssdk.core.SdkField; +import software.amazon.awssdk.core.SdkPojo; +import software.amazon.awssdk.utils.ToString; +import software.amazon.awssdk.utils.builder.CopyableBuilder; +import software.amazon.awssdk.utils.builder.ToCopyableBuilder; + +/** + */ +@Generated("software.amazon.awssdk:codegen") +public final class StreamDeathsInputRequest extends SharedEventStreamRequest implements + ToCopyableBuilder { + private static final List> SDK_FIELDS = Collections.emptyList(); + + private static final Map> SDK_NAME_TO_FIELD = memberNameToFieldInitializer(); + + private StreamDeathsInputRequest(BuilderImpl builder) { + super(builder); + } + + @Override + public Builder toBuilder() { + return new BuilderImpl(this); + } + + public static Builder builder() { + return new BuilderImpl(); + } + + public static Class serializableBuilderClass() { + return BuilderImpl.class; + } + + @Override + public final int hashCode() { + int hashCode = 1; + hashCode = 31 * hashCode + super.hashCode(); + return hashCode; + } + + @Override + public final boolean equals(Object obj) { + return super.equals(obj) && equalsBySdkFields(obj); + } + + @Override + public final boolean equalsBySdkFields(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof StreamDeathsInputRequest)) { + return false; + } + return true; + } + + /** + * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be + * redacted from this string using a placeholder value. + */ + @Override + public final String toString() { + return ToString.builder("StreamDeathsInputRequest").build(); + } + + public final Optional getValueForField(String fieldName, Class clazz) { + return Optional.empty(); + } + + @Override + public final List> sdkFields() { + return SDK_FIELDS; + } + + @Override + public final Map> sdkFieldNameToField() { + return SDK_NAME_TO_FIELD; + } + + private static Map> memberNameToFieldInitializer() { + return Collections.emptyMap(); + } + + public interface Builder extends SharedEventStreamRequest.Builder, SdkPojo, + CopyableBuilder { + @Override + Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration); + + @Override + Builder overrideConfiguration(Consumer builderConsumer); + } + + static final class BuilderImpl extends SharedEventStreamRequest.BuilderImpl implements Builder { + private BuilderImpl() { + } + + private BuilderImpl(StreamDeathsInputRequest model) { + super(model); + } + + @Override + public Builder overrideConfiguration(AwsRequestOverrideConfiguration overrideConfiguration) { + super.overrideConfiguration(overrideConfiguration); + return this; + } + + @Override + public Builder overrideConfiguration(Consumer builderConsumer) { + super.overrideConfiguration(builderConsumer); + return this; + } + + @Override + public StreamDeathsInputRequest build() { + return new StreamDeathsInputRequest(this); + } + + @Override + public List> sdkFields() { + return SDK_FIELDS; + } + + @Override + public Map> sdkFieldNameToField() { + return SDK_NAME_TO_FIELD; + } + } +} diff --git a/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streamdeathsinputresponse.java b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streamdeathsinputresponse.java new file mode 100644 index 000000000000..8356ee764d4d --- /dev/null +++ b/codegen/src/test/resources/software/amazon/awssdk/codegen/poet/model/sharedstream/streamdeathsinputresponse.java @@ -0,0 +1,118 @@ +package software.amazon.awssdk.services.sharedeventstream.model; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import software.amazon.awssdk.annotations.Generated; +import software.amazon.awssdk.core.SdkField; +import software.amazon.awssdk.core.SdkPojo; +import software.amazon.awssdk.utils.ToString; +import software.amazon.awssdk.utils.builder.CopyableBuilder; +import software.amazon.awssdk.utils.builder.ToCopyableBuilder; + +@Generated("software.amazon.awssdk:codegen") +public final class StreamDeathsInputResponse extends SharedEventStreamResponse implements + ToCopyableBuilder { + private static final List> SDK_FIELDS = Collections.emptyList(); + + private static final Map> SDK_NAME_TO_FIELD = memberNameToFieldInitializer(); + + private StreamDeathsInputResponse(BuilderImpl builder) { + super(builder); + } + + @Override + public Builder toBuilder() { + return new BuilderImpl(this); + } + + public static Builder builder() { + return new BuilderImpl(); + } + + public static Class serializableBuilderClass() { + return BuilderImpl.class; + } + + @Override + public final int hashCode() { + int hashCode = 1; + hashCode = 31 * hashCode + super.hashCode(); + return hashCode; + } + + @Override + public final boolean equals(Object obj) { + return super.equals(obj) && equalsBySdkFields(obj); + } + + @Override + public final boolean equalsBySdkFields(Object obj) { + if (this == obj) { + return true; + } + if (obj == null) { + return false; + } + if (!(obj instanceof StreamDeathsInputResponse)) { + return false; + } + return true; + } + + /** + * Returns a string representation of this object. This is useful for testing and debugging. Sensitive data will be + * redacted from this string using a placeholder value. + */ + @Override + public final String toString() { + return ToString.builder("StreamDeathsInputResponse").build(); + } + + public final Optional getValueForField(String fieldName, Class clazz) { + return Optional.empty(); + } + + @Override + public final List> sdkFields() { + return SDK_FIELDS; + } + + @Override + public final Map> sdkFieldNameToField() { + return SDK_NAME_TO_FIELD; + } + + private static Map> memberNameToFieldInitializer() { + return Collections.emptyMap(); + } + + public interface Builder extends SharedEventStreamResponse.Builder, SdkPojo, + CopyableBuilder { + } + + static final class BuilderImpl extends SharedEventStreamResponse.BuilderImpl implements Builder { + private BuilderImpl() { + } + + private BuilderImpl(StreamDeathsInputResponse model) { + super(model); + } + + @Override + public StreamDeathsInputResponse build() { + return new StreamDeathsInputResponse(this); + } + + @Override + public List> sdkFields() { + return SDK_FIELDS; + } + + @Override + public Map> sdkFieldNameToField() { + return SDK_NAME_TO_FIELD; + } + } +} diff --git a/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkEventType.java b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkEventType.java new file mode 100644 index 000000000000..02992f8bc1fe --- /dev/null +++ b/core/sdk-core/src/main/java/software/amazon/awssdk/core/SdkEventType.java @@ -0,0 +1,29 @@ +/* + * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. + * + * Licensed under the Apache License, Version 2.0 (the "License"). + * You may not use this file except in compliance with the License. + * A copy of the License is located at + * + * http://aws.amazon.com/apache2.0 + * + * or in the "license" file accompanying this file. This file 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 software.amazon.awssdk.core; + +import software.amazon.awssdk.annotations.SdkProtectedApi; + +/** + * Interface for all generated EventStream EventType enums. + */ +@SdkProtectedApi +public interface SdkEventType { + /** + * @return The id for the event type. + */ + String id(); +} diff --git a/test/protocol-tests/src/test/java/software/amazon/awssdk/protocol/tests/EventTransformTest.java b/test/protocol-tests/src/test/java/software/amazon/awssdk/protocol/tests/EventTransformTest.java index ee15db527df2..42bb5294d5e3 100644 --- a/test/protocol-tests/src/test/java/software/amazon/awssdk/protocol/tests/EventTransformTest.java +++ b/test/protocol-tests/src/test/java/software/amazon/awssdk/protocol/tests/EventTransformTest.java @@ -35,6 +35,8 @@ import software.amazon.awssdk.protocols.json.AwsJsonProtocolFactory; import software.amazon.awssdk.protocols.json.JsonOperationMetadata; import software.amazon.awssdk.services.protocolrestjson.model.InputEvent; +import software.amazon.awssdk.services.protocolrestjson.model.InputEventStream; +import software.amazon.awssdk.services.protocolrestjson.model.InputEventStreamStringPayload; import software.amazon.awssdk.services.protocolrestjson.model.InputEventStringPayload; import software.amazon.awssdk.services.protocolrestjson.transform.InputEventMarshaller; import software.amazon.awssdk.services.protocolrestjson.transform.InputEventStringPayloadMarshaller; @@ -98,10 +100,11 @@ public void testUnmarshalling_StringPayload(String payload) throws Exception { public void testMarshalling_BlobPayload(String payload) { InputEventMarshaller marshaller = new InputEventMarshaller(protocolFactory); - InputEvent e = InputEvent.builder() - .headerMember(HEADER_MEMBER) - .explicitPayloadMember(SdkBytes.fromUtf8String(payload)) - .build(); + InputEvent e = InputEventStream + .inputEventBuilder() + .headerMember(HEADER_MEMBER) + .explicitPayloadMember(SdkBytes.fromUtf8String(payload)) + .build(); SdkHttpFullRequest marshalled = marshaller.marshall(e); @@ -115,10 +118,10 @@ public void testMarshalling_BlobPayload(String payload) { public void testMarshalling_StringPayload(String payload) { InputEventStringPayloadMarshaller marshaller = new InputEventStringPayloadMarshaller(protocolFactory); - InputEventStringPayload e = InputEventStringPayload.builder() - .headerMember(HEADER_MEMBER) - .explicitPayloadStringMember(payload) - .build(); + InputEventStringPayload e = InputEventStreamStringPayload + .inputEventBuilder() + .headerMember(HEADER_MEMBER) + .explicitPayloadStringMember(payload).build(); SdkHttpFullRequest marshalled = marshaller.marshall(e);