2016-05-12 5 views
0

私はをURI値にプロパティ値で動的に渡そうとしています。そのプロパティー値はcfgファイルにすでに設定されています。ファイル名/ cfgファイル/プロパティ名に基づく動的URI

CamelFileNameOnlyヘッダーを使用してファイル名を抽出すると、そのファイル名がUriエンドポイントに渡される必要があります。同じ名前がコード内で参照されるようにします。 (\サーバー\ JBossのヒューズ-6.2.0.redhat-133 \データ\のmyLocalFTP:

私は私のサーバーの場所= Dで名前KevinFile.txtでファイルを落としています:以下の私のコードを見つけてください

ファイル://データ/ myLocalFTP)

設定ファイル

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

キャメルルート

<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

ケビンは、私はあなたが達成しようとしているものと非常に混乱していますが、に焦点を当てて説明を少し改善しようとすることができますあなたの目標は何ですか? –

+0

こんにちはMathew、私は似たような名前でcfgファイルを参照し、指定された場所にファイルを置くように、 'uri'コンポーネントにPropery "filename"を渡す必要があります。 –

答えて

0

ああ、あなたは、単にプロパティとしてヘッダを設定されて探しているものを。

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

ます。また、この場合(勧告のためのセルギのおかげ)でファイルコンポーネントで利用可能なURI構文を使用してこれを簡素化することができます:あなたはこのようなことを行うことができます。特定のコンポーネントがExchangeヘッダーに依存しているのに対し、他のコンポーネントはURIプロパティを活用することができるように、各コンポーネントのラクダドキュメントを確認してください。

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

そのあなたがヘッダを設定する前に使用するロジックを持っている場合は、のsetHeaderは、Beanを呼び出すことができますことは注目に値するも。

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

このプロパティを解決するには、camelプロパティコンポーネントを使用します。

参考:私が正しく理解していればhttp://camel.apache.org/properties.html

+1

質問がSpring DSLにあるので、 –

+0

@SergiiPozharovありがとうございます。 –

0

、あなたはプロデューサーの一定の部分は、「ダイナミック」vlueを指定する必要があります。代わりに<to uri="{{${exchangeProperty.myProperty}}}"/>のあなたはRECIPIENTLISTやroutingSlipを使用することができます。

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

または

<routingSlip> 
    <simple>${exchangeProperty.myProperty}</simple> 
</routingSlip> 
関連する問題