Как передать запрос веб-сервисов Post of Rest с multipart / form-data через верблюжий маршрут? - PullRequest
0 голосов
/ 23 апреля 2019

Я создал прокси с Jboss Fuse 7.2 и верблюжьими маршрутами, который используется для маршрутизации веб-сервисов REST.

Я создал уникальный маршрут для запроса GET и POST, и я ожидаю, что этот маршрут может пропустить запрос с другим типом содержимого, например application/json, application/xml, multipart/form-data ...

Когда я делаю GET или POST с типом контента json, проблем не возникает, но когда я хочу сделать POST с типом контента multipart/form-data, у меня неправильный запрос кода 400.
My MIME Multipart содержит данные в формате json и файл PDF.

Я видел в трассировке Wireshark, что часть MIME не была в моем запросе POST, что вызывает неверный запрос 400.

Я использую Почтальон для симуляции клиента. Я написал свои маршруты в Camel blueprint с Jetty для потребителя и cxfrs в Producer.

Мой маршрут:

<route id="51_route" streamCache="true">
  <camel:from id="51_from" uri="jetty:http://0.0.0.0:9999/api/B?matchOnUriPrefix=true" />
  <camel:setHeader headerName="Accept-Encoding" id="51_setHeader">
    <camel:constant>identity</camel:constant>
  </camel:setHeader>
  <camel:choice id="51_choice">
    <camel:when id="51_when">
      <camel:simple>${in.header.Authorization} == null || ${in.header.Authorization} == ''</camel:simple>
      <camel:setHeader headerName="CamelHttpResponseCode" id="51_setOutHeader">
        <camel:constant>401</camel:constant>
      </camel:setHeader>
      <camel:setBody id="51_setBody">
        <camel:simple>"errorCode : ${in.header.CamelHttpResponseCode}, errorDesc : Unauthorized, errorDetail: Token is missing or empty"</camel:simple>
      </camel:setBody>
      <camel:log id="_log7" logName="51_Authorization" loggingLevel="INFO" message="Error Token is missing or empty" />
    </camel:when>
    <camel:otherwise id="51_otherwise">
      <camel:to id="51_to" uri="cxfrs:http://HOST:PORT/SERVICES?throwExceptionOnFailure=false" />
    </camel:otherwise>
  </camel:choice>
</route>

Я думаю, что мой прокси не отправляет тело с составными данными, но я не знаю почему.

Можете ли вы помочь мне, пожалуйста?

Редактировать: Решение проблемы.

Я заменяю компонент Jetty компонентом Restlet. Jetty сохранил многокомпонентное тело сообщения in в заголовке сообщения out.

 <camel:from id="_from2" uri="restlet:http://0.0.0.0:80/api/B?restletMethods=post,get"/>
...