我是Apache骆驼的新手,这就是我想要弄清楚的东西。在下面的示例代码中,我试图在下一个轮询请求的请求参数中使用属性-“ value”。
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());
}
})
答案 0 :(得分:0)
您需要将值存储在RouteBuilder
类本身或共享类实例的共享字段中。然后在 to http 端点uri中,您需要将param查询设置为消息标头,而不是在其中可以通过方法调用获取该值的地方。
.setHeader(Exchange.HTTP_QUERY, method(this, "buildParamQuery"))
然后有一个方法
public String buildParamQuery() {
return "param=" + sharedValue;
}
然后在内联处理器中将此字段设置为最后一个值。并注意一下初始值,例如第一次轮询,其值为null
,因此您可能需要从buildParamQuery
方法或其他方法返回空字符串/空值。