Как перемещаться по mutipart / form-data в Mulesoft 4.2 Dataweave 2.2? - PullRequest
1 голос
/ 17 января 2020

Я пытаюсь получить контент из multipart / form-data в Dataweave 2.2. Я просто хочу отправить обратно PDF из второй части полезной нагрузки. Мне не повезло, анализируя эту полезную нагрузку с помощью Dataweave.

Мой код передачи данных просто payload.parts, и я получаю следующую ошибку.

org.mule.runtime.core.api.expression.ExpressionRuntimeException: "Multipart Object does not have `parts` field defined. Expecting type is
{
  preamble?: String, 
  parts: {
    _*: {
      headers: Object, 
      content: Any
    }
  }
}, while writing MultiPart at payload.parts." evaluating expression: "payload.parts".

Вот моя полезная нагрузка. Я обрезал xml и содержимое файла для удобства чтения.

--MIMEBoundary_fdb504344c826b00b136f8946dec737661b743b37d6dc8c4
Content-Type: application/xop+xml; charset=UTF-8; type="text/xml"
Content-Transfer-Encoding: binary
Content-ID: <0.cdb504344c826b00b136f8946dec737661b743b37d6dc8c4@apache.org>

<?xml version="1.0" encoding="UTF-8"?><soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"></soapenv:Envelope>
--MIMEBoundary_fdb504344c826b00b136f8946dec737661b743b37d6dc8c4
Content-Type: application/octet-stream
Content-Transfer-Encoding: binary
Content-ID: <edb504344c826b00b136f8946dec737661b743b37d6dc8c4@apache.org>

%PDF-1.4
%����
1 0 obj
<<
/Creator (Smart Communications)
/Producer (Smart Communications)
/CreationDate (D:20200115094841-05'00')
>>
endobj
2 0 obj
<<
  /N 3
  /Length 3 0 R
  /Filter /FlateDecode
>>
stream
x���wXS���sN�`$!l{��@

1 Ответ

4 голосов
/ 17 января 2020

Проблема, с которой вы столкнулись, заключается в том, что в вашем выражении не определен вывод, что означает, что DataWeave попытается вывести его, используя доступную информацию. Поскольку payload, использованное в выражении, является составным, он выводит этот формат как выходной, но payload.parts не является допустимым составным элементом, поэтому вы получаете ошибку. Учитывая ваш сценарий использования, вам, вероятно, следует извлечь часть PDF непосредственно в виде двоичного содержимого:

output application/octet-stream
---
payload.parts[1].content

Просто не забудьте установить фактический тип MIME PDF (я предполагаю, что вы используете set-payload)

...