diff --git a/clients/client-auto-scaling/protocols/Aws_query.ts b/clients/client-auto-scaling/protocols/Aws_query.ts index e7b6ffaa6e50..7e8a49d9fd2f 100644 --- a/clients/client-auto-scaling/protocols/Aws_query.ts +++ b/clients/client-auto-scaling/protocols/Aws_query.ts @@ -10008,7 +10008,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudformation/protocols/Aws_query.ts b/clients/client-cloudformation/protocols/Aws_query.ts index 4bcbe8b76803..415813a7e32c 100644 --- a/clients/client-cloudformation/protocols/Aws_query.ts +++ b/clients/client-cloudformation/protocols/Aws_query.ts @@ -11149,7 +11149,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudfront/protocols/Aws_restXml.ts b/clients/client-cloudfront/protocols/Aws_restXml.ts index 37479a2ff0cd..af7bd556b6a1 100644 --- a/clients/client-cloudfront/protocols/Aws_restXml.ts +++ b/clients/client-cloudfront/protocols/Aws_restXml.ts @@ -19025,7 +19025,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudsearch/protocols/Aws_query.ts b/clients/client-cloudsearch/protocols/Aws_query.ts index 88dea54b31fe..14b43a0d6b69 100644 --- a/clients/client-cloudsearch/protocols/Aws_query.ts +++ b/clients/client-cloudsearch/protocols/Aws_query.ts @@ -4921,7 +4921,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-cloudwatch/protocols/Aws_query.ts b/clients/client-cloudwatch/protocols/Aws_query.ts index 00f2c2728a91..f63f89c32507 100644 --- a/clients/client-cloudwatch/protocols/Aws_query.ts +++ b/clients/client-cloudwatch/protocols/Aws_query.ts @@ -6370,7 +6370,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-docdb/protocols/Aws_query.ts b/clients/client-docdb/protocols/Aws_query.ts index 494cf98a708e..c4712b13cfb3 100644 --- a/clients/client-docdb/protocols/Aws_query.ts +++ b/clients/client-docdb/protocols/Aws_query.ts @@ -10727,7 +10727,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-ec2/protocols/Aws_ec2.ts b/clients/client-ec2/protocols/Aws_ec2.ts index 20dbdcafdb65..9f6f7afefee6 100644 --- a/clients/client-ec2/protocols/Aws_ec2.ts +++ b/clients/client-ec2/protocols/Aws_ec2.ts @@ -74754,7 +74754,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elastic-beanstalk/protocols/Aws_query.ts b/clients/client-elastic-beanstalk/protocols/Aws_query.ts index b320819a40e2..83af9cc81068 100644 --- a/clients/client-elastic-beanstalk/protocols/Aws_query.ts +++ b/clients/client-elastic-beanstalk/protocols/Aws_query.ts @@ -8205,7 +8205,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts b/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts index 2bd4a8af5550..afbb524e7f5a 100644 --- a/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts +++ b/clients/client-elastic-load-balancing-v2/protocols/Aws_query.ts @@ -7863,7 +7863,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elastic-load-balancing/protocols/Aws_query.ts b/clients/client-elastic-load-balancing/protocols/Aws_query.ts index 54b7fc0c5c0d..8979ed04ef13 100644 --- a/clients/client-elastic-load-balancing/protocols/Aws_query.ts +++ b/clients/client-elastic-load-balancing/protocols/Aws_query.ts @@ -5410,7 +5410,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-elasticache/protocols/Aws_query.ts b/clients/client-elasticache/protocols/Aws_query.ts index a465d9e8bb06..9981edc6705c 100644 --- a/clients/client-elasticache/protocols/Aws_query.ts +++ b/clients/client-elasticache/protocols/Aws_query.ts @@ -15016,7 +15016,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-iam/protocols/Aws_query.ts b/clients/client-iam/protocols/Aws_query.ts index 7208998f167c..0a573907d7dc 100644 --- a/clients/client-iam/protocols/Aws_query.ts +++ b/clients/client-iam/protocols/Aws_query.ts @@ -21436,7 +21436,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-neptune/protocols/Aws_query.ts b/clients/client-neptune/protocols/Aws_query.ts index 84b8276d9fba..20feaa21dec1 100644 --- a/clients/client-neptune/protocols/Aws_query.ts +++ b/clients/client-neptune/protocols/Aws_query.ts @@ -13195,7 +13195,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-rds/protocols/Aws_query.ts b/clients/client-rds/protocols/Aws_query.ts index 17bff2ce056d..43bebc89ad1e 100644 --- a/clients/client-rds/protocols/Aws_query.ts +++ b/clients/client-rds/protocols/Aws_query.ts @@ -28153,7 +28153,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-redshift/protocols/Aws_query.ts b/clients/client-redshift/protocols/Aws_query.ts index 8e772559ce5a..604fd90c2a7d 100644 --- a/clients/client-redshift/protocols/Aws_query.ts +++ b/clients/client-redshift/protocols/Aws_query.ts @@ -22294,7 +22294,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-route-53/protocols/Aws_restXml.ts b/clients/client-route-53/protocols/Aws_restXml.ts index 16afda7f9aa7..2847e2e5cfee 100644 --- a/clients/client-route-53/protocols/Aws_restXml.ts +++ b/clients/client-route-53/protocols/Aws_restXml.ts @@ -10422,7 +10422,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-s3-control/protocols/Aws_restXml.ts b/clients/client-s3-control/protocols/Aws_restXml.ts index 6690fb4352b2..a6a047ca88f0 100644 --- a/clients/client-s3-control/protocols/Aws_restXml.ts +++ b/clients/client-s3-control/protocols/Aws_restXml.ts @@ -8182,7 +8182,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-s3/protocols/Aws_restXml.ts b/clients/client-s3/protocols/Aws_restXml.ts index fc6681828c4b..90e875b35e25 100644 --- a/clients/client-s3/protocols/Aws_restXml.ts +++ b/clients/client-s3/protocols/Aws_restXml.ts @@ -14724,7 +14724,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-ses/protocols/Aws_query.ts b/clients/client-ses/protocols/Aws_query.ts index 2150a7055bfd..708d7729372f 100644 --- a/clients/client-ses/protocols/Aws_query.ts +++ b/clients/client-ses/protocols/Aws_query.ts @@ -10320,7 +10320,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-sns/protocols/Aws_query.ts b/clients/client-sns/protocols/Aws_query.ts index f3abf346f942..19a662c5062a 100644 --- a/clients/client-sns/protocols/Aws_query.ts +++ b/clients/client-sns/protocols/Aws_query.ts @@ -6347,7 +6347,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-sqs/protocols/Aws_query.ts b/clients/client-sqs/protocols/Aws_query.ts index f05e637b8e59..59a687088bfd 100644 --- a/clients/client-sqs/protocols/Aws_query.ts +++ b/clients/client-sqs/protocols/Aws_query.ts @@ -3141,7 +3141,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/clients/client-sts/protocols/Aws_query.ts b/clients/client-sts/protocols/Aws_query.ts index 1a3362921712..bd81daea0ab2 100644 --- a/clients/client-sts/protocols/Aws_query.ts +++ b/clients/client-sts/protocols/Aws_query.ts @@ -1480,7 +1480,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java index 444c50367669..3cb807457a09 100644 --- a/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java +++ b/codegen/smithy-aws-typescript-codegen/src/main/java/software/amazon/smithy/aws/typescript/codegen/AwsProtocolUtils.java @@ -135,7 +135,8 @@ static void generateXmlParseBody(GenerationContext context) { writer.openBlock("if (encoded.length) {", "}", () -> { writer.write("const parsedObj = xmlParse(encoded, { attributeNamePrefix: '', " + "ignoreAttributes: false, parseNodeValue: false, trimValues: false, " - + "tagValueProcessor: (val, tagName) => val.trim() === '' ? '': decodeHTML(val) });"); + + "tagValueProcessor: (val) => (val.trim() === '' && val.includes('\\n'))" + + " ? '': decodeHTML(val) });"); writer.write("const textNodeName = '#text';"); writer.write("const key = Object.keys(parsedObj)[0];"); writer.write("const parsedObjToReturn = parsedObj[key];"); @@ -293,10 +294,6 @@ private static boolean filterProtocolTests( if (testCase.getId().equals("QueryCustomizedError")) { return true; } - // TODO: follow-up with smithy on whether whitespace strings should be trimmed. - if (testCase.getId().equals("SimpleScalarPropertiesPureWhiteSpace")) { - return true; - } return false; } } diff --git a/protocol_tests/aws-ec2/protocols/Aws_ec2.ts b/protocol_tests/aws-ec2/protocols/Aws_ec2.ts index 130270f4482b..86c018d18cc4 100644 --- a/protocol_tests/aws-ec2/protocols/Aws_ec2.ts +++ b/protocol_tests/aws-ec2/protocols/Aws_ec2.ts @@ -2172,7 +2172,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/protocol_tests/aws-query/protocols/Aws_query.ts b/protocol_tests/aws-query/protocols/Aws_query.ts index fe465866fa64..20535bbf2cf1 100644 --- a/protocol_tests/aws-query/protocols/Aws_query.ts +++ b/protocol_tests/aws-query/protocols/Aws_query.ts @@ -3002,7 +3002,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/protocol_tests/aws-restxml/protocols/Aws_restXml.ts b/protocol_tests/aws-restxml/protocols/Aws_restXml.ts index 21c15b3abd9d..b90b6120cb7e 100644 --- a/protocol_tests/aws-restxml/protocols/Aws_restXml.ts +++ b/protocol_tests/aws-restxml/protocols/Aws_restXml.ts @@ -6173,7 +6173,7 @@ const parseBody = (streamBody: any, context: __SerdeContext): any => ignoreAttributes: false, parseNodeValue: false, trimValues: false, - tagValueProcessor: (val, tagName) => (val.trim() === "" ? "" : decodeHTML(val)), + tagValueProcessor: (val) => (val.trim() === "" && val.includes("\n") ? "" : decodeHTML(val)), }); const textNodeName = "#text"; const key = Object.keys(parsedObj)[0]; diff --git a/protocol_tests/aws-restxml/tests/functional/restxml.spec.ts b/protocol_tests/aws-restxml/tests/functional/restxml.spec.ts index b5befa7e80bf..6ac2e91586e4 100644 --- a/protocol_tests/aws-restxml/tests/functional/restxml.spec.ts +++ b/protocol_tests/aws-restxml/tests/functional/restxml.spec.ts @@ -3780,7 +3780,7 @@ it("SimpleScalarPropertiesWithWhiteSpace:Request", async () => { /** * Serializes string containing exclusively whitespace */ -it.skip("SimpleScalarPropertiesPureWhiteSpace:Request", async () => { +it("SimpleScalarPropertiesPureWhiteSpace:Request", async () => { const client = new RestXmlProtocolClient({ ...clientParams, requestHandler: new RequestSerializationTestHandler(), @@ -4203,7 +4203,7 @@ it("SimpleScalarPropertiesWithWhiteSpace:Response", async () => { /** * Serializes string containing white space */ -it.skip("SimpleScalarPropertiesPureWhiteSpace:Response", async () => { +it("SimpleScalarPropertiesPureWhiteSpace:Response", async () => { const client = new RestXmlProtocolClient({ ...clientParams, requestHandler: new ResponseDeserializationTestHandler(