Apache Camel - 当只有一个 org.apache.camel.Exchange 类型的参数时,返回类型必须为 void

问题描述 投票:0回答:1

我正在使用 apache Camel 4.3.0 和 spring boot 3.2.1 和 java 17。我有一个路由(rest dsl),它接受 xml 并调用 bean 处理器方法,然后进行数据库调用并返回数据 200 OK .

根据 apache Camel 关于 bean 绑定的文档,默认情况下,bean 方法的返回值在出站消息正文中设置。但它也指出,当 bean 方法具有 Exchange 类型的单个方法参数时,其返回类型必须为 void。

骆驼文档链接


@Autowired
DataProcessor dataProcessorBean;

//Rest Route Builder
rest("/api/retrieveWrapper/")
            .id("retrieveWrapper")
            .post("/getData")
            .to("direct:getDataWrapperFromDb");
        
        from("direct:getDataWrapperFromDb")
            .routeId("getDataWrapper")
            .bean(dataProcessorBean, "getWrapper")
            .log("Successfully retrieved data, Size is : ${body.size()}')")
            .end()
            .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpStatus.SC_OK));

//DataProcessor.java
@Component
public class DataProcessor{

    @Autowired
    DataWrapperDao dao;
    
    /*Return type is not void as instructed by camel documentation but has single exchange parameter*/

    public List<Wrapper> getWrapper(Exchange exchange) throws Exception /
    {
        List<Wrapper> dataList = dao.getDataWrapper();//Get data from database
        return dataList;        
    }
}

但是我上面的代码仍然可以工作,并将列表响应设置为交换的主体,即使方法返回类型不是 void 并且它具有 Exchange 类型的单个参数。我可以成功地将 bean 方法(包含列表)返回的主体的大小记录回路由中。 为什么此行为与文档不同?

spring-boot apache-camel
1个回答
0
投票

是的,这是一些古老的要求,但对于今天的现代骆驼来说已经不再是这样了。所以我们可以从文档中删除它。

© www.soinside.com 2019 - 2024. All rights reserved.