创建PDF并通过Apache的骆驼发送邮件

创建PDF并通过Apache的骆驼发送邮件

问题描述:

我们有以下情形:创建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> 

您与direct:createZip路线是错误的反应,你真的不能有2个来自同一路线。相反,您应该做的是使用Content Enricher EIP模式:http://camel.apache.org/content-enricher.html

您可以使用<pollEnrich>来使用该文件。如果没有文件,请注意如何处理,然后您需要设置超时。所以请阅读关于此的文档。