public override object Deserialize(XmlReader reader, IXmlTemplateNode templateNode, ContentDefinition content, XRoadMessage message) { var contentID = reader.GetAttribute("href"); if (string.IsNullOrWhiteSpace(contentID)) { if (message.IsMultipartContainer) { throw XRoadException.InvalidQuery("Missing `href` attribute to multipart content."); } var tempAttachment = new XRoadAttachment(new MemoryStream()) { IsMultipartContent = false }; message.AllAttachments.Add(tempAttachment); if (reader.IsEmptyElement) { return(MoveNextAndReturn(reader, tempAttachment.ContentStream)); } reader.Read(); const int bufferSize = 1000; int bytesRead; var buffer = new byte[bufferSize]; while ((bytesRead = reader.ReadContentAsBase64(buffer, 0, bufferSize)) > 0) { tempAttachment.ContentStream.Write(buffer, 0, bytesRead); } return(tempAttachment.ContentStream); } var attachment = message.GetAttachment(contentID.Substring(4)); if (attachment == null) { throw XRoadException.PäringusPuudubAttachment(contentID); } if (reader.IsEmptyElement) { return(MoveNextAndReturn(reader, attachment.ContentStream)); } reader.ReadToEndElement(); return(attachment.ContentStream); }
public object Deserialize(XmlReader reader, IXmlTemplateNode templateNode, ContentDefinition content, XRoadMessage message) { if (!reader.ReadToDescendant("Include", NamespaceConstants.XOP)) { throw XRoadException.InvalidQuery("Missing `xop:Include` reference to multipart content."); } var contentID = reader.GetAttribute("href"); if (string.IsNullOrWhiteSpace(contentID)) { throw XRoadException.InvalidQuery("Missing `href` attribute to multipart content."); } var attachment = message.GetAttachment(contentID.Substring(4)); if (attachment == null) { throw XRoadException.PäringusPuudubAttachment(contentID); } return(attachment.ContentStream); }