2016-05-16 9 views
0

Ich versuche einen Wert auf dem Camel Exchange zwischen einem Request - Response-Aufruf gegen einen QPID-Endpunkt zu speichern.Apache Camel - JMS-Header-Eigenschaften zwischen Request - Response kann nicht weitergegeben werden

Sie können aus meinem Code sehen, dass ich einen Header (und Eigenschaft) vor dem Aufruf des Endpunkts festlegen. Bei der Rückgabe sind die gleichen Header- und Property-Werte gleich null.

Ich möchte im Grunde eine Spur des Dateinamens und filePath zu halten, so dass ich die Ergebnisse in der gleichen Position schreiben

wirklich kämpfen mit diesem.

import org.apache.camel.builder.RouteBuilder; 
import org.springframework.beans.factory.annotation.Value; 

public class ProcessingRoute extends RouteBuilder { 

    @Override 
    public void configure() throws Exception { 

    //@formatter:off 
     from("file:/home/molko/in/?recursive=true&include=.*.txt") 
      .log("File read from disk : ${file:name}") 
      .doTry() 
       .setHeader("JMSReplyTo", constant("response-1"; {create:always, node:{type:queue}}")) 
       .setHeader("JMSCorrelationID", constant(java.util.UUID.randomUUID().toString())) 

       .process(new Processor() { 
        @Override 
        public void process(Exchange exchange) throws Exception { 

         final String fileParent = exchange.getIn().getHeader("CamelFileParent", String.class); 
         final String endPath = fileParent.substring(fileParent.lastIndexOf('/') + 1); 

         exchange.getIn().setHeader("endPath", endPath); 
         exchange.setProperty("endPath", endPath); 
        } 

       })     

       .to(amqp:request-1;{node:{type:queue}}?preserveMessageQos=true?exchangePattern=InOut") 
      .doCatch(Exception.class) 
       .log("Failed : ${file:name}") 
       .log("${exception.stacktrace}") 
      .stop(); 

     from("amqp:response-1; {create:always, node:{type:queue}}") 
      .log("Received from qpid broker : ${date:now}") 
      .doTry() 
       .process(new Processor() { 
        @Override 
        public void process(Exchange exchange) throws Exception { 

         byte[] response = exchange.getIn().getBody(byte[].class); 

         System.out.println("properties : " + exchange.getProperties()); 
         System.out.println("headers : " + exchange.getIn().getHeaders()); 
         }    
        })    
       .to("file:/home/molko/out") 
      .doCatch(Exception.class) 
       .log("Failed from qpid brokre : ${date:now}") 
       .log("${exception.stacktrace}") 
      .stop(); 
    //@formatter:on 
    } 
} 

Antwort

0

includeAllJMSXProperties ist wahrscheinlich das, was Sie suchen,

Camel 2.11.2/2.12: Ob alle JMSXxxx Eigenschaften zu schließen, wenn Mapping von JMS zu Camel Nachricht. Bei Festlegung auf echte Eigenschaften wie werden JMSXAppID und JMSXUserID usw. eingeschlossen. Hinweis: Wenn Sie eine benutzerdefinierte headerFilterStrategy verwenden, gilt diese Option nicht.

Quelle: https://camel.apache.org/jms.html