Что именно это означает, когда говорят, что вложение находится вне сообщения SOAP? Я предполагаю, что, возможно, вложение отправлено в виде другого пакета TCP, но я думаю, что я не прав?
В отличие от первого варианта, вложение не является частью фактической полезной нагрузки сообщения мыла, а вместо этого ссылается на документ SOAP. Разница между MTOM и SWA заключается в том, где находится указанный файл. Для MTOM он встроен в ответ, а в SWA вы можете, например, получить ссылку на ресурс в Интернете. Далее следует 3 минимальных примера:
MTOM (все в одном ответе типа xop + xml)
Content-type: multipart/related;
type="application/xop+xml";
start-info="text/xml"
--uuid:c73c9ce8-6e02-40ce-9f68-064e18843428
Content-Type: application/xop+xml;charset=utf-8;type="text/xml"
Content-Transfer-Encoding: binary
<?xml version="1.0" ?>
<S:Envelope xmlns:S="...">
<S:Body>
<ns2:downloadImageResponse xmlns:ns2="...">
<return>
<xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include"
href="cid:012eb00e-9460-407c-b622-1be987fdb2cf@example.jaxws.sun.com">
</xop:Include>
</return>
</ns2:downloadImageResponse>
</S:Body>
</S:Envelope>
--uuid:c73c9ce8-6e02-40ce-9f68-064e18843428
Content-Id: <012eb00e-9460-407c-b622-1be987fdb2cf@example.jaxws.sun.com>
Content-Type: image/png
Content-Transfer-Encoding: binary
SWA (только ссылка)
Content-Type: application/xml;charset=utf-8;
<?xml version="1.0" ?>
<S:Envelope xmlns:S="...">
<S:Body>
<ns2:downloadImageResponse xmlns:ns2="...">
<return>
https://server.com/downloadImagehere.png
</return>
</ns2:downloadImageResponse>
</S:Body>
</S:Envelope>
Инлайн
Content-Type: application/xml;charset=utf-8;
<?xml version="1.0" ?>
<S:Envelope xmlns:S="...">
<S:Body>
<ns2:downloadImageResponse xmlns:ns2="...">
<return>
YTM0NZomIz...potentiallyLargeBase64encodedFileGoesInHere...I2OTsmIzM0NTueYQ==
</return>
</ns2:downloadImageResponse>
</S:Body>
</S:Envelope>
Какой из вышеперечисленных вариантов рекомендуется и, в частности, какой из них лучше всего подходит для среды Spring-WS Spring?
Все они поддерживаются, и выбор зависит от вашего варианта использования. Согласно моим исследованиям, MTOM является стандартом де-факто. По моему мнению, это особенно полезно, если у вас есть большие или несколько файловых вложений. Поскольку он разбивает сообщение на логические компоненты, он может дать парсеру больше возможностей для эффективной обработки двоичных данных.
Однако для небольших данных я бы, вероятно, пошел на встраивание ресурса, поскольку он является частью стандартного протокола SOAP и использует только закодированный байтовый массив напрямую, который затем напрямую внедряется в сообщение. Если важна переносимость / совместимость, такой подход можно выбрать.
Последний подход, очевидно, требует от вас обработки ссылки самостоятельно, что может или не может быть тем, что вы хотите.
Мне неясно, какие из перечисленных выше вариантов кодируют двоичный контент во время передачи. Что такое двоичный MIME, как описано здесь - http://www.crosschecknet.com/intro_to_mtom.php? Двоичные данные все еще преобразуются в текст во время передачи?
MTOM и Inline оба обычно кодируют файл как Base64encoded String. Для внешних ссылок это не актуально.
Какой формат данных при использовании SWA?
Base64 кодированный байтовый массив