2012-06-14 92 views
2

我在當前項目中使用Camel 2.9.x進行集成。其中一條路由由兩個端點組成 - 文件輪詢端點和smtp郵件端點。第一個端點生成的文件必須作爲附件通過smtp端點發送。如何通過駱駝春發送郵件附件文件DSL

對於Camel配置,我們使用Spring DSL(這實際上是一個需求)。春天的版本是3.1.1。不幸的是,我發現只有java dsl的例子和將文件附加到駱駝路由中的電子郵件的文檔。

<endpoint uri="file:///path/to" id="file-source"/> 
<endpoint uri="smtp://mail.example.com:25/[email protected]&amp;password=secret&amp;[email protected]" id="mail-dest"/> 
<route id="simplified-for-readability"> 
    <from ref="file-source"/> 
    <to ref="mail-dest"/> 
</route> 

該配置發送文件爲純文本或文本正文,而不是附件(甚至是二進制文件)。 有沒有辦法將文件作爲附件發送而不使用Java dsl?

回答

8

這可以用Spring配置完成,但是你可能需要編寫一個簡單的java bean,儘管這不需要使用spring或者java DSL。

首先創建一個類似下面這樣的類(你可能需要在這裏解決的東西):

然後剛絲了一個Spring bean,並在您的路線中使用它。應該做的伎倆。

<bean id="attacher" class="foo.bar.AttachmentAttacher"/> 

<route> 
    <from ref="file-source"/> 
    <bean ref="attacher"/> 
    <to ref="mail-dest"/> 
</route> 
+0

好了,這是我已經找到了解決方案[在網絡上](http://camel.apache.org/mail.html#Mail-Sendingmailwithattachmentsample),但我想這樣做的純XML 。如果絕對沒有辦法在純Spring XML中執行此操作,那麼AttachmentProcessor解決方案是最後一招。 謝謝你的努力。 – Czar

+1

嗯..我不知道在「純」xml的方式。但是有[語言組件](http://camel.apache.org/language.html)可以在您定義的文件中調用腳本(groovy或類似的腳本)(也許可以執行「AttachmentAttacher 「 以上)。這樣,您可能可以避免部署編譯的Java類。但它不是Spring/XML。 –

+1

我們可以在郵件組件中添加一些選項,而不是以附件的形式發送文件,訣竅是您可能需要指定MIME類型,例如純文本和文本/二進制文件(或稱爲二進制內容) 。隨意在ASF駱駝登錄JIRA –

0

你也許可以用simple這樣的表達式來做到這一點。簡單是件好事,因爲它配備了駱駝,但我認爲它不夠強大,無法做到你想要的。我還沒有嘗試過,但我確定groovy表達式可以做到這一點。 Spring中可以指定一個常規表達式。

2

這對我有效,對上面的內容略有變化。

import javax.activation.DataHandler; 
import javax.mail.util.ByteArrayDataSource; 

import org.apache.camel.Exchange; 
import org.apache.camel.Message; 
import org.apache.camel.Processor; 

public class AttachmentAttacher implements Processor { 

    private final String mimetype; 

    public AttachmentAttacher(String mimetype) { 
    this.mimetype = mimetype; 
    } 

    @Override 
    public void process(Exchange exchange){ 
    Message in = exchange.getIn(); 
    byte[] file = in.getBody(byte[].class); 
    String fileId = in.getHeader("CamelFileName",String.class); 
    in.addAttachment(fileId, new DataHandler(new  ByteArrayDataSource(file, mimetype))); 
    } 
} 
相關問題