У меня есть обмен, содержащий Сообщение с вложениями.Я обнаружил, что не могу выполнить маршалинг сообщения, которое ранее было демаршалировано.
e.g.
.marshal().mimeMultipart() // ok
.unmarshal().mimeMultipart() // ok
.marshal().mimeMultipart() // Fails with "No MimeBodyPart content"
сценарий использования: мне нужно отправить этот обмен через JMS Q другому компоненту.Поскольку JMS не понимает вложения, я должен позвонить .marshal().mimeMultipart()
перед отправкой в JMS Q. Получатель должен затем позвонить .unmarshal().mimeMultipart()
, чтобы восстановить обмен / сообщение с вложениями.
Все это прекрасно работает - я могу получить доступ к вложениям и т. Д.
Однако, если во время обработки обмена происходит сбой, я хочу сохранить обмен в JMS FailedMessage queue
,для повторной отправки вручную при необходимости.
Ошибка обнаружена функцией onException ().Я вызываю класс процесса для записи материала, изучения сообщения и просмотра вложений ... затем обратно в маршрут ...
Если я поместил обмен непосредственно в JMS Q, .to("jms:queue:MyService.FailedMsgQ")
Я теряю вложения (неудивительно).Если я сначала попробую упорядочить сообщение .marshal().mimeMultipart()
перед помещением в очередь, произойдет сбой с сообщением «Нет содержимого MimeBodyPart»
Желаемый результат - поместить обмен в очередь с ошибками (как mimeMultipart), чтобы его можно былоПовторно отправлено.
Почему вы не можете (пере) выполнить обмен, который ранее был не маршалированным?