我如何在驼峰路线中使用java布尔条件?

时间:2016-10-14 05:13:27

标签: java apache-camel unmarshalling

我正在使用camel将文件从一个端点传输到另一个端点。我正在启动多个路由,其中​​一些路由需要解密文件。如何根据布尔条件使unmarshal进程在特定路由中可选?

from(source)
    .choice()
    .when(isEncrypted())) //Java boolean value 
    .unmarshal(decrypt(pgpEncryptionDetails)) 
    .endChoice()
to(destination);

PGPDataFormat decrypt(PGPEncryptionDetails pgpEncryptionDetails) {
    PGPDataFormat pgpDataFormat = new PGPDataFormat();
    pgpDataFormat.setKeyFileName(pgpEncryptionDetails.getPrivateKeyPath());
    pgpDataFormat.setPassword(pgpEncryptionDetails.getPassphrase());
    pgpDataFormat.setKeyUserid(pgpEncryptionDetails.getUserId());
    return pgpDataFormat;
}

我知道如何处理一个简单的表达式,但这里我的条件不依赖于交换。

2 个答案:

答案 0 :(得分:1)

您可以使用方法调用表达式来调用实现谓词

的java bean上的方法
public class Foo {
  public boolean isSomething(Object body) {
    ... return true or false
  }
} 

然后使用Camel路径中的方法

when(method(Foo.class, "isSomething"))

答案 1 :(得分:0)

它为我工作。

from(source)
    .process(exchange -> decryptIfEncrypted(pgpEncryptionDetails))
to(destination);

ProcessDefinition decryptIfEncrypted(PGPEncryptionDetails pgpEncryptionDetails) {
    if (isPgpEncryped()) {
        PGPDataFormat pgpDataFormat = new PGPDataFormat();
        pgpDataFormat.setKeyFileName(pgpEncryptionDetails.getPrivateKeyPath());
        pgpDataFormat.setPassword(pgpEncryptionDetails.getPassphrase());
        pgpDataFormat.setKeyUserid(pgpEncryptionDetails.getUserId());
        return new ProcessDefinition().unmarshal(pgpDataFormat);
    }
    return new ProcessDefinition();
}