2017-02-13 24 views
0

我有一個小型駱駝項目,在該項目中,我從文件系統讀取文件並在我的路徑中處理它們。 裏面的處理功能我設置爲什麼setHeader在過程函數中不工作但功能不正常

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

和事後。爲了()函數無法正常工作。 但是,當我設置的處理功能外像

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

的。要()函數識別該標頭和作品。

,如果我的.log().process後直()或.setHeader()函數,它以兩種方式註銷..

有人知道爲什麼會這樣?

編輯:

@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在郵件(未出消息)。 不要創建一個新的Message(使用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);'它會創建一個新的消息。直接改變IN消息在駱駝中是可能的,因爲它不介意。駱駝將檢測到Exchange沒有OUT消息 ,因此改爲使用IN消息。看到這裏:http://camel.apache.org/using-getin-or-getout-methods-on-exchange.html –