Верблюд - конечная точка покоя и разделение списка JSON - PullRequest
0 голосов
/ 10 марта 2020

Итак, у меня есть API отдыха, который находится на https://foo.bar/api, который возвращает либо пустой json список [], либо список, содержащий 1 или более элементов:

[
    {
        "@class": "foo.bar.java.MyObject",
        "name": "Joe Bloggs"
    },
    {
        "@class": "foo.bar.java.MyObject",
        "name": "Fred Flinstone"
    }
]

Теперь я пытаюсь заставить верблюда взять эти данные из моей конечной точки и передать каждый объект в списке процессору. Я пробовал следующее:

fromF("timer://foo-poll?fixedRate=true&delay=5s&period=%d&bridgeErrorHandler=true", pollRate)
    .toF("https4://%s/%s", host, requestPath)
    .log("Received: ${body}")
    .split()
        .jsonpath("$")
        .log("Split: ${body}")
    .process(barProccessor);

А также различные попытки разархивировать данные, используя .unmarshal(new ListJacksonDataFormat(MyObject.class)) или .unmarshal().json(JsonLibrary.Jackson, List.class), где ничего не получалось.

Использование большого блока кода выше ошибок нет и принтеры сообщений журнала «Split: $ {body}» не выводятся.

При отмене сортировки с использованием любого из методов, описанных выше, выдается это независимо от того, сколько элементов возвращено из API:

com.faster xml .jackson.databind.ex c .MismatchedInputException: нет содержимого для сопоставления из-за конца ввода

Когда есть

1 Ответ

0 голосов
/ 11 марта 2020

Хорошо, удалось выяснить это, если кто-то еще сталкивается с подобной проблемой. Построитель рабочего маршрута:

fromF("timer://foo-poll?fixedRate=true&delay=5s&period=%d&bridgeErrorHandler=true", pollRate)
    .toF("https4://%s/%s", host, requestPath)
    .log("Received: ${body}")
    .streamCaching("true")
    .unmarshal(new ListJacksonDataFormat(MyObject.class))
    .split()
        .jsonpath("$")
        .log("Split: ${body}")
    .process(barProccessor);

Я включил потоковое кэширование и распаковал список, используя Джексона.

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