HTTP GET-вызов к веб-службе REST со строкой запроса в Camel - PullRequest
0 голосов
/ 14 сентября 2018

Мне нужно сделать вызов GET для REST WS со строкой запроса, URI должен быть таким:

http://somehost.com/someservice?parm1=value

Мне нужно присвоить значениепараметр "parm1" тела (обычный pojo с геттерами и сеттерами), так что это верблюжий маршрут:

<setHeader headerName = "Exchange.HTTP_QUERY" id = "queryStringSomeService">
    <simple>parm1=${body.someField}</simple>
</setHeader>
<setHeader headerName = "CamelHttpMethod" id = "httpMethodSomeService">
    <constant>GET</constant>
</setHeader>
<to id="SOME_SERVICE" uri="http4:/somehost.com/someservice?bridgeEndpoint=true" />

Проблема в том, что строка запроса никогда не добавлялась в uri, а httpнаконец, метод использовал свой POST, хотя я добавил заголовок, чтобы явно установить GET.

Я использую Spring DSL.

На странице http://camel.apache.org/http4.html документации, правила длявыберите метод HTTP установлены;в разделе «Вызов с помощью GET или POST», но, по-видимому, в этом случае они не применяются.

Обновление:

Установка нулевого значения для тела решает проблему изменения метода HTTP наGET, хотя в документации сказано, что вы переопределяете это с помощью заголовка CamelHttpMethod.

Но для строки запроса я перепробовал все варианты;с Exchange.HTTP_URI и с Exchange.HTTP_QUERY ничего из этого не сработало

Это заголовки обмена перед вызовом WS:

Accept: application/json
CamelHttpCharacterEncoding: ISO-8859-1
CamelHttpMethod: GET
CamelHttpQuery: ?parm1=value
CamelHttpResponseCode: 200
CamelHttpResponseText: OK
CamelHttpUri: /someservice
CamelHttpUrl: http://somehost/someservice
CamelRedelivered: false
CamelRedeliveryCounter: 0
Connection: close
Content-Type: application/json;charset=UTF-8
Date: Fri, 14 Sep 2018 16:08:19 GMT
Last-Modified: Thu, 13 Sep 2018 13:33:30 GMT
Set-Cookie: JSESSIONID=YXQkEAUAjh0yWsu4UYwSG8vE.5aa71417-9e93-3be1-99ca-7b4ec1d6f2a0; Path=/ca_tar_tarjeta
Transfer-Encoding: chunked
breadcrumbId: ID-wildfly01-1536931422750-9-23

1 Ответ

0 голосов
/ 14 сентября 2018

Береги себя.На маршруте верблюда тело сообщения верблюда обычно становится телом исходящего сообщения.Это может быть причиной того, что Camel все равно использует POST: ваш HTTP-запрос имеет тело.Попробуйте установить тело сообщения Camel на null перед отправкой HTTP-запроса.

Не уверен, что это правильно, я всегда использую маршруты Java:

<setBody>
    <simple>${bodyAs(null)}</simple>
</setBody>

Однако я не знаю, почему строка запроса не работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...