2017-10-19 217 views
0

我們有以下情形:創建PDF並通過Apache的駱駝發送郵件

  • 客戶發送包含兩個部分XML消息
  • 的XML的第一部分包含的信息應該被用於創建的使用FOP組分和XSLT PDF
  • 的XML的第二部分包含在該郵件主體中使用的信息,主題等

在駱駝共nfiguration:

  • 傳入的XML可以轉化爲XSL:FO(使用XSLT)
  • FOP的組件可以被調用,不是一個PDF文件可
  • 郵件部件可以被調用,但比我有以下問題
    • 包含郵件信息的原始郵件不再可用。一種可能性是將原始主體存儲在標題或屬性中
    • PDF應作爲附件添加。我認爲沒有默認的處理器,過濾器等可用於將主體移動到附件。所以我必須寫我自己的處理器

問題

  • 任何人都有一個類似的用例例如駱駝配置?
  • 可能是一個Splitter模式,但當前的例子在XML文件中有多個順序,我們的XML文件不包含多個項目,但包含一些數據。在這個用例中是否還有另一種模式?

任何建議將非常有幫助。

我試着用下面的駱駝配置,但在合併策略中zip從不存在。它看起來像沒有從createZip路線

 <camel:multicast strategyRef="mergeStrategy"> 
      <camel:to uri="direct:createZip"/> 
      <camel:to uri="direct:createRequestMessage"/> 
     </camel:multicast> 

     <camel:to uri="smtp://[email protected]"></camel:to> 
    </camel:route> 

    <camel:route> 
     <camel:from uri="direct:createZip" /> 
     <camel:from uri="file:////data/tmp/zip/input"> 
      <camel:description>Reading files from the input folder</camel:description> 
     </camel:from> 

     <camel:aggregate strategyRef="zipStrategy" eagerCheckCompletion="true" completionFromBatchConsumer="true"> 
      <camel:correlationExpression> 
       <camel:constant>true</camel:constant> 
      </camel:correlationExpression> 

      <camel:setHeader headerName="dummybody"> 
       <camel:simple>${body}</camel:simple> 
      </camel:setHeader> 
     </camel:aggregate> 

     <camel:setHeader headerName="Strategy-Attachment"> 
      <camel:constant>true</camel:constant> 
     </camel:setHeader> 

    </camel:route> 


    <camel:route> 
     <camel:from uri="direct:createRequestMessage" /> 
     <camel:to uri="create_request.xslt?saxon=true" /> 
     <camel:setHeader headerName="Content-Type"> 
      <camel:constant>text/html</camel:constant> 
     </camel:setHeader> 
     <camel:setHeader headerName="Strategy-Body"> 
      <camel:constant>true</camel:constant> 
     </camel:setHeader> 
    </camel:route> 

回答

0

您與direct:createZip路線是錯誤的反應,你真的不能有2個來自同一路線。相反,您應該做的是使用Content Enricher EIP模式:http://camel.apache.org/content-enricher.html

您可以使用<pollEnrich>來使用該文件。如果沒有文件,請注意如何處理,然後您需要設置超時。所以請閱讀關於此的文檔。