Я создал прокси с 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"/>