diff --git a/core/protocols/aws-xml-protocol/src/main/java/software/amazon/awssdk/protocols/xml/internal/marshall/XmlWriter.java b/core/protocols/aws-xml-protocol/src/main/java/software/amazon/awssdk/protocols/xml/internal/marshall/XmlWriter.java index 4ef99766def8..a50c8f201340 100644 --- a/core/protocols/aws-xml-protocol/src/main/java/software/amazon/awssdk/protocols/xml/internal/marshall/XmlWriter.java +++ b/core/protocols/aws-xml-protocol/src/main/java/software/amazon/awssdk/protocols/xml/internal/marshall/XmlWriter.java @@ -193,6 +193,8 @@ private String escapeXmlEntities(String s) { s = s.replace("'", "'"); s = s.replace("<", "<"); s = s.replace(">", ">"); + s = s.replace(" ", "\r"); + s = s.replace(" ", "\n"); // Ampersands should always be the last to unescape s = s.replace("&", "&"); } @@ -202,6 +204,8 @@ private String escapeXmlEntities(String s) { s = s.replace("'", "'"); s = s.replace("<", "<"); s = s.replace(">", ">"); + s = s.replace("\r", " "); + s = s.replace("\n", " "); return s; } diff --git a/test/protocol-tests-core/src/main/resources/software/amazon/awssdk/protocol/suites/cases/rest-xml-input.json b/test/protocol-tests-core/src/main/resources/software/amazon/awssdk/protocol/suites/cases/rest-xml-input.json index 3d84a1280333..7fefb6cf7de1 100644 --- a/test/protocol-tests-core/src/main/resources/software/amazon/awssdk/protocol/suites/cases/rest-xml-input.json +++ b/test/protocol-tests-core/src/main/resources/software/amazon/awssdk/protocol/suites/cases/rest-xml-input.json @@ -38,6 +38,26 @@ } } }, + { + "description": "Escape Characters are marshalled correctly as XML in the payload", + "given": { + + "input": { + "stringMember": "\"'<\r\nNormalCharacters\"'>\r\n" + } + }, + "when": { + "action": "marshall", + "operation": "AllTypes" + }, + "then": { + "serializedAs": { + "body": { + "xmlEquals": ""'< NormalCharacters"'> " + } + } + } + }, { "description": "Boolean member with value true is marshalled correctly as XML", "given": {