0

我是 Apache camel 的新手,这就是我想要弄清楚的。在下面的示例代码中,我试图在下一个轮询请求中使用请求参数中的属性 - “值”。

String valueFromTheResponse= ""
m.addRouteBuilder(new RouteBuilder() {
        @Override
        public void configure() throws Exception {
            from("timer://foo?period=2)
            .setHeader(Exchange.CONTENT_TYPE, constant("application/json"))
            .setHeader("Accept", constant("application/json"))
            .to("https4://" + <myrequestURL>?param=<valueFromTheResponse>)
            .marshal().json(JsonLibrary.Jackson)
            .setProperty("value", jsonpath("$.value"))
            .process(new Processor() {
                @Override
                public void process(final Exchange exchange) throws Exception {
                    valueFromTheResponse = (String) exchange.getProperty("value");
                }
            })
        }
    });
    m.run();

实现这一目标的最佳方法是什么?或为类级别变量分配属性值?

更新:解决方案通过添加以下内容使其工作:

.process(new Processor() {
                @Override
                public void process(final Exchange exchange) throws Exception {
                    exchange.getIn().setHeader("CamelHttpQuery", buildParamQuery());
                }
            })
4

1 回答 1

0

您需要将值存储在共享字段中,例如RouteBuilder类本身或共享类实例。然后在to http端点 uri 中,您需要将参数查询设置为消息头,而不是在其中通过方法调用获取该值。

.setHeader(Exchange.HTTP_QUERY, method(this, "buildParamQuery"))

然后有一个方法

public String buildParamQuery() {
  return "param=" + sharedValue;
}

然后你从内联处理器中用最后一个值设置这个字段。请注意初始值,例如第一次轮询该值,null因此您可能需要从该buildParamQuery方法或其他内容中返回一个空字符串/空值。

于 2019-02-21T04:30:23.650 回答