У меня есть метод, который принимает поставщика и возвращает сводную версию объектов.Я хочу вызвать это из 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
, но если нам нужны сводки для всех событий или событий, извлеченных другим способом, то для тех, ктобыть фактически таким же, так что я бы действительно предпочел этого избежать.