2016-10-14 2 views
0

Я использую верблюд для передачи файлов с одной конечной точки на другую. Я запускаю несколько маршрутов, в которых некоторые маршруты должны дешифровать файлы. Как я могу сделать процесс unmarshal необязательным в определенном маршруте на основе логического состояния?Как использовать java boolean condition на верблюжьем маршруте?

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; 
} 

Я знаю, как это сделать с простым выражением, но здесь мое состояние не зависит от обмена.

+0

Почему может вы не проверяете, требуется ли дешифрование внутри 'decrypt()' self? – SubOptimal

+0

@SubOptimal, мне нужно обработать это до вызова 'unmarshal'. Я должен пропустить 'unmarshal()' сам, а не только 'decrypt()'. Я обновил код для лучшего понимания. – Gangaraju

ответ

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(); 
} 
0

Вы можете использовать выражение вызова метода для вызова метода на Java Bean, который реализует предикат

public class Foo { 
    public boolean isSomething(Object body) { 
    ... return true or false 
    } 
} 

И затем использовать метод в маршруте Camel

when(method(Foo.class, "isSomething")) 
Смежные вопросы