Skip to content

Commit 3bb25b2

Browse files
committed
fix RPC protocol error deser
1 parent 6e477a1 commit 3bb25b2

File tree

2 files changed

+12
-5
lines changed

2 files changed

+12
-5
lines changed

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpBindingProtocolGenerator.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -656,8 +656,7 @@ private List<HttpBinding> readErrorResponseBody(
656656
if (isErrorCodeInBody) {
657657
// Body is already parsed in error dispatcher, simply assign body to data.
658658
writer.write("const data: any = output.body;");
659-
List<HttpBinding> responseBindings = bindingIndex.getResponseBindings(error).values()
660-
.stream().collect(Collectors.toList());
659+
List<HttpBinding> responseBindings = bindingIndex.getResponseBindings(error, Location.DOCUMENT);
661660
responseBindings.sort(Comparator.comparing(HttpBinding::getMemberName));
662661
return responseBindings;
663662
} else {

smithy-typescript-codegen/src/main/java/software/amazon/smithy/typescript/codegen/integration/HttpRpcProtocolGenerator.java

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ public void generateSharedComponents(GenerationContext context) {
9090
generateDocumentBodyShapeSerializers(context, serializingDocumentShapes);
9191
generateDocumentBodyShapeDeserializers(context, deserializingDocumentShapes);
9292
HttpProtocolGeneratorUtils.generateMetadataDeserializer(context, getApplicationProtocol().getResponseType());
93+
HttpProtocolGeneratorUtils.generateCollectBody(context);
94+
HttpProtocolGeneratorUtils.generateCollectBodyString(context);
9395
}
9496

9597
@Override
@@ -285,14 +287,20 @@ private void generateErrorDeserializer(GenerationContext context, StructureShape
285287
+ " context: __SerdeContext\n"
286288
+ "): Promise<$T> => {", "};", errorDeserMethodName, outputReference, errorSymbol, () -> {
287289
// First deserialize the body properly.
288-
writer.write("const deserialized: any = $L($L.body, context);",
289-
ProtocolGenerator.getDeserFunctionName(errorSymbol, context.getProtocolName()), outputReference);
290+
if (isErrorCodeInBody) {
291+
writer.write("const body = $L.body", outputReference);
292+
} else {
293+
// If error node not in body, error body is not parsed in dispatcher.
294+
writer.write("const body = parsedBody($L.body, context);", outputReference);
295+
}
296+
writer.write("const deserialized: any = $L(body, context);",
297+
ProtocolGenerator.getDeserFunctionName(errorSymbol, context.getProtocolName()));
290298

291299
// Then load it into the object with additional error and response properties.
292300
writer.openBlock("const contents: $T = {", "};", errorSymbol, () -> {
293301
writer.write("__type: $S,", error.getId().getName());
294302
writer.write("$$fault: $S,", error.getTrait(ErrorTrait.class).get().getValue());
295-
writer.write("$$metadata: deserializeMetadata(output),");
303+
writer.write("$$metadata: deserializeMetadata($L),", outputReference);
296304
writer.write("...deserialized,");
297305
});
298306

0 commit comments

Comments
 (0)