骆驼,public 静态变量和处理器

Camel, public static variables and processors

在骆驼处理器中,我设置了两个名称为 属性 的静态变量:

 public static final String CI_PROPERTY = "ci";
 public static final String IS_PDF_PROPERTY = "isPdf";

我分配如下:

 exchange.setProperty(CI_PROPERTY, documentProperties.get(MAP_PARAMETER_ATTACHMENT_URI));
 exchange.setProperty(IS_PDF_PROPERTY, documentProperties.get(MAP_PARAMETER_IS_PDF));

这些名称应该在其他处理器中用于检索属性。

问题是:其他处理器可以访问这些名称吗?或者我应该将它们移动到另一个 class?万一,在哪里?

是的,您可以这样做,如下所示:

import org.apache.camel.Exchange;
import org.apache.camel.Processor;

public class FooProcessor implements Processor {
    public static final String FOO_PROPERTY = "FOO";
    @Override
    public void process(Exchange exchange) throws Exception {
        exchange.setProperty(FOO_PROPERTY, "This is a Foo property.");
    }
}
import org.apache.camel.Exchange;
import org.apache.camel.Processor;

public class BarProcessor implements Processor {
    @Override
    public void process(Exchange exchange) throws Exception {
        exchange.getMessage().setBody(exchange.getProperty(FooProcessor.FOO_PROPERTY, String.class));
    }
}
from("direct:mainRoute")
.routeId("MainRoute")
    .log("MainRoute BEGINS: BODY: ${body}")
    .process(new FooProcessor())
    .process(new BarProcessor())
    .log("MainRoute ENDS: BODY: ${body}")
.end()
;

当上面的路由 运行 时,将按预期记录以下内容:

MainRoute BEGINS: BODY:
MainRoute ENDS: BODY: This is a Foo property.

但是我认为处理器不应该对其他处理器具有编译时间(也不 运行时间)依赖性。像往常一样将公共部分重构为处理器使用的另一个 class。