Camel 将正文值传递到另一个处理步骤

zbsbpyhn  于 2022-11-07  发布在  Apache
关注(0)|答案(2)|浏览(194)

我的问题是,我必须通过交换身体价值(在前面的路径中设置的)到.to("rest:get ...")步骤中。我正在尝试类似下面的代码,但是在重要的步骤中,类变量id等于null,即使我在前一个步骤中在自定义处理器中设置了它的值。我还尝试使用simple()函数,它可以计算到交换体中,但问题是我无法访问.to("rest:get ...")方法中的exchange,我只能在处理器内部访问它。
如何将交换体值传递到.to("rest:get ...")步骤中?

public class SomeRoute extends RouteBuilder {

    @ConfigProperty(name = "rest.external.host")
    String host;

    @ConfigProperty(name = "rest.external.endpoint")
    String endpoint;

    String id;

    @Override
    public void configure() throws Exception {
        restConfiguration().host(host);

        from("direct:routeEntry")
                .log(LoggingLevel.INFO, log, body().toString())
                .setHeader(Exchange.HTTP_METHOD, constant("GET"))
                .removeHeader(Exchange.HTTP_PATH)
                .removeHeaders("Camel*")
                .process(exchange -> {
                    id = exchange.getIn().getBody().toString();
                })
                .to("rest:get:" + endpoint + "/" + id)
                .convertBodyTo(String.class);
       }
    }
kokeuurv

kokeuurv1#

使用dynamic(即“toD”):

.toD("rest:get:" + endpoint + "/${body}")
mmvthczy

mmvthczy2#

更简单地解释为什么id为null:类变量值仅在路由示例化时被读取。
它只被读取一次的原因是端点URI在路由构建期间被构造一次,并且在路由被构建和启动之后,每次执行都使用它。
为了得到你想要的结果,你需要使用一个动态来,就像@TachaDeChoco说的那样。
在dynamic to中,您可以在路由执行期间使用简单语法来构造最终URI。

相关问题