首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用Camel解析标题中的日期?

如何使用Camel解析标题中的日期?
EN

Stack Overflow用户
提问于 2014-04-09 12:54:57
回答 3查看 5.6K关注 0票数 1

在将WARC条目转换为每个条目的自定义文件格式的Camel路由中,我需要解析一些可以找到原始HTTP头的日期。

我在输入头中包含由HTTP服务器提供的日期(以及最后修改的日期)(通常依赖于RFC2616中描述的格式,比如Wed, 09 Apr 2014 11:59:14 GMT)。

我需要在输入头中解析此日期,并将其存储为输出头中的Date

我试过:

代码语言:javascript
运行
复制
<setHeader headerName="weblab:dct:modified">
   <simple resultType="java.util.Date">${headers.ArchiveRecordPayloadHeader['Last-Modified']}</simple>
</setHeader>

这会导致崩溃,表明日期Wed, 09 Apr 2014 11:59:14 GMT格式不正确。

我也试过:

代码语言:javascript
运行
复制
<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']中找不到日期。这似乎是为了格式化日期,而不是用于解析。

有什么想法吗?提前谢谢你

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-04-11 09:04:14

使用Groovy解析日期String,如

代码语言:javascript
运行
复制
<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依赖项添加到类路径:

代码语言:javascript
运行
复制
<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-groovy</artifactId>
    <version>${camel.version}</version>
</dependency>
票数 0
EN

Stack Overflow用户

发布于 2014-04-09 13:02:57

可能最容易调用bean,该bean将头转换为日期,并将其存储在另一个标头中。

票数 0
EN

Stack Overflow用户

发布于 2019-08-14 09:52:23

A-编写日期处理器

编写一个实现处理器接口的类,以便您可以从Exchange对象获取Header.Date,并将其设置为您想要的任何格式;

代码语言:javascript
运行
复制
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-在你的路线上使用日期处理器

在您的路由中使用上面的日期处理器,如下所示;

代码语言:javascript
运行
复制
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");
        }
    });
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22963219

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档