Верблюжий сплит с jsonPath не имеет результатов - PullRequest
0 голосов
/ 25 мая 2018

В моем верблюжьем маршруте я хочу отправить часть вывода (путь json $._attachments) в другую конечную точку.Это работает.Однако в некоторых угловых случаях кажется, что некоторые объекты json не имеют этого элемента.Я предположил, что это приведет к тому, что CamelSplitSize будет 0, и попытался проверить это;однако, DefaultErrorHandler, кажется, начинает, а не завершает маршрут.Что я здесь не так делаю?

public class DiscoverAttachmentsFromCouchResponseRoute extends RouteBuilder {

    @Override
    public void configure() throws Exception 
    {
        JsonPathExpression jsonPathExpression = new JsonPathExpression("$._attachments");

        Predicate no_attachments = header("CamelSplitSize").isEqualTo("0");

        errorHandler(
                deadLetterChannel("broker1:queue:dlq.jsonobject.queue")
                .maximumRedeliveries(3)
                );

        from("broker1:queue:input.jsonobject.queue")
        .routeId("DiscoverAttachmentsFromCouchResponseRoute")
        .threads(2)
        .split(jsonPathExpression)
            .marshal().json(JsonLibrary.Jackson,true)
            .to("broker1:queue:with.attachments.queue")
        .choice()
        .when(no_attachments)
            .log("No attachments found.")
            .to("broker1:queue:no.attachments.queue")
        .otherwise()
            .log("A grand total of '${header.CamelSplitSize}' attachments were found.")
        .endChoice();

    }

}

Редактировать иногда ответ слишком очевиден ... Я искал не в том месте.Почему я всегда нахожу ответ через несколько минут после того, как я его спросил?Мне крайне нужна резиновая утка.

Я немного изменил маршрут;Вместо того, чтобы обрабатывать проблему после разделения, я должен сделать это до разделения:

    .choice()
        .when().jsonpath("$._attachments", true)
            .to("vm://withattach")
        .otherwise()
            .to("vm://withoutattach")
    .endChoice();

Тогда мне нужно было только два новых потребителя из vm://* и выполнить логику там.Это похоже на работу.В jsonpath я могу пропустить исключение, которое я не могу сделать ни в выражении JsonPathExpression, ни в split ();

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