2014-04-09 14 views
0

在將WARC條目轉換爲每個條目的自定義文件格式的Camel路由中,我需要解析一些可以找到原始HTTP標頭的日期。如何使用Camel解析頭中的日期?

我在輸入標題中有一個由HTTP服務器提供的日期(和最後修改日期)(通常依賴RFC2616中描述的格式,即類似於Wed, 09 Apr 2014 11:59:14 GMT)。

我需要在輸入標題中解析這個日期,並將其作爲Date存儲在輸出標題中。

我想:

<setHeader headerName="weblab:dct:modified"> 
    <simple resultType="java.util.Date">${headers.ArchiveRecordPayloadHeader['Last-Modified']}</simple> 
</setHeader> 

這崩潰說,日期Wed, 09 Apr 2014 11:59:14 GMT是不正確的格式。

我也試過:

<setHeader headerName="weblab:wlp:hasGatheringDate"> 
    <simple resultType="java.util.Date">${date:in.header.ArchiveRecordPayloadHeader['Date']:EEE, dd MMM yyyy HH:mm:ss zzz}</simple> 
</setHeader> 

不過是崩潰說,它不能in.header.ArchiveRecordPayloadHeader['Date']找到一個日期。看起來這是爲了格式化日期而不是解析。

有什麼想法? 預先感謝您

+0

如果你想要做的是將日期轉換字符串轉換爲日期對象,爲什麼不將該責任推送到路由輸出的接收方?那麼你不必爲路由本身編寫任何代碼。 – Ralf

+0

爲什麼不使用spel,mvel或groovy?他們比簡單的語言提供更多的選擇。 –

+0

@Ralf Receiver需要一個Date並且不在我的責任範圍內,Producer提供一個String並且不在我的職責範圍內,我打算直接在路由中執行此操作 – YMomb

回答

0

使用Groovy來解析日期String

<setHeader headerName="myNewHeader"> 
    <groovy>new java.text.SimpleDateFormat('EEE, dd MMM yyyy HH:mm:ss zzz', java.util.Locale.US).parse(request.headers.myOldHeader)</groovy> 
</setHeader> 

爲了使Groovy中添加camel-groovy依賴到classpath:

<dependency> 
    <groupId>org.apache.camel</groupId> 
    <artifactId>camel-groovy</artifactId> 
    <version>${camel.version}</version> 
</dependency> 
0

可能最容易調用一個bean,它會將頭轉換爲日期並將其存儲回另一個頭。

+0

謝謝,這是一個選項,但不是首選的一個。我不想添加任何Java代碼,只使用XML配置。 – YMomb