Skip to content

Commit b5678e9

Browse files
authored
Fix the serialization of blob shapes for the XML protocol (#1470)
1 parent a16f3eb commit b5678e9

File tree

1 file changed

+18
-0
lines changed

1 file changed

+18
-0
lines changed

src/CodeGenerator/src/Generator/RequestSerializer/RestXmlSerializer.php

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -140,6 +140,7 @@ private function dumpXmlShape(Member $member, Shape $shape, string $output, stri
140140

141141
switch ($shape->getType()) {
142142
case 'blob':
143+
return $this->dumpXmlShapeBlob($member, $output, $input);
143144
case 'string':
144145
return $this->dumpXmlShapeString($member, $shape, $output, $input);
145146
case 'integer':
@@ -203,6 +204,23 @@ private function dumpXmlShapeList(Member $member, ListShape $shape, string $outp
203204
]);
204205
}
205206

207+
private function dumpXmlShapeBlob(Member $member, string $output, string $input): string
208+
{
209+
if ($member instanceof StructureMember && $member->isXmlAttribute()) {
210+
$body = 'OUTPUT->setAttribute(NODE_NAME, base64_encode(INPUT));';
211+
} else {
212+
$body = 'OUTPUT->appendChild($document->createElement(NODE_NAME, base64_encode(INPUT)));';
213+
}
214+
215+
$replacements = [
216+
'INPUT' => $input,
217+
'OUTPUT' => $output,
218+
'NODE_NAME' => var_export($member->getLocationName() ?? ($member instanceof StructureMember ? $member->getName() : 'member'), true),
219+
];
220+
221+
return strtr($body, $replacements);
222+
}
223+
206224
private function dumpXmlShapeString(Member $member, Shape $shape, string $output, string $input): string
207225
{
208226
if ($member instanceof StructureMember && $member->isXmlAttribute()) {

0 commit comments

Comments
 (0)