Отправить файл из мула в API

Я отправляю файл в сторонний API. Я могу сделать запрос с помощью почтальона, и третье лицо принимает ответ: пример ответа на запрос почтальона

Мой поток мулов начинается с http-запроса, и я могу отправить файл в словаре message.inboundAttachments, но я не уверен, как создать запрос третьей стороне в потоке мулов. Когда я пытаюсь установить элемент message.InboundAttachment['Contract'] в полезную нагрузку, я просто получаю общее сообщение:

"Ошибка отправки HTTP-запроса. Тип сообщения: DataHandler"

Я не уверен, что терпит неудачу.

ниже приведен скриншот той части потока, которую я пытался использовать с помощью компонента attachment:

скриншот отредактированного потока

компонент вложения выглядит следующим образом:

<set-attachment attachmentName="#[message.inboundAttachments.Contract.dataSource.part.fileName]" value="#[message.inboundAttachments['Contract'].getInputStream()]" contentType="multipart/form-data" doc:name="Attaching Contract"/>

Я получаю следующую ошибку, хотя при попытке отправить это:

> ERROR 2016-05-03 11:26:45,597
> [[pan.internal.api].api-httpListenerConfig.worker.01]
> org.mule.exception.DefaultMessagingExceptionStrategy: 
> ******************************************************************************** Message               : Error sending HTTP request. Message payload is
> of type: NullPayload Type                  :
> org.mule.api.MessagingException Code                  : MULE_ERROR--2
> JavaDoc               :
> http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html
> Payload               : {NullPayload}
> ******************************************************************************** Exception stack is:
> 1. Remotely closed (java.io.IOException)
> 2. java.io.IOException: Remotely closed (java.util.concurrent.ExecutionException)  
> org.glassfish.grizzly.impl.SafeFutureImpl$Sync:349 (null)
> 3. java.util.concurrent.ExecutionException: java.io.IOException: Remotely closed (java.io.IOException)  
> org.mule.module.http.internal.request.grizzly.GrizzlyHttpClient:245
> (null)
> 4. Error sending HTTP request. Message payload is of type: NullPayload (org.mule.api.MessagingException)  
> org.mule.module.http.internal.request.DefaultHttpRequester:287
> (http://www.mulesoft.org/docs/site/current3/apidocs/org/mule/api/MessagingException.html)
> ******************************************************************************** Root Exception stack trace: java.io.IOException: Remotely closed
> 
> ********************************************************************************

Я также попытался очистить поле Тип содержимого вложения, но, похоже, это необходимо, и также выдает ошибку. Есть идеи?

1 ответ

Решение

Вам не нужно добавлять вложение в качестве полезной нагрузки для запроса, вам нужно просто переместить его из InboundAttachments в OutboundAttachments. Запрашивающий компонент обнаружит наличие OutboundAttachments и выполнит с ними запрос multipart/form-data.

НТН

Обновление copy-attachments будет корректно устанавливать длину содержимого и проходить через содержимое, а не устанавливать вложение:

<copy-attachments attachmentName="Contract"   doc:name="Attaching Contract"  />
Другие вопросы по тегам