2015-07-13 211 views
2

我有以下途徑:阿帕奇駱駝EXEC消息體

  <route id="import"> 
        <from uri="file:/var/inputfolder?delete=true"/> 
          <log message="Importing ${file:name} started."/> 
          <setProperty propertyName="keepbody"> 
            <simple>${body}</simple> 
          </setProperty> 
          <setHeader headerName="BrandId"> 
            <simple>${file:name}</simple> 
          </setHeader> 
          <setHeader headerName="CamelExecCommandArgs"> 
            <simple>${file:absolute.path} ${header.BrandId.toString.split("_")[0]} Zip -a erase</simple> 
          </setHeader> 
        <to uri="exec://./transfile.php?workingDir=/usr/bin/&amp;args&amp;useStderrOnEmptyStdout=true"/> 
          <log message="stdout/stderr of /usr/bin/transfile.php:\n ${body}"/> 

        <choice> 
          <when> 
            <simple>${bodyAs(String)} contains 'Return OK'</simple> 
            <log message="Importing ${file:name} finished."/> 
          </when> 
          <otherwise> 
            <log message="Importing ${file:name} failed."/> 
            <setBody> 
              <simple>${exchangeProperty.keepbody}</simple> 
            </setBody> 
            <to uri="file:/var/rejected"/> 
          </otherwise> 
        </choice> 

      </route> 

路由檢查文件的文件夾的/ var/inputfolder。如果找到,則執行該腳本transfile.php,並在它的參數使用文件名。如果執行的輸出不包含字符串「返回OK」,標準輸出將被放在一個文件與原文件名到該文件夾​​的/ var /拒絕。 但我想才達到,在在/ var /拒絕文件夾中,其原有內容的文件出現,而不是與執行的輸出。我知道,這是EXEC組件

https://camel.apache.org/exec.html

的正常行爲,但我怎樣才能改變這種實現前面提到的?

提前致謝!

回答

2

您需要將郵件正文存儲作爲交換屬性,然後更換閥體事後exec例如

<setProperty propertyName="keepBody"> 
    <simple>${body}</simple> 
</setProperty> 

然後以後恢復它

<setBody> 
<simple>${exchangeProperty.keepBody}</simple> 
</setBody> 

通知取決於多大Apache的駱駝使用,那麼名稱exchangeProperty可能是一個較舊的名稱,如property。多見於:http://camel.apache.org/simple

我們正在考慮增加一個推/流行的駱駝DSL在未來使這更容易:https://issues.apache.org/jira/browse/CAMEL-8958

+0

感謝您的幫助,但不幸的是我需要更多的有點。我改變了我的問題的途徑,但我得到containnig行異常:org.apache.camel.language.simple.types.SimpleIllegalSyntaxException:由造成未知的函數:exchangeProperty.keepbody在位置0 $ {} exchangeProperty.keepbody 這裏有什麼問題? – bayerb

+0

我使用Apache的ServiceMix的-5.3.0,駱駝芯(2.13.2),駱駝EXEC(2.13.2) – bayerb

+0

作爲回答說,你可能需要使用「財產」,而不是如果您使用的是舊版本你做的駱駝 –