2016-05-12 11 views
0

Ich versuche, einen dynamisch mit einem Eigenschaftswert an URI-Wert zu übergeben. Dieser Eigenschaftswert wird bereits in der cfg-Datei konfiguriert.Dynamische URI basierend auf Dateiname/cfg-Datei/Eigenschaftenname

Wenn der Dateiname mit dem Header CamelFileNameOnly extrahiert wird, muss er an den URI-Endpunkt übergeben werden. Damit wird im Code der gleiche Name bezeichnet.

finden Sie meinen Code unten:

ich eine Datei mit dem Namen KevinFile.txt in meinem Server-Standort fallen gelassen haben = D: \ Server \ jboss-Sicherung-6.2.0.redhat-133 \ data \ myLocalFTP (file: // data/myLocalFTP)

Config File

local.folder.url=file://data/myLocalFTP 
KevinFile=file://data/KevinFileDirectory 

Kamel Strecke

<route id="awsRoute"> 
     <from uri="{{local.folder.url}}"/> 
     <bean ref="processorClass" method="process"/> 
     <log message="myProperty value is ${exchangeProperty.myProperty}"/> <---Gives the fileName 
     <to uri="{{${exchangeProperty.myProperty}}}"/>  <--This is the spot i am getting error :( 
</route> 

ProcessorClass.java

public class ProcessorClass implements Processor{ 
@Override 
     public void process(Exchange exchange) throws Exception { 

       String fileName = (String) exchange.getIn().getHeader("CamelFileNameOnly"); 
       exchange.setProperty("myPropertyNew", fileName); 

     } 
} 
+1

Kevin, ich bin sehr verwirrt mit dem, was Sie versuchen zu erreichen können Sie versuchen, die Beschreibung ein wenig mit dem Fokus zu verbessern Was ist dein Ziel? –

+0

Hallo Mathew, ich muss den "filename" von Propery in der 'to uri' Komponente übergeben, so dass es die cfg Datei mit dem ähnlichen Namen referenziert und die Datei an den angegebenen Ort legt. –

Antwort

0

Ah, was Sie suchen den Header als Eigenschaft wird einfach einstellen. Sie können das tun dies wie:

from("direct:start") 
    .setHeader("CamelFileNameOnly").simple("{{myPropertyName}}") 
    .to("file://data/myLocalDisk"); 

Sie können dies auch vereinfachen, indem die uri Syntax auf dem Dateikomponente in diesem Fall (Dank Sergii für die Empfehlung) verwendet wird. Stellen Sie sicher, dass Sie die camel-Dokumentation für jede Komponente überprüfen, da bestimmte Komponenten auf Exchange-Headern basieren, während andere die URI-Eigenschaften nutzen können.

from("direct:start") 
    .to("file://data/myLocalDisk?fileName={{myPropertyName}}"); 

Es ist auch erwähnenswert, dass, wenn Sie Logik, die Sie den Header verwenden möchten, bevor Sie Sie die setHeader eine Bohne anrufen können.

from("direct:start") 
    .setHeader("CamelFileNameOnly").bean(MyPropertyLogicBean.class, "someMethod({{myPropertyName}})") 
    .to("file://data/myLocalDisk"); 

Verwenden Sie die Camel Properties-Komponente, um diese Eigenschaft zu lösen.

Referenz: http://camel.apache.org/properties.html

+1

besser seit Frage ist im Frühjahr DSL –

+0

@SergiiPozharov danke, dass ich diese Vereinfachung zu meiner Antwort hinzufügen werde –

0

Wenn ich richtig verstehe, müssen Sie „dynamisch“ vlue für den konstanten Teil des Herstellers angeben. Statt <to uri="{{${exchangeProperty.myProperty}}}"/> können Sie verwenden recipientList oder routingSlip:

<recipientList> 
    <simple>${exchangeProperty.myProperty}</simple> 
</recipientList> 

oder

<routingSlip> 
    <simple>${exchangeProperty.myProperty}</simple> 
</routingSlip>