2016-04-26 8 views
1

Ich habe einen Weg, der wie folgt aussieht:Aufruf eines Bash-Skript mit einem Header-Parameter Kamel-exec

from("direct:start") .to("exec:bash?args=testScript.sh") 
.log("Process done."); 

Diese Strecke läuft gut. Aber jetzt muss ich das Skript mit einem Parameter aufrufen, der ein Austauschkopf ist.

So habe ich versucht:

.to("exec:bash?args=testScript.sh ${header.testHeader}") 

Aber anstatt das Skript mit dem tatsächlichen Wert des Headers läuft (eine ganze Zahl), es läuft das Skript mit der Zeichenfolge „$ {header.testHeader}“.

In meinem Skript baue ich ein Verzeichnis. Der Header Wert Im nebenbei macht das Verzeichnis wie folgt aussehen:

testDirectory/${header.testHeader} 

Statt:

testDirectory/882 

ich den Header-Wert kennen richtig eingestellt ist, weil, wenn ich tun:

.log("${header.testHeader}") 

Ich bekomme den Wert des Headers, den ich erwarte (zB882).

Kann jemand exec mit einem Shell-Skript aufrufen und den tatsächlichen Header-Wert verwenden?

Danke

Antwort

1

Das Problem ist, dass der to() - Endpunkt nicht dynamisch ist. Das heißt, es wird nicht für jeden neuen Austausch, nur einmal beim Start ausgewertet. Camel 2.16.0 führte den Endpunkt toD() ein, der dynamisch ist. Alternativ können Sie, wenn Sie eine frühere Version verwenden, recipientList() verwenden, was ebenfalls dynamisch ausgewertet wird. In Java DSL wäre das etwa so: -

from("direct:start").recipientList().simple("exec:bash?args=testScript.sh ${header.testHeader}"); 
+0

Vielen Dank! Das wusste ich nicht über .to. Ich benutze Camel 2.15.5 (für den Fall, dass jemand anderes darauf stößt), und die zweite Lösung, die recipientList() verwendet, einfach ... funktioniert wie ein Zauber. – JustBlossom

Verwandte Themen