diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/include/aws/ec2-protocol/model/RecursiveXmlShapesOutputNested1.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/include/aws/ec2-protocol/model/RecursiveXmlShapesOutputNested1.h index 5b3b3aea6e0..1428be1bcc0 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/include/aws/ec2-protocol/model/RecursiveXmlShapesOutputNested1.h +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/include/aws/ec2-protocol/model/RecursiveXmlShapesOutputNested1.h @@ -23,6 +23,7 @@ namespace EC2Protocol { namespace Model { + class RecursiveXmlShapesOutputNested2; class RecursiveXmlShapesOutputNested1 { diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/include/aws/ec2-protocol/model/RecursiveXmlShapesOutputNested2.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/include/aws/ec2-protocol/model/RecursiveXmlShapesOutputNested2.h index 535d13f8359..7532421c47c 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/include/aws/ec2-protocol/model/RecursiveXmlShapesOutputNested2.h +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/include/aws/ec2-protocol/model/RecursiveXmlShapesOutputNested2.h @@ -23,6 +23,7 @@ namespace EC2Protocol { namespace Model { + class RecursiveXmlShapesOutputNested1; class RecursiveXmlShapesOutputNested2 { diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/source/model/XmlTimestampsResponse.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/source/model/XmlTimestampsResponse.cpp index 9f92ad0aec3..41f0229a547 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/source/model/XmlTimestampsResponse.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-ec2-protocol/source/model/XmlTimestampsResponse.cpp @@ -56,12 +56,12 @@ XmlTimestampsResponse& XmlTimestampsResponse::operator =(const Aws::AmazonWebSer XmlNode epochSecondsNode = resultNode.FirstChild("epochSeconds"); if(!epochSecondsNode.IsNull()) { - m_epochSeconds = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsNode.GetText()).c_str()).c_str(), Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInXml($member.shape)); + m_epochSeconds = DateTime(StringUtils::ConvertToDouble(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsNode.GetText()).c_str()).c_str())); } XmlNode epochSecondsOnTargetNode = resultNode.FirstChild("epochSecondsOnTarget"); if(!epochSecondsOnTargetNode.IsNull()) { - m_epochSecondsOnTarget = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsOnTargetNode.GetText()).c_str()).c_str(), Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInXml($member.shape)); + m_epochSecondsOnTarget = DateTime(StringUtils::ConvertToDouble(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsOnTargetNode.GetText()).c_str()).c_str())); } XmlNode httpDateNode = resultNode.FirstChild("httpDate"); if(!httpDateNode.IsNull()) diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/include/aws/query-protocol/model/RecursiveXmlShapesOutputNested1.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/include/aws/query-protocol/model/RecursiveXmlShapesOutputNested1.h index fd9b4b4e5c5..73ec802fe85 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/include/aws/query-protocol/model/RecursiveXmlShapesOutputNested1.h +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/include/aws/query-protocol/model/RecursiveXmlShapesOutputNested1.h @@ -23,6 +23,7 @@ namespace QueryProtocol { namespace Model { + class RecursiveXmlShapesOutputNested2; class RecursiveXmlShapesOutputNested1 { diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/include/aws/query-protocol/model/RecursiveXmlShapesOutputNested2.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/include/aws/query-protocol/model/RecursiveXmlShapesOutputNested2.h index d2368ae7904..4a57f21a23a 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/include/aws/query-protocol/model/RecursiveXmlShapesOutputNested2.h +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/include/aws/query-protocol/model/RecursiveXmlShapesOutputNested2.h @@ -23,6 +23,7 @@ namespace QueryProtocol { namespace Model { + class RecursiveXmlShapesOutputNested1; class RecursiveXmlShapesOutputNested2 { diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/source/model/XmlTimestampsResult.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/source/model/XmlTimestampsResult.cpp index 920f0fb2b19..c3e430fc828 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/source/model/XmlTimestampsResult.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-query-protocol/source/model/XmlTimestampsResult.cpp @@ -56,12 +56,12 @@ XmlTimestampsResult& XmlTimestampsResult::operator =(const Aws::AmazonWebService XmlNode epochSecondsNode = resultNode.FirstChild("epochSeconds"); if(!epochSecondsNode.IsNull()) { - m_epochSeconds = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsNode.GetText()).c_str()).c_str(), Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInXml($member.shape)); + m_epochSeconds = DateTime(StringUtils::ConvertToDouble(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsNode.GetText()).c_str()).c_str())); } XmlNode epochSecondsOnTargetNode = resultNode.FirstChild("epochSecondsOnTarget"); if(!epochSecondsOnTargetNode.IsNull()) { - m_epochSecondsOnTarget = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsOnTargetNode.GetText()).c_str()).c_str(), Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInXml($member.shape)); + m_epochSecondsOnTarget = DateTime(StringUtils::ConvertToDouble(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsOnTargetNode.GetText()).c_str()).c_str())); } XmlNode httpDateNode = resultNode.FirstChild("httpDate"); if(!httpDateNode.IsNull()) diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/include/aws/rest-xml-protocol/model/RecursiveShapesInputOutputNested1.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/include/aws/rest-xml-protocol/model/RecursiveShapesInputOutputNested1.h index 27fa2cbc13d..ad2379c00d0 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/include/aws/rest-xml-protocol/model/RecursiveShapesInputOutputNested1.h +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/include/aws/rest-xml-protocol/model/RecursiveShapesInputOutputNested1.h @@ -22,6 +22,7 @@ namespace RestXmlProtocol { namespace Model { + class RecursiveShapesInputOutputNested2; class RecursiveShapesInputOutputNested1 { diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/include/aws/rest-xml-protocol/model/RecursiveShapesInputOutputNested2.h b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/include/aws/rest-xml-protocol/model/RecursiveShapesInputOutputNested2.h index 6e598a90cb0..f2343018a30 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/include/aws/rest-xml-protocol/model/RecursiveShapesInputOutputNested2.h +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/include/aws/rest-xml-protocol/model/RecursiveShapesInputOutputNested2.h @@ -22,6 +22,7 @@ namespace RestXmlProtocol { namespace Model { + class RecursiveShapesInputOutputNested1; class RecursiveShapesInputOutputNested2 { diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/FlattenedXmlMapRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/FlattenedXmlMapRequest.cpp index f949055fdba..4ad78561e33 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/FlattenedXmlMapRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/FlattenedXmlMapRequest.cpp @@ -28,6 +28,15 @@ Aws::String FlattenedXmlMapRequest::SerializePayload() const Aws::StringStream ss; if(m_myMapHasBeenSet) { + XmlNode myMapParentNode = parentNode.CreateChildElement("myMap"); + for(const auto& mapItem : m_myMap) + { + XmlNode myMapMapEntryNode = myMapParentNode.CreateChildElement("entry"); + XmlNode myMapKeyNode = myMapMapEntryNode.CreateChildElement("key"); + myMapKeyNode.SetText(mapItem.first); + XmlNode myMapValueNode = myMapMapEntryNode.CreateChildElement("value"); + myMapValueNode.SetText(FooEnumMapper::GetNameForFooEnum(mapItem.second)); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/FlattenedXmlMapWithXmlNameRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/FlattenedXmlMapWithXmlNameRequest.cpp index 610458f1742..3f72be89a46 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/FlattenedXmlMapWithXmlNameRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/FlattenedXmlMapWithXmlNameRequest.cpp @@ -28,6 +28,15 @@ Aws::String FlattenedXmlMapWithXmlNameRequest::SerializePayload() const Aws::StringStream ss; if(m_myMapHasBeenSet) { + XmlNode myMapParentNode = parentNode.CreateChildElement("KVP"); + for(const auto& mapItem : m_myMap) + { + XmlNode myMapMapEntryNode = myMapParentNode.CreateChildElement("KVP"); + XmlNode myMapKeyNode = myMapMapEntryNode.CreateChildElement("K"); + myMapKeyNode.SetText(mapItem.first); + XmlNode myMapValueNode = myMapMapEntryNode.CreateChildElement("V"); + myMapValueNode.SetText(mapItem.second); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/NestedXmlMapWithXmlNameRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/NestedXmlMapWithXmlNameRequest.cpp index 9a9551ed1c1..a070835c1a6 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/NestedXmlMapWithXmlNameRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/NestedXmlMapWithXmlNameRequest.cpp @@ -30,6 +30,15 @@ Aws::String NestedXmlMapWithXmlNameRequest::SerializePayload() const Aws::StringStream ss; if(m_nestedXmlMapWithXmlNameMapHasBeenSet) { + XmlNode nestedXmlMapWithXmlNameMapParentNode = parentNode.CreateChildElement("nestedXmlMapWithXmlNameMap"); + for(const auto& mapItem : m_nestedXmlMapWithXmlNameMap) + { + XmlNode nestedXmlMapWithXmlNameMapMapEntryNode = nestedXmlMapWithXmlNameMapParentNode.CreateChildElement("entry"); + XmlNode nestedXmlMapWithXmlNameMapKeyNode = nestedXmlMapWithXmlNameMapMapEntryNode.CreateChildElement("OuterKey"); + nestedXmlMapWithXmlNameMapKeyNode.SetText(mapItem.first); + XmlNode nestedXmlMapWithXmlNameMapValueNode = nestedXmlMapWithXmlNameMapMapEntryNode.CreateChildElement("value"); + nestedXmlMapWithXmlNameMapValueNode.SetText(mapItem.second); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/NestedXmlMapsRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/NestedXmlMapsRequest.cpp index 5db9179dbaa..eabb318e0c5 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/NestedXmlMapsRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/NestedXmlMapsRequest.cpp @@ -29,10 +29,28 @@ Aws::String NestedXmlMapsRequest::SerializePayload() const Aws::StringStream ss; if(m_nestedMapHasBeenSet) { + XmlNode nestedMapParentNode = parentNode.CreateChildElement("nestedMap"); + for(const auto& mapItem : m_nestedMap) + { + XmlNode nestedMapMapEntryNode = nestedMapParentNode.CreateChildElement("entry"); + XmlNode nestedMapKeyNode = nestedMapMapEntryNode.CreateChildElement("key"); + nestedMapKeyNode.SetText(mapItem.first); + XmlNode nestedMapValueNode = nestedMapMapEntryNode.CreateChildElement("value"); + nestedMapValueNode.SetText(mapItem.second); + } } if(m_flatNestedMapHasBeenSet) { + XmlNode flatNestedMapParentNode = parentNode.CreateChildElement("flatNestedMap"); + for(const auto& mapItem : m_flatNestedMap) + { + XmlNode flatNestedMapMapEntryNode = flatNestedMapParentNode.CreateChildElement("entry"); + XmlNode flatNestedMapKeyNode = flatNestedMapMapEntryNode.CreateChildElement("key"); + flatNestedMapKeyNode.SetText(mapItem.first); + XmlNode flatNestedMapValueNode = flatNestedMapMapEntryNode.CreateChildElement("value"); + flatNestedMapValueNode.SetText(mapItem.second); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEmptyListsRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEmptyListsRequest.cpp index 60f021cfe97..c5765ecfb5a 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEmptyListsRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEmptyListsRequest.cpp @@ -90,7 +90,7 @@ Aws::String XmlEmptyListsRequest::SerializePayload() const for(const auto& item : m_timestampList) { XmlNode timestampListNode = timestampListParentNode.CreateChildElement("Timestamp"); - timestampListNode.SetText(item.ToGmtString(Aws::Utils::DateFormat::ISO_8601); + timestampListNode.SetText(item.ToGmtString(Aws::Utils::DateFormat::ISO_8601)); } } @@ -122,6 +122,7 @@ Aws::String XmlEmptyListsRequest::SerializePayload() const for(const auto& item : m_nestedStringList) { XmlNode nestedStringListNode = nestedStringListParentNode.CreateChildElement("StringList"); + nestedStringListNode.SetText(item); } } diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEmptyMapsRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEmptyMapsRequest.cpp index c87161849ab..f848e6c39d9 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEmptyMapsRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEmptyMapsRequest.cpp @@ -28,6 +28,15 @@ Aws::String XmlEmptyMapsRequest::SerializePayload() const Aws::StringStream ss; if(m_myMapHasBeenSet) { + XmlNode myMapParentNode = parentNode.CreateChildElement("myMap"); + for(const auto& mapItem : m_myMap) + { + XmlNode myMapMapEntryNode = myMapParentNode.CreateChildElement("entry"); + XmlNode myMapKeyNode = myMapMapEntryNode.CreateChildElement("key"); + myMapKeyNode.SetText(mapItem.first); + XmlNode myMapValueNode = myMapMapEntryNode.CreateChildElement("value"); + mapItem.second.AddToNode(myMapValueNode); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEnumsRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEnumsRequest.cpp index b563ff0dde5..85a003fc008 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEnumsRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlEnumsRequest.cpp @@ -74,6 +74,15 @@ Aws::String XmlEnumsRequest::SerializePayload() const if(m_fooEnumMapHasBeenSet) { + XmlNode fooEnumMapParentNode = parentNode.CreateChildElement("fooEnumMap"); + for(const auto& mapItem : m_fooEnumMap) + { + XmlNode fooEnumMapMapEntryNode = fooEnumMapParentNode.CreateChildElement("entry"); + XmlNode fooEnumMapKeyNode = fooEnumMapMapEntryNode.CreateChildElement("key"); + fooEnumMapKeyNode.SetText(mapItem.first); + XmlNode fooEnumMapValueNode = fooEnumMapMapEntryNode.CreateChildElement("value"); + fooEnumMapValueNode.SetText(FooEnumMapper::GetNameForFooEnum(mapItem.second)); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlIntEnumsRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlIntEnumsRequest.cpp index badbf5d4f3c..940edc1082b 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlIntEnumsRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlIntEnumsRequest.cpp @@ -84,6 +84,17 @@ Aws::String XmlIntEnumsRequest::SerializePayload() const if(m_intEnumMapHasBeenSet) { + XmlNode intEnumMapParentNode = parentNode.CreateChildElement("intEnumMap"); + for(const auto& mapItem : m_intEnumMap) + { + XmlNode intEnumMapMapEntryNode = intEnumMapParentNode.CreateChildElement("entry"); + XmlNode intEnumMapKeyNode = intEnumMapMapEntryNode.CreateChildElement("key"); + intEnumMapKeyNode.SetText(mapItem.first); + XmlNode intEnumMapValueNode = intEnumMapMapEntryNode.CreateChildElement("value"); + ss << mapItem.second; + intEnumMapValueNode.SetText(ss.str()); + ss.str(""); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlListsRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlListsRequest.cpp index c8c3d712bcf..06c1ccb2ab7 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlListsRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlListsRequest.cpp @@ -90,7 +90,7 @@ Aws::String XmlListsRequest::SerializePayload() const for(const auto& item : m_timestampList) { XmlNode timestampListNode = timestampListParentNode.CreateChildElement("Timestamp"); - timestampListNode.SetText(item.ToGmtString(Aws::Utils::DateFormat::ISO_8601); + timestampListNode.SetText(item.ToGmtString(Aws::Utils::DateFormat::ISO_8601)); } } @@ -122,6 +122,7 @@ Aws::String XmlListsRequest::SerializePayload() const for(const auto& item : m_nestedStringList) { XmlNode nestedStringListNode = nestedStringListParentNode.CreateChildElement("StringList"); + nestedStringListNode.SetText(item); } } diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapWithXmlNamespaceRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapWithXmlNamespaceRequest.cpp index 064a582fef2..a4199f4ee09 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapWithXmlNamespaceRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapWithXmlNamespaceRequest.cpp @@ -28,6 +28,15 @@ Aws::String XmlMapWithXmlNamespaceRequest::SerializePayload() const Aws::StringStream ss; if(m_myMapHasBeenSet) { + XmlNode myMapParentNode = parentNode.CreateChildElement("KVP"); + for(const auto& mapItem : m_myMap) + { + XmlNode myMapMapEntryNode = myMapParentNode.CreateChildElement("KVP"); + XmlNode myMapKeyNode = myMapMapEntryNode.CreateChildElement("K"); + myMapKeyNode.SetText(mapItem.first); + XmlNode myMapValueNode = myMapMapEntryNode.CreateChildElement("V"); + myMapValueNode.SetText(mapItem.second); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapsRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapsRequest.cpp index 2751777d24a..ce8e2410264 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapsRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapsRequest.cpp @@ -28,6 +28,15 @@ Aws::String XmlMapsRequest::SerializePayload() const Aws::StringStream ss; if(m_myMapHasBeenSet) { + XmlNode myMapParentNode = parentNode.CreateChildElement("myMap"); + for(const auto& mapItem : m_myMap) + { + XmlNode myMapMapEntryNode = myMapParentNode.CreateChildElement("entry"); + XmlNode myMapKeyNode = myMapMapEntryNode.CreateChildElement("key"); + myMapKeyNode.SetText(mapItem.first); + XmlNode myMapValueNode = myMapMapEntryNode.CreateChildElement("value"); + mapItem.second.AddToNode(myMapValueNode); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapsXmlNameRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapsXmlNameRequest.cpp index 7f22c2b39d0..1cc61334e56 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapsXmlNameRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlMapsXmlNameRequest.cpp @@ -28,6 +28,15 @@ Aws::String XmlMapsXmlNameRequest::SerializePayload() const Aws::StringStream ss; if(m_myMapHasBeenSet) { + XmlNode myMapParentNode = parentNode.CreateChildElement("myMap"); + for(const auto& mapItem : m_myMap) + { + XmlNode myMapMapEntryNode = myMapParentNode.CreateChildElement("entry"); + XmlNode myMapKeyNode = myMapMapEntryNode.CreateChildElement("Attribute"); + myMapKeyNode.SetText(mapItem.first); + XmlNode myMapValueNode = myMapMapEntryNode.CreateChildElement("Setting"); + mapItem.second.AddToNode(myMapValueNode); + } } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlTimestampsRequest.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlTimestampsRequest.cpp index b2a309b5a08..5f2bc11994c 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlTimestampsRequest.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlTimestampsRequest.cpp @@ -53,25 +53,25 @@ Aws::String XmlTimestampsRequest::SerializePayload() const if(m_epochSecondsHasBeenSet) { XmlNode epochSecondsNode = parentNode.CreateChildElement("epochSeconds"); - epochSecondsNode.SetText(m_epochSeconds.ToGmtString(Aws::Utils::DateFormat::ISO_8601)); + epochSecondsNode.SetText(StringUtils::to_string(m_epochSeconds.Seconds())); } if(m_epochSecondsOnTargetHasBeenSet) { XmlNode epochSecondsOnTargetNode = parentNode.CreateChildElement("epochSecondsOnTarget"); - epochSecondsOnTargetNode.SetText(m_epochSecondsOnTarget.ToGmtString(Aws::Utils::DateFormat::ISO_8601)); + epochSecondsOnTargetNode.SetText(StringUtils::to_string(m_epochSecondsOnTarget.Seconds())); } if(m_httpDateHasBeenSet) { XmlNode httpDateNode = parentNode.CreateChildElement("httpDate"); - httpDateNode.SetText(m_httpDate.ToGmtString(Aws::Utils::DateFormat::ISO_8601)); + httpDateNode.SetText(m_httpDate.ToGmtString(Aws::Utils::DateFormat::RFC822)); } if(m_httpDateOnTargetHasBeenSet) { XmlNode httpDateOnTargetNode = parentNode.CreateChildElement("httpDateOnTarget"); - httpDateOnTargetNode.SetText(m_httpDateOnTarget.ToGmtString(Aws::Utils::DateFormat::ISO_8601)); + httpDateOnTargetNode.SetText(m_httpDateOnTarget.ToGmtString(Aws::Utils::DateFormat::RFC822)); } return payloadDoc.ConvertToString(); diff --git a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlTimestampsResult.cpp b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlTimestampsResult.cpp index 87556c10607..d7c70f9922a 100644 --- a/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlTimestampsResult.cpp +++ b/generated/protocol-tests/test-clients/aws-cpp-sdk-rest-xml-protocol/source/model/XmlTimestampsResult.cpp @@ -50,12 +50,12 @@ XmlTimestampsResult& XmlTimestampsResult::operator =(const Aws::AmazonWebService XmlNode epochSecondsNode = resultNode.FirstChild("epochSeconds"); if(!epochSecondsNode.IsNull()) { - m_epochSeconds = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsNode.GetText()).c_str()).c_str(), Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInXml($member.shape)); + m_epochSeconds = DateTime(StringUtils::ConvertToDouble(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsNode.GetText()).c_str()).c_str())); } XmlNode epochSecondsOnTargetNode = resultNode.FirstChild("epochSecondsOnTarget"); if(!epochSecondsOnTargetNode.IsNull()) { - m_epochSecondsOnTarget = DateTime(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsOnTargetNode.GetText()).c_str()).c_str(), Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInXml($member.shape)); + m_epochSecondsOnTarget = DateTime(StringUtils::ConvertToDouble(StringUtils::Trim(Aws::Utils::Xml::DecodeEscapedXmlText(epochSecondsOnTargetNode.GetText()).c_str()).c_str())); } XmlNode httpDateNode = resultNode.FirstChild("httpDate"); if(!httpDateNode.IsNull()) diff --git a/generated/src/aws-cpp-sdk-s3-crt/source/model/ObjectIdentifier.cpp b/generated/src/aws-cpp-sdk-s3-crt/source/model/ObjectIdentifier.cpp index cdac3cfd4f4..33889f73f58 100644 --- a/generated/src/aws-cpp-sdk-s3-crt/source/model/ObjectIdentifier.cpp +++ b/generated/src/aws-cpp-sdk-s3-crt/source/model/ObjectIdentifier.cpp @@ -101,7 +101,7 @@ void ObjectIdentifier::AddToNode(XmlNode& parentNode) const if(m_lastModifiedTimeHasBeenSet) { XmlNode lastModifiedTimeNode = parentNode.CreateChildElement("LastModifiedTime"); - lastModifiedTimeNode.SetText(m_lastModifiedTime.ToGmtString(Aws::Utils::DateFormat::ISO_8601)); + lastModifiedTimeNode.SetText(m_lastModifiedTime.ToGmtString(Aws::Utils::DateFormat::RFC822)); } if(m_sizeHasBeenSet) diff --git a/generated/src/aws-cpp-sdk-s3/source/model/ObjectIdentifier.cpp b/generated/src/aws-cpp-sdk-s3/source/model/ObjectIdentifier.cpp index 5fa0baeddf9..c923b6e97b7 100644 --- a/generated/src/aws-cpp-sdk-s3/source/model/ObjectIdentifier.cpp +++ b/generated/src/aws-cpp-sdk-s3/source/model/ObjectIdentifier.cpp @@ -101,7 +101,7 @@ void ObjectIdentifier::AddToNode(XmlNode& parentNode) const if(m_lastModifiedTimeHasBeenSet) { XmlNode lastModifiedTimeNode = parentNode.CreateChildElement("LastModifiedTime"); - lastModifiedTimeNode.SetText(m_lastModifiedTime.ToGmtString(Aws::Utils::DateFormat::ISO_8601)); + lastModifiedTimeNode.SetText(m_lastModifiedTime.ToGmtString(Aws::Utils::DateFormat::RFC822)); } if(m_sizeHasBeenSet) diff --git a/generated/src/aws-cpp-sdk-s3control/source/model/LambdaInvokeOperation.cpp b/generated/src/aws-cpp-sdk-s3control/source/model/LambdaInvokeOperation.cpp index 663ed63b52c..d26802e9b97 100644 --- a/generated/src/aws-cpp-sdk-s3control/source/model/LambdaInvokeOperation.cpp +++ b/generated/src/aws-cpp-sdk-s3control/source/model/LambdaInvokeOperation.cpp @@ -89,6 +89,15 @@ void LambdaInvokeOperation::AddToNode(XmlNode& parentNode) const if(m_userArgumentsHasBeenSet) { + XmlNode userArgumentsParentNode = parentNode.CreateChildElement("UserArguments"); + for(const auto& mapItem : m_userArguments) + { + XmlNode userArgumentsMapEntryNode = userArgumentsParentNode.CreateChildElement("entry"); + XmlNode userArgumentsKeyNode = userArgumentsMapEntryNode.CreateChildElement("key"); + userArgumentsKeyNode.SetText(mapItem.first); + XmlNode userArgumentsValueNode = userArgumentsMapEntryNode.CreateChildElement("value"); + userArgumentsValueNode.SetText(mapItem.second); + } } } diff --git a/generated/src/aws-cpp-sdk-s3control/source/model/S3ObjectMetadata.cpp b/generated/src/aws-cpp-sdk-s3control/source/model/S3ObjectMetadata.cpp index c1ff8c7f78f..c136a1ad706 100644 --- a/generated/src/aws-cpp-sdk-s3control/source/model/S3ObjectMetadata.cpp +++ b/generated/src/aws-cpp-sdk-s3control/source/model/S3ObjectMetadata.cpp @@ -160,6 +160,15 @@ void S3ObjectMetadata::AddToNode(XmlNode& parentNode) const if(m_userMetadataHasBeenSet) { + XmlNode userMetadataParentNode = parentNode.CreateChildElement("UserMetadata"); + for(const auto& mapItem : m_userMetadata) + { + XmlNode userMetadataMapEntryNode = userMetadataParentNode.CreateChildElement("entry"); + XmlNode userMetadataKeyNode = userMetadataMapEntryNode.CreateChildElement("key"); + userMetadataKeyNode.SetText(mapItem.first); + XmlNode userMetadataValueNode = userMetadataMapEntryNode.CreateChildElement("value"); + userMetadataValueNode.SetText(mapItem.second); + } } if(m_contentLengthHasBeenSet) diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QueryXmlSubObjectHeader.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QueryXmlSubObjectHeader.vm index 7cf7452553a..1fb5ec8a0c5 100644 --- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QueryXmlSubObjectHeader.vm +++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/queryxml/QueryXmlSubObjectHeader.vm @@ -29,6 +29,9 @@ namespace ${serviceNamespace} { namespace Model { +#foreach($forwardDeclaration in $typeInfo.forwardDeclarations) + class $forwardDeclaration; +#end #set($xmlRef = "${typeInfo.xmlNodeType}&") #set($classNameRef = "${typeInfo.className}&") diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMemberSingleXmlizeSource.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMemberSingleXmlizeSource.vm new file mode 100644 index 00000000000..238400e6d88 --- /dev/null +++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMemberSingleXmlizeSource.vm @@ -0,0 +1,136 @@ +##-------------------- serializeElementToText macro +#macro( serializeElementToText $shapeMember $memberVarName ) +##/* --- the actual shape member is $shapeMember; the actual shape is $shapeMember.shape; --- */ +#if($shapeMember.shape.enum) +${shapeMember.shape.name}Mapper::GetNameFor${shapeMember.shape.name}(${memberVarName})## +#elseif($shapeMember.shape.timeStamp) +#if($member.shape.timestampFormat != "unixTimestamp") +#set($timestamptFormatStr = $CppViewHelper.computeTimestampFormatInXml($shapeMember.shape)) +${memberVarName}.ToGmtString(Aws::Utils::DateFormat::${timestamptFormatStr})## +#else +StringUtils::to_string(${memberVarName}.Seconds())## +#end +#elseif($shapeMember.shape.boolean) +std::boolalpha << ${memberVarName}## +#elseif($shapeMember.shape.blob) +HashingUtils::Base64Encode(${memberVarName})## +#else +${memberVarName}## +#end +#end##macro serializeElementToText +##-------------------- serializeXmlPayloadElement macro +#macro( serializeXmlPayloadElement $spaces $serializationName $lowerCaseVarName $shapeMember $memberVarName $parentNode="parentNode") +#if($shapeMember.xmlAttribute) +#if($shapeMember.shape.boolean || $shapeMember.shape.primitive) + ${spaces}ss << #serializeElementToText($shapeMember, $memberVarName); + ${spaces}${parentNode}.SetAttributeValue("${serializationName}", ss.str()); + ${spaces}ss.str(""); +#else + ${spaces}${parentNode}.SetAttributeValue("${serializationName}", #serializeElementToText($shapeMember, $memberVarName)); +#end +#else##($shapeMember.xmlAttribute) + ${spaces}XmlNode ${lowerCaseVarName}Node = ${parentNode}.CreateChildElement("${serializationName}"); +#if($shapeMember.shape.boolean || $shapeMember.shape.primitive) + ${spaces}ss << #serializeElementToText($shapeMember, $memberVarName); + ${spaces}${lowerCaseVarName}Node.SetText(ss.str()); + ${spaces}ss.str(""); +#else +#if($shapeMember.shape.structure) + ${spaces}${memberVarName}.AddToNode(${lowerCaseVarName}Node); +#else + ${spaces}${lowerCaseVarName}Node.SetText(#serializeElementToText($shapeMember, $memberVarName)); +#end +#end +#end +#end##macro serializeXmlPayloadElement +##-------------------- serializeXmlListPayloadElement macro +#macro( serializeXmlListPayloadElement $spaces $serializationName $lowerCaseVarName $member $memberVarName ) +#if(!($member.locationName && $member.shape.flattened) && !(${member.shape.listMember.locationName} && ${member.isFlattened()})) + ${spaces}XmlNode ${lowerCaseVarName}ParentNode = parentNode.CreateChildElement("${serializationName}"); +#end + ${spaces}for(const auto& item : $memberVarName) + ${spaces}{ +#set($listElParentNode = "parentNode") +#set($listElSerializationName = "") +#if($member.locationName && $member.shape.flattened) +#set($listElSerializationName = ${member.locationName}) +#elseif(${member.shape.listMember.locationName} && ${member.isFlattened()}) +#set($listElSerializationName = ${member.shape.listMember.locationName}) +#elseif(${member.shape.listMember.locationName}) +#set($listElSerializationName = ${member.shape.listMember.locationName}) +#set($listElParentNode = "${lowerCaseVarName}ParentNode") +#else +#set($listElSerializationName = ${member.shape.listMember.shape.name}) +#set($listElParentNode = "${lowerCaseVarName}ParentNode") +#end +#set($listSpaces = $spaces + " ") +#serializeXmlPayloadElement($listSpaces, $listElSerializationName, $lowerCaseVarName, $member.shape.listMember, "item", $listElParentNode) + ${spaces}} +#end##macro serializeXmlListPayloadElement +##-------------------- serializeXmlMapPayloadElement macro +#macro( serializeXmlMapPayloadElement $spaces $serializationName $lowerCaseVarName $member $memberVarName ) +##https://smithy.io/2.0/spec/protocol-traits.html#xml-map-serialization +##TODO: might not be 100% correct, pending validation by protocol tests +##// /* --- the actual shape member is $member; the actual shape is $member.shape; --- */ +##// /* --- key member: ${member.shape.mapKey} */ +##// /* --- key shape: ${member.shape.mapKey.shape} */ +##// /* --- key member: ${member.shape.mapValue} */ +##// /* --- key shape: ${member.shape.mapValue.shape} */ +#set($mapEntryParentNode = "parentNode") +#if(!($member.locationName && $member.shape.flattened)) + ${spaces}XmlNode ${lowerCaseVarName}ParentNode = parentNode.CreateChildElement("${serializationName}"); +#set($mapEntryParentNode = "${lowerCaseVarName}ParentNode") +#end + ${spaces}for(const auto& mapItem : $memberVarName) + ${spaces}{ +#set($mapSpaces = $spaces + " ") +#set($mapEntrySerializationName = "#if($member.locationName)$member.locationName#{else}entry#end") + ${spaces} XmlNode ${lowerCaseVarName}MapEntryNode = ${mapEntryParentNode}.CreateChildElement("${mapEntrySerializationName}"); +#set($mapKeySerializationName = "#if($member.shape.mapKey.locationName)$member.shape.mapKey.locationName#{else}key#end") +#serializeXmlPayloadElement($mapSpaces, $mapKeySerializationName, "${lowerCaseVarName}Key", $member.shape.mapKey, "mapItem.first", "${lowerCaseVarName}MapEntryNode") +#set($mapValueSerializationName = "#if($member.shape.mapValue.locationName)$member.shape.mapValue.locationName#{else}value#end") +#serializeXmlPayloadElement($mapSpaces, $mapValueSerializationName, "${lowerCaseVarName}Value", $member.shape.mapValue, "mapItem.second", "${lowerCaseVarName}MapEntryNode") + ${spaces}} +#end##macro serializeXmlMapPayloadElement +##-------------------- END OF MACROS, ACTUAL TEMPLATE BEGINS -------------------- +#if($member.shape.enum || $member.shape.boolean || $member.shape.primitive || $member.shape.timeStamp || $member.shape.structure || $member.shape.blob) +#serializeXmlPayloadElement($spaces, $serializationName, $lowerCaseVarName, $member, $memberVarName) +#elseif($member.shape.string) +#if($member.xmlAttribute) + ${spaces}parentNode.SetAttributeValue("${serializationName}", ${memberVarName}); +#else + ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${serializationName}"); +#if($operation.arnEndpointAllowed && $operation.arnLocation.equals("body") && $operation.arnEndpointMemberName.equals($memberName) && !$serviceModel.endpointRules)) +## TODO: just remove this block once endpoints check can be removed + ${spaces}${metadata.classNamePrefix}ARN arn($CppViewHelper.computeMemberVariableName($operation.arnEndpointMemberName)); + ${spaces}if (arn && arn.Validate().IsSuccess()) + ${spaces}{ + ${spaces} if (arn.GetResourceType() == ARNResourceType::BUCKET) + ${spaces} { + ${spaces} ${lowerCaseVarName}Node.SetText(arn.GetResourceId()); + ${spaces} } + ${spaces} else if (arn.GetResourceType() == ARNResourceType::OUTPOST) + ${spaces} { + ${spaces} ${lowerCaseVarName}Node.SetText(arn.GetSubResourceId()); + ${spaces} } + ${spaces} else + ${spaces} { + ${spaces} // It's a valid ARN, but has incorrect resource type. + ${spaces} assert(false); + ${spaces} } + ${spaces}} + ${spaces}else + ${spaces}{ + ${spaces} ${lowerCaseVarName}Node.SetText(${memberVarName}); + ${spaces}} +#else + ${spaces}${lowerCaseVarName}Node.SetText(${memberVarName}); +#end##$operation.arnEndpointAllowed... +#end +#elseif($member.shape.list) +#serializeXmlListPayloadElement($spaces, $serializationName, $lowerCaseVarName, $member, $memberVarName) +#elseif($member.shape.map) +#serializeXmlMapPayloadElement($spaces, $serializationName, $lowerCaseVarName, $member, $memberVarName) +#else +!!!! Code generation error: the template does not support this shape under $serializationName serialization to xml: ${member} +#end##End of member.shape is structure or list \ No newline at end of file diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMembersDeserializeXml.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMembersDeserializeXml.vm index 99a517ce21a..03ce3398639 100644 --- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMembersDeserializeXml.vm +++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMembersDeserializeXml.vm @@ -177,7 +177,11 @@ #elseif($member.shape.string) ${spaces}${memberVarName} = ${substituteString}; #elseif($member.shape.timeStamp) +#if($member.shape.timestampFormat != "unixTimestamp") ${spaces}${memberVarName} = DateTime(StringUtils::Trim(${substituteString}.c_str()).c_str(), Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInXml($member.shape)); +#else + ${spaces}${memberVarName} = DateTime(StringUtils::ConvertToDouble(StringUtils::Trim(${substituteString}.c_str()).c_str())); +#end #end #if(!$member.required && $useRequiredField) $varNameHasBeenSet = true; diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMembersXmlizeSource.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMembersXmlizeSource.vm index 43d554112b0..8f6aa0d1476 100644 --- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMembersXmlizeSource.vm +++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMembersXmlizeSource.vm @@ -28,117 +28,7 @@ if($varNameHasBeenSet) { #end -#if($member.shape.enum) -#if($member.xmlAttribute) - ${spaces}parentNode.SetAttributeValue("${serializationName}", ${member.shape.name}Mapper::GetNameFor${member.shape.name}(${memberVarName})); -#else - ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${serializationName}"); - ${spaces}${lowerCaseVarName}Node.SetText(${member.shape.name}Mapper::GetNameFor${member.shape.name}(${memberVarName})); -#end -#elseif($member.shape.boolean) -#if($member.xmlAttribute) - ${spaces}ss << std::boolalpha << ${memberVarName}; - ${spaces}parentNode.SetAttributeValue("${serializationName}", ss.str()); -#else - ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${serializationName}"); - ${spaces}ss << std::boolalpha << ${memberVarName}; - ${spaces}${lowerCaseVarName}Node.SetText(ss.str()); -#end - ${spaces}ss.str(""); -#elseif($member.shape.primitive) -#if($member.xmlAttribute) - ${spaces}ss << ${memberVarName}; - ${spaces}parentNode.SetAttributeValue("${serializationName}", ss.str()); -#else - ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${serializationName}"); - ${spaces}ss << ${memberVarName}; - ${spaces}${lowerCaseVarName}Node.SetText(ss.str()); -#end - ${spaces}ss.str(""); -#elseif($member.shape.string) -#if($member.xmlAttribute) - ${spaces}parentNode.SetAttributeValue("${serializationName}", ${memberVarName}); -#else - ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${serializationName}"); -#if($operation.arnEndpointAllowed && $operation.arnLocation.equals("body") && $operation.arnEndpointMemberName.equals($memberName) && !$serviceModel.endpointRules)) - ${spaces}${metadata.classNamePrefix}ARN arn($CppViewHelper.computeMemberVariableName($operation.arnEndpointMemberName)); - ${spaces}if (arn && arn.Validate().IsSuccess()) - ${spaces}{ - ${spaces} if (arn.GetResourceType() == ARNResourceType::BUCKET) - ${spaces} { - ${spaces} ${lowerCaseVarName}Node.SetText(arn.GetResourceId()); - ${spaces} } - ${spaces} else if (arn.GetResourceType() == ARNResourceType::OUTPOST) - ${spaces} { - ${spaces} ${lowerCaseVarName}Node.SetText(arn.GetSubResourceId()); - ${spaces} } - ${spaces} else - ${spaces} { - ${spaces} // It's a valid ARN, but has incorrect resource type. - ${spaces} assert(false); - ${spaces} } - ${spaces}} - ${spaces}else - ${spaces}{ - ${spaces} ${lowerCaseVarName}Node.SetText(${memberVarName}); - ${spaces}} -#else - ${spaces}${lowerCaseVarName}Node.SetText(${memberVarName}); -#end -#end -#elseif($member.shape.timeStamp) -#if($member.xmlAttribute) - ${spaces}parentNode.SetAttributeValue("${serializationName}", ${memberVarName}.ToGmtString(Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInXml($member.shape))); -#else - ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${serializationName}"); - ${spaces}${lowerCaseVarName}Node.SetText(${memberVarName}.ToGmtString(Aws::Utils::DateFormat::ISO_8601)); -#end -#elseif($member.shape.blob) -#if($member.xmlAttribute) - ${spaces}parentNode.SetAttributeValue("${serializationName}", HashingUtils::Base64Encode(${memberVarName})); -#else - ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${serializationName}"); - ${spaces}${lowerCaseVarName}Node.SetText(HashingUtils::Base64Encode(${memberVarName})); -#end -#elseif($member.shape.structure) - ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${serializationName}"); - ${spaces}${memberVarName}.AddToNode(${lowerCaseVarName}Node); -#elseif($member.shape.list) -#if(!($member.locationName && $member.shape.flattened) && !(${member.shape.listMember.locationName} && ${member.isFlattened()})) - ${spaces}XmlNode ${lowerCaseVarName}ParentNode = parentNode.CreateChildElement("${serializationName}"); -#end - ${spaces}for(const auto& item : $memberVarName) - ${spaces}{ -#if($member.locationName && $member.shape.flattened) - ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${member.locationName}"); -#elseif(${member.shape.listMember.locationName} && ${member.isFlattened()}) - ${spaces}XmlNode ${lowerCaseVarName}Node = parentNode.CreateChildElement("${member.shape.listMember.locationName}"); -#elseif(${member.shape.listMember.locationName}) - ${spaces}XmlNode ${lowerCaseVarName}Node = ${lowerCaseVarName}ParentNode.CreateChildElement("${member.shape.listMember.locationName}"); -#else - ${spaces}XmlNode ${lowerCaseVarName}Node = ${lowerCaseVarName}ParentNode.CreateChildElement("${member.shape.listMember.shape.name}"); -#end -#if($member.shape.listMember.shape.enum) - ${spaces}${lowerCaseVarName}Node.SetText(${member.shape.listMember.shape.name}Mapper::GetNameFor${member.shape.listMember.shape.name}(item)); -#elseif($member.shape.listMember.shape.boolean) - ${spaces}ss << std::boolalpha << item; - ${spaces}${lowerCaseVarName}Node.SetText(ss.str()); - ${spaces}ss.str(""); -#elseif($member.shape.listMember.shape.primitive) - ${spaces}ss << item; - ${spaces}${lowerCaseVarName}Node.SetText(ss.str()); - ${spaces}ss.str(""); -#elseif($member.shape.listMember.shape.string) - ${spaces}${lowerCaseVarName}Node.SetText(item); -#elseif($member.shape.listMember.shape.timeStamp) - ${spaces}${lowerCaseVarName}Node.SetText(item.ToGmtString(Aws::Utils::DateFormat::$CppViewHelper.computeTimestampFormatInXml($member.shape.listMember.shape)); -#elseif($member.shape.listMember.shape.blob) - ${spaces}${lowerCaseVarName}Node.SetText(HashingUtils::Base64Encode(item)); -#elseif($member.shape.listMember.shape.structure) - ${spaces}item.AddToNode(${lowerCaseVarName}Node); -#end - ${spaces}} -#end##End of member.shape is structure or list +#parse("com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/ModelClassMemberSingleXmlizeSource.vm") #if(!$member.required && $useRequiredField) } diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlRequestSource.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlRequestSource.vm index efeaee32a8c..099f66012fc 100644 --- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlRequestSource.vm +++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/XmlRequestSource.vm @@ -69,6 +69,7 @@ Aws::String ${typeInfo.className}::SerializePayload() const #set($xmlNamespace = ${payloadMember.xmlNamespace}) #set($locationName = $payloadMember.locationName) #end +#if(!$payloadMember || !$payloadMember.shape.enum && !$payloadMember.shape.string && !$payloadMember.shape.string)##if payload is structured #if($locationName) XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("${locationName}"); #else @@ -76,6 +77,7 @@ Aws::String ${typeInfo.className}::SerializePayload() const #end XmlNode parentNode = payloadDoc.GetRootElement(); +#end #if($xmlNamespace) #if($xmlNamespace.prefix) #set($xmlnsKey = "xmlns:${xmlNamespace.prefix}") @@ -86,6 +88,20 @@ Aws::String ${typeInfo.className}::SerializePayload() const #end #if($payloadMember) +#if($payloadMember.shape.enum || $payloadMember.shape.string || $payloadMember.shape.string) +##payload member is "streamed", i.e. payload doc is not the XML, but the enum string/string/blob itself +##and CPP SDK did not generate legacy "streaming" request for some modelling quirks) - we need to set the payload to just a string/buffer. +#if($payloadMember.shape.enum) + if ($payloadMember.shape.name::NOT_SET != ${CppViewHelper.computeMemberVariableName($shape.payload)}) { + return ${payloadMember.shape.name}Mapper::GetNameFor${payloadMember.shape.name}(${CppViewHelper.computeMemberVariableName($shape.payload)}); + } + return {}; +#elseif($payloadMember.shape.string) + return ${CppViewHelper.computeMemberVariableName($shape.payload)}; +#else + static_assert(false, "Failed to generate code to serialize non-streaming request with non-structured (not xml) plain string/blob payload" /*payloadMember: $payloadMember*/); +#end +#else ${CppViewHelper.computeMemberVariableName($shape.payload)}.AddToNode(parentNode); if(parentNode.HasChildren()) { @@ -93,6 +109,7 @@ Aws::String ${typeInfo.className}::SerializePayload() const } return {}; +#end #else #set($useRequiredField = true) #set($callFromRequestShape = true) diff --git a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/rest/RestXmlSubObjectHeader.vm b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/rest/RestXmlSubObjectHeader.vm index 919ae5c67f3..33489947c02 100644 --- a/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/rest/RestXmlSubObjectHeader.vm +++ b/tools/code-generation/generator/src/main/resources/com/amazonaws/util/awsclientgenerator/velocity/cpp/xml/rest/RestXmlSubObjectHeader.vm @@ -28,6 +28,9 @@ namespace ${serviceNamespace} { namespace Model { +#foreach($forwardDeclaration in $typeInfo.forwardDeclarations) + class $forwardDeclaration; +#end #set($xmlRef = "${typeInfo.xmlNodeType}&") #set($classNameRef = "${typeInfo.className}&") diff --git a/tools/scripts/codegen/protocol_tests_gen.py b/tools/scripts/codegen/protocol_tests_gen.py index 42f427a14a3..d817255d686 100644 --- a/tools/scripts/codegen/protocol_tests_gen.py +++ b/tools/scripts/codegen/protocol_tests_gen.py @@ -157,10 +157,10 @@ def _collect_test_client_models(self) -> dict: PROTOCOL_TESTS_ENDPOINT_RULES, None, use_smithy) return service_models - def _get_client_models_metadata(self) -> set: - models = set() + def _get_client_models_metadata(self) -> list: + models = list() model_files = os.listdir(self.client_models_dir) - for filename in model_files: + for filename in sorted(model_files): if not os.path.isfile("/".join([self.client_models_dir, filename])): continue model_abspath = str(pathlib.Path(f"{self.client_models_dir}/{filename}").resolve()) @@ -169,7 +169,7 @@ def _get_client_models_metadata(self) -> set: c2j_model = json.load(file_content) model_metadata = self.ProtoTestC2jClientModelMetadata(filename, model_abspath, c2j_model.get("metadata")) - models.add(model_metadata) + models.append(model_metadata) except Exception as exc: print(f"ERROR: unexpected file content in protocol tests clients dir {self.client_models_dir}. " f"Expected c2j client model, but json metadata kew is missing: {exc}") @@ -194,7 +194,7 @@ def _collect_test_definition_models(self) -> dict: test_def_path = str(pathlib.Path(f"{self.test_definitions_dir}/{test_def_group}/{filename}").resolve()) - def _get_corresponding_test_client(test_clients_md: set, test_path: str) -> list: + def _get_corresponding_test_client(test_clients_md: list, test_path: str) -> list: # Get c2j client models matching the test suite # more than 1 is possible (ex: xml and xml with namespace clients for a single test suite) result = list()