2013-02-11 58 views
0

駱駝。文件組件。我需要配置路由,以便僅在沒有錯誤發生時複製文件。我有什麼:條件爲真時複製文件

<route id="importFile" autoStartup="{{fdr.import.enabled}}"> 
      <from uri="direct:startImportFile"/> 
      <from uri="file://{{fdr.folder.working}}?delete=true&amp;readLock=changed"/> 
      <transacted ref="fdrTxRequired"/> 
      <doTry> 
       <to uri="file://{{fdr.folder.done}}"/> <!--1--> 
       <bean ref="transactionsProcessor"/> 
       <bean ref="transactionsFinalizer"/> 
       <!--2--> 
       <doCatch> 
        <exception>java.lang.Exception</exception> 
        <to uri="file://{{fdr.folder.failed}}"/> 
        <bean ref="exceptionProcessor"/> 
       </doCatch> 
       <doFinally> 
        <bean ref="responsePublisher"/> 
       </doFinally> 
      </doTry> 
     </route> 

所需的邏輯: 如果everething是在transactionsProcessor和transactionsFinalizer處理好然後我們剛剛搬到從文件夾文件'工作「做」 如果transactionProcessor或transactionsFinalizer發生錯誤,那麼我們移動到文件夾從「工作」到「失敗」和「完成」的文件必須爲空 如果我將第1行放置到佔位符2比在定製處理器中處理後無法將文件重新定位爲InputStream。 也許我們可以從'工作'轉到'完成'。然後我們處理文件,如果確定,然後確定如果發生錯誤,則從「完成」移至「失敗」。請幫助。

回答

0

OU,我發現溶液 - 與stopOnExeption組播

<routeContext id="fileImportOnlyRouteContext" xmlns="http://camel.apache.org/schema/spring"> 
     <route id="importFile" autoStartup="{{fdr.import.enabled}}"> 
      <from uri="direct:startImportFile"/> 
      <from uri="file://{{fdr.folder.working}}?delete=true&amp;readLock=changed"/> 
      <transacted ref="fdrTxRequired"/> 
      <doTry> 
       <multicast stopOnException="true"> 
        <to uri="direct:startFileImporter"/> 
        <to uri="file://{{fdr.folder.done}}"/> 
       </multicast> 
       <doCatch> 
        <exception>java.lang.Exception</exception> 
        <to uri="file://{{fdr.folder.failed}}"/> 
        <bean ref="exceptionProcessor"/> 
       </doCatch> 
       <doFinally> 
        <bean ref="responsePublisher"/> 
       </doFinally> 
      </doTry> 
     </route> 

     <route id="fileImporterRoute"> 
      <from uri="direct:startFileImporter"/> 
      <bean ref="transactionsProcessor"/> 
      <bean ref="transactionsFinalizer"/> 
     </route> 
    </routeContext>