2017-02-13 7 views
0

ファイルシステムからファイルを読み込んでルートで処理する小さなキャメルプロジェクトがあります。 処理機能の中に私はsetHeaderがプロセス関数内で機能しないのはなぜですか?

exchange.getOut().setHeader("tc.GIARO.item.ids",simple("TC00000021")); 

を設定し、その後.TO()関数が機能していません。 しかし、私は

.setHeader("tc.GIARO.item.ids", simple("TC00000021")) 

.TOような処理機能の外にこれを設定した場合()関数は、このヘッダと作品を認識する。

私が.logの場合は()ストレート.process後の()または.setHeader()関数は、それはこれがなぜ起こるか

誰かが知っている...両方の方法でログアウトしますか?

EDIT:

@Override 
public void configure() throws Exception { 

    from("file://" + path + "?preMove=inprogress&move=.done") 

      .process(new Processor() { 
       @Override 
       public void process(Exchange exchange) throws Exception { 
        String myFilename = (String) exchange.getIn().getHeader("CamelFileNameOnly"); 
        String[] tcid = myFilename.split("-"); 

        String filename = (String) exchange.getIn().getHeader("CamelFilePath"); 
        String content = new String(Files.readAllBytes(Paths.get(filename))); 

        exchange.getOut().setBody(content, String.class); 
        exchange.getOut().setHeader("tc.GIARO.item.ids", simple("TC00000021")); //whether here      
       } 
      }) 
      .setHeader("tc.GIARO.item.ids", simple("TC00000021")) // or whether here 
      .log("${header.tc.GIARO.item.ids}") 
      .to("tc://" + ip + "/tc?tcMethod=getItemAndRelatedObjects&tcUser=" + user + "&tcPass=" + pass 
        + "&tcSessionKey=1"); 
} 
+0

言うのは難しいを作成しないでください。私はあなたが変更したい部分であるので、getOut()からgetIn()に変更することをお勧めします。 – noMad17

答えて

1

あなたがメッセージ(ないアウトメッセージ)で内のsetHeaderする必要があります。 あなたのルートの残りなし(exchange.getOut().setSomethingを使用して)新しいメッセージ

@Override 
public void configure() throws Exception { 

    from("file://" + path + "?preMove=inprogress&move=.done") 

      .process(new Processor() { 
       @Override 
       public void process(Exchange exchange) throws Exception { 
        String myFilename = (String) exchange.getIn().getHeader("CamelFileNameOnly"); 
        String[] tcid = myFilename.split("-"); 

        String filename = (String) exchange.getIn().getHeader("CamelFilePath"); 
        String content = new String(Files.readAllBytes(Paths.get(filename))); 

        exchange.getIn().setBody(content, String.class); 
        exchange.getIn().setHeader("tc.GIARO.item.ids", simple("TC00000021")); //whether here      
       } 
      }) 
      .setHeader("tc.GIARO.item.ids", simple("TC00000021")) // or whether here 
      .log("${header.tc.GIARO.item.ids}") 
      .to("tc://" + ip + "/tc?tcMethod=getItemAndRelatedObjects&tcUser=" + user + "&tcPass=" + pass 
        + "&tcSessionKey=1"); 
} 
+0

いいえ、それは動作していません...私はまた、 "exchange.getOut()。setBody(content、String.class);"動作しています – IVIike

+0

新しいOutメッセージを作成していますか? 'process'メソッドのコードを投稿してください。 –

+1

私の編集を見てください:あなたが 'exchange.getOut()。setBody(content、String.class);を実行した場合、それは新しいMessageを作成します。 CamelではINメッセージを直接変更することは可能ですが、気にしません。 CamelはExchangeにOUTメッセージがないことを検出します。 したがって、代わりにINメッセージを使用します。ここをクリックしてください:http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html –

関連する問題