Можете ли вы вызвать метод bean-компонента, который принимает поставщика как параметр из Camel RestDefinition (и если да, то как)? - PullRequest
0 голосов
/ 09 мая 2019

У меня есть метод, который принимает поставщика и возвращает сводную версию объектов.Я хочу вызвать это из Camel RestDefinition, но я не смог выяснить правильный синтаксис (или если это вообще возможно сделать).Я открыт для других способов возврата объекта сводки, но нет, если они требуют дополнительных библиотек.

Вероятно, будет проще всего показать в коде то, что я пробовал.

методы, с которыми я работаю:

    public List<Event> getEventsByCollector(String collectorID) {
        // get and return the events for the given collector
    }

    public List<EventSummary> getEventSummary(Supplier<List<Event>> eventSupplier) {
        return eventSupplier.get().stream().map(EventSummary::new).collect(Collectors.toList());
    }

Мы используем Camel Java dsl для определения службы REST, которая выглядит следующим образом:

        rest("/collectors")
         .get("/{collectorID}/events/summary")
         .produces(MediaType.APPLICATION_JSON)         
 .param().name("collectorID").type(RestParamType.path).dataType("String").description("ID of the collector").endParam()

Я пытаюсь понятьтам, где идет конец, «до».Если бы я только возвращал полные события, это было бы достаточно просто и выглядело бы так:

.to("bean:eventService?method=getEventsByCollector(${header.collectorID})")

, но вместо этого я хочу передать вышеупомянутый метод как Supplier в getEventSummary.Мне не удалось найти какую-либо документацию конкретно по этому поводу, поэтому я не уверен.Можно ли это сделать?Если так, то как?Если нет, то как лучше всего получить сводку событий, которые я хочу?

Я пытался

.to("bean:eventService?method=getEventSummary(bean:eventService?method=getEventsByCollector(${header.collectorID}))")

, но Supplier был нулевым, когда вызывался getEventSummary.

Я также попытался изменить getEventSummary, чтобы взять List<Event> вместо Supplier с помощью dsl:

.to("bean:eventService?method=getEventsByCollector(${header.collectorId})")
.to("bean:eventService?method=getEventSummary(${body}))"

, но это, похоже, пропустило вызов на getEventsByCollector ииди прямо к getEventSummary ни с чем.Основываясь на том факте, что я поставил точки останова в начале обоих методов, и это только ударил getEventSummary.

Мне нужно List<EventSummary>.Единственный способ, которым я смог решить эту проблему, - это сделать что-то вроде getEventSummaryByCollectorID, но если нам нужны сводки для всех событий или событий, извлеченных другим способом, то для тех, ктобыть фактически таким же, так что я бы действительно предпочел этого избежать.

...