Альтернативы отправке изображения в base64 через документ SOAP
-
03-07-2019 - |
Вопрос
В настоящее время я изменяю сервис SOAP с документами на документы для бизнес-приложения, которое передает данные о клиентах вперед и назад.
Только что определено новое требование для передачи отсканированных изображений документов. У меня проблема в том, что используемый мной проприетарный язык не поддерживает вложения SOAP.
Передаваемые изображения могут быть размером до 32 КБ.
Единственное решение, которое я могу придумать, - это кодировать изображение с помощью base64 и передавать его как элемент документа XML.
Это похоже на действительно плохую идею, но я просто не могу придумать ничего лучшего.
Есть идеи?
РЕДАКТИРОВАТЬ: я забыл упомянуть, что изображение не хранится удаленно в файловой системе, оно хранится в базе данных Oracle, к которой у меня нет возможности подключаться напрямую,
Решение
Если вы используете XML в качестве механизма передачи данных, вам необходимо каким-то образом кодировать изображение. Причина в том, что XML является текстовым форматом, и процессор XML будет пытаться декодировать двоичные данные, как если бы они были текстовыми (более конкретно, как если бы это было UTF-8, если вы не укажете другую кодировку). Более того, XML явно запрещает несколько символов (большинство непечатных ASCII для XML 1.0, \ u0000 для XML 1.1), поэтому вы повредите свои данные, если просто сбросите данные изображения в (скажем) раздел CDATA.
Изменить: XML-схема определяет тип " base64Binary " , поэтому вы должны быть в состоянии определить ваш WSDL соответствующим образом (при условии, что вы используете автоматизированный маршаллер). По крайней мере, вы должны использовать " xsi: type " в элемент, содержащий ваше закодированное содержимое.