Альтернативы отправке изображения в base64 через документ SOAP - PullRequest
3 голосов
/ 03 мая 2009

В настоящее время я изменяю документ SOAP-сервис для документов для бизнес-приложения, которое передает данные о клиентах взад и вперед.

Новое требование к передаче отсканированных изображений документов только что определено. У меня проблема в том, что используемый мной проприетарный язык не поддерживает вложения SOAP.

Передаваемые изображения могут быть размером до 32 КБ.

Единственное решение, которое я могу придумать, - это кодировать изображение с помощью base64 и передавать его как элемент документа XML.

Это похоже на действительно плохую идею, но я просто не могу придумать ничего лучшего.

Есть идеи?

РЕДАКТИРОВАТЬ: я забыл упомянуть, что изображение не хранится удаленно в файловой системе, оно хранится в базе данных Oracle, к которой у меня нет возможности подключиться напрямую,

1 Ответ

5 голосов
/ 03 мая 2009

Если вы используете XML в качестве механизма передачи данных, вам нужно каким-то образом кодировать изображение. Причина в том, что XML является текстовым форматом, и процессор XML будет пытаться декодировать двоичные данные, как если бы они были текстовыми (более конкретно, как если бы это было UTF-8, если вы не укажете другую кодировку). Более того, XML явно запрещает несколько символов (большинство непечатных ASCII для XML 1.0, \ u0000 для XML 1.1), поэтому вы повредите свои данные, если просто сбросите данные изображения в (скажем) раздел CDATA.

Редактировать: XML-схема определяет тип "base64Binary" , поэтому вы должны иметь возможность соответствующим образом определить свой WSDL (при условии, что вы используете автоматический маршаллер). По крайней мере, вы должны использовать атрибут "xsi: type" для элемента, содержащего ваше закодированное содержимое.

...