Si vous contrôlez le format XML, vous devez régler le problème à l'envers. Plutôt que de joindre le XML binaire, vous devriez réfléchir à la façon de joindre un document qui a plusieurs parties, dont l'une contient du XML.
La solution traditionnelle à cela est une archive (par exemple tar). Mais si vous souhaitez conserver votre document englobant dans un format texte ou si vous n'avez pas accès à une bibliothèque d'archivage de fichiers, il existe également un schéma standardisé largement utilisé dans les e-mails et HTTP qui est en plusieurs parties / * MIME avec Content-Transfer-Encoding: binaire .
Par exemple, si vos serveurs communiquent via HTTP et que vous souhaitez envoyer un document en plusieurs parties, le principal étant un document XML qui fait référence à des données binaires, la communication HTTP peut ressembler à ceci:
POST / HTTP/1.1
Content-Type: multipart/related; boundary="qd43hdi34udh34id344"
... other headers elided ...
--qd43hdi34udh34id344
Content-Type: application/xml
<myxml>
<data href="cid:data.bin"/>
</myxml>
--qd43hdi34udh34id344
Content-Id: <data.bin>
Content-type: application/octet-stream
Content-Transfer-Encoding: binary
... binary data ...
--qd43hdi34udh34id344--
Comme dans l'exemple ci-dessus, le XML fait référence aux données binaires dans le multipart englobant en utilisant un cid
schéma d'URI qui est un identificateur de l'en-tête Content-Id. La surcharge de ce schéma serait juste l'en-tête MIME. Un schéma similaire peut également être utilisé pour la réponse HTTP. Bien sûr, dans le protocole HTTP, vous avez également la possibilité d'envoyer un document en plusieurs parties dans une requête / réponse distincte.
Si vous souhaitez éviter d'encapsuler vos données dans un multipart, utilisez l'URI de données:
<myxml>
<data href="data:application/something;charset=utf-8;base64,dGVzdGRhdGE="/>
</myxml>
Mais cela a la surcharge de base64.