Отправка верблюжьего HTTP Post собственного тела - PullRequest
0 голосов
/ 02 января 2019

Я новичок в Apache Camel.Я пытаюсь создать маршруты для вызова нескольких остальных API и объединения ответа в один.Но по какой-то причине создаваемый мной запрос JSON не достигает остальной конечной точки.Во время отладки я вижу, что объекты Exchange имеют значения, которые я установил, и преобразуются в байтовый массив, а с другой стороны, API остальных получает пустые объекты.

Я работаю над загрузочным проектом Spring, и япробовал разные способы составления запроса к JSON, включая Gson и Jackson.Ничего из этого не работает.

Пожалуйста, помогите.

from("direct:oneResponse")
        .multicast(new MyAggregationStrategy()).parallelProcessing()
        .to("direct:rest1call", "direct:rest2call")
        .end();


from("direct:rest1call")
        .routeId("rest1call")
        .setHeader(Exchange.HTTP_METHOD, constant("POST"))
        .setHeader("Content-Type", constant("application/json"))
        .setHeader("Accept", constant("application/json"))
        .process(new Processor() {              
            @Override
            public void process(Exchange exchange) throws Exception {
                exchange.getIn().setBody(<<valid json>>); //json values as required for the rest call.
            }
        })
        .to("http4://localhost:5555/mock/rest1call")
        .setProperty("route", simple("routeId"))
        .unmarshal(new JacksonDataFormat(Rest1Response.class));

from("direct:rest2call")
        .routeId("rest2call")
        .setHeader(Exchange.HTTP_METHOD, constant("POST"))
        .setHeader("Content-Type", constant("application/json"))
        .setHeader("Accept", constant("application/json"))
        .process(new Processor() {              
            @Override
            public void process(Exchange exchange) throws Exception {
                exchange.getIn().setBody(<<valid json>>); //json values as required for the rest call.
            }
        })
        .to("http4://localhost:5555/mock/rest2call")
        .setProperty("route", simple("routeId"))
        .unmarshal(new JacksonDataFormat(Rest2Response.class));

1 Ответ

0 голосов
/ 28 января 2019

Можете ли вы попытаться создать процессор и указать все заголовки и тело в нем?

.process(new Processor() {              
            @Override
            public void process(Exchange exchange) throws Exception {
                exchange.getOut().setHeader(Exchange.HTTP_METHOD, HttpMethod.POST);
                exchange.getOut().setHeader(Exchange.CONTENT_TYPE, "application/json");
                exchange.getOut().setHeader("Accept", "application/json");
                /* this is one way, string representation of json, but maybe you can try to build Model and fill that model with data */
                exchange.getIn().setBody(<<valid json>>); //json values as required for the rest call.
            }
        })

, если вы решите использовать модели, используйте маршалинг после процессора, чтобы убедиться, что ваши данные преобразованы вJSON.

.marshal(yourDataFormat)

Попробуйте GsonDataFormat, он хорошо работает для меня.

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