2013-02-22 18 views
1

我使用駝峯2.10.3,與春季DSL。什麼是正確的方式來豐富一個消息,與服務的內容,使用駱駝

我在監視一個CSV文件的目錄。每個文件都包含下載內容的信息,以及其他元數據 - 誰請求它等。

我使用該文件,現在我想使用HTTPComponent下載文件中引用的實體,然後保存到磁盤(將在後面處理),這樣的事情:

<route> 
    <from uri="file:/incoming"/> 
    <unmarshall ref="csv"/> 
    <recipientList><simple>${in.body[1]}</simple></recipientList> 
    <to uri="file:/attachemnts"/> 
    <to ref="furtherProcessing"/> 
</route> 

我使用recipientList因爲基於CSV文件的內容的URL是動態的。上述不起作用,因爲HTTPComponent嘗試將交換的in.body(它是CSV文件內容的值)發送到HTTP服務。

我以後需要處理CSV文件中的值,所以我不能把它們吹走。我第一次嘗試解決這個問題的方法是將CSV文件中的所有值移動到頭文件中,然後將主體設置爲null,以便HTTPComponent不會發出抱怨(即使它沒有抱怨,我仍然需要以某種方式保留原始文件CSV數據)。這工作,但真正混亂的路線,有很多頭,我必須手動複製每一個。

似乎我需要有一些輔助路徑來下載,我想過使用自定義aggregationStrategy多點傳送,然後一個端點是下載,另一個是沒有操作,但這沒有' t看起來也很乾淨。

任何人有任何意見,如何做到這一點乾淨,我覺得我失去了一些非常簡單的東西?

回答

3

據我瞭解你的情況,你有CSV文件中的URL,你需要做一個HTTP/GET操作,而不需要請求中的任何有效載荷數據。

我會將消息正文複製到交換屬性中。由於解組內容爲List<List<String>>,因此可以將其設置爲屬性,然後從整個屬性中稍後再取回。

就像這樣(我沒有真正測試它,所以要小心語法type-os)。

<route> 
    <from uri="file:/incoming"/> 
    <unmarshall ref="csv"/> 
    <setProperty propertyName="originalData"> 
    <simple>${body}</simple> 
    </setProperty> 
    <setBody> 
    <simple>null</simple><!-- will make HTTP use GET method and not send data --> 
    </setBody> 
    <recipientList><simple>${in.property.originalData[1]}</simple></recipientList> 
    <to uri="file:/attachemnts"/> 
    <to ref="furtherProcessing"/> 
</route> 
+0

謝謝佩特,我沒有想過把整件事放在交換房產中 - 當然這使得房子更乾淨。 – BigBen 2013-02-25 17:41:29

相關問題