在将WARC条目转换为每个条目的自定义文件格式的Camel路由中,我需要解析一些可以找到原始HTTP头的日期。
我在输入头中包含由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']
中找不到日期。这似乎是为了格式化日期,而不是用于解析。
有什么想法吗?提前谢谢你
发布于 2014-04-11 09:04:14
使用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
依赖项添加到类路径:
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-groovy</artifactId>
<version>${camel.version}</version>
</dependency>
发布于 2014-04-09 13:02:57
可能最容易调用bean,该bean将头转换为日期,并将其存储在另一个标头中。
发布于 2019-08-14 09:52:23
A-编写日期处理器
编写一个实现处理器接口的类,以便您可以从Exchange对象获取Header.Date
,并将其设置为您想要的任何格式;
public class DateProcessor implements Processor {
private static final SimpleDateFormat SOURCE_DATE_FORMAT = new SimpleDateFormat("EEE, dd MMM yyyy HH:mm:ss zzz");
private static final SimpleDateFormat TARGET_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd-HH-mm-ss");
@Override
public void process(Exchange exchange) throws Exception {
String dateString = exchange.getIn().getHeader("Date", String.class);
Date date = SOURCE_DATE_FORMAT.parse(dateString);
exchange.getIn().setHeader("Date", TARGET_DATE_FORMAT.format(date));
}
}
B-在你的路线上使用日期处理器
在您的路由中使用上面的日期处理器,如下所示;
private static void dateProcessorExample(CamelContext camelContext) throws Exception {
camelContext.addRoutes(new RouteBuilder() {
@Override
public void configure() throws Exception {
from("your source here")
.process(new DateProcessor())
.to("your target here");
}
});
}
https://stackoverflow.com/questions/22963219
复制相似问题