2016-08-04 31 views
3

Ich schreibe einige Routen mit camel, und ich möchte einige Transformationen mit einem Prozessor vornehmen. Ich habe eine Eigenschaftendatei und es funktioniert ok.So verwenden Sie Platzhalter für Eigenschaften in einem Camel-Prozessor

from(URI_LOG) 
    .routeId("{{PREFIX_LOG}}.prepareForMQ") 
    .log("Mail to: {{MAIL}}") //The value is read from a property file 
    .process(new ProcessorPrepareMail()) 
    .log("${body}"); 

Nun ... Ich möchte den Wert von {{MAIL}} innerhalb des Prozessors lesen, aber ich weiß nicht, wie.

habe ich versucht, diese Dinge:

public class ProcessorPrepareMail implements Processor 
{ 

    @Override 
    public void process(Exchange exchange) throws Exception 
    { 
     //Plan A: Does not work.... I get an empty String 
     String mail = exchange.getProperty("MAIL", String.class); 

     //Plan B: Does not work.... I get the String "{{MAIL}}" 
     Language simple = exchange.getContext().resolveLanguage("simple"); 
     Expression expresion = simple.createExpression("{{MAIL}}"); 
     String valor = expresion.evaluate(exchange, String.class); 

     //Plan C: Does not work. It activates the default error handler 
     Language simple = exchange.getContext().resolveLanguage("simple"); 
     Expression expresion = simple.createExpression("${MAIL}"); 
     String valor = expresion.evaluate(exchange, String.class); 
    } 
} 

Können Sie mir helfen?

Dank

Antwort

10

Es gibt API auf CamelContext, das zu tun:

String mail = exchange.getContext().resolvePropertyPlaceholders("{{MAIL}}"); 
+0

Excellent! Vielen Dank! – Desenfoque