您可以调用一个将Camel RestDefinition中的Supplier作为参数的bean方法吗?

时间:2019-05-09 15:39:00

标签: java rest apache-camel dsl supplier

我有一个采用供应商并返回对象摘要版本的方法。我想从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”。如果我只返回完整的事件,那将很容易,并且看起来像这样:

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

但是,我想将上述方法作为Supplier传递给getEventSummary。我一直找不到有关此的任何文档,所以我不确定。可以做到吗?如果是这样,怎么办?如果没有,获取我想要的事件摘要的最佳方法是什么?

我尝试过

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

但是调用SuppliergetEventSummary为空。

我还尝试使用dsl将getEventSummary改为使用List<Event>而不是Supplier

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

但是这似乎跳过了对getEventsByCollector的呼叫,而没有任何选择直接进入getEventSummary。基于这一事实,我在这两种方法的开头都设置了断点,并且仅击中getEventSummary

我需要一个List<EventSummary>。我能够想到解决此问题的唯一其他方法是制作类似getEventSummaryByCollectorID的东西,但是如果我们需要所有事件的摘要或以不同方式提取的事件,则必须有另一种方法实际上是一样的,所以我宁愿避免这种情况。

0 个答案:

没有答案