http4没有设置HTTP_RESPONSE属性

时间:2017-08-17 21:19:08

标签: apache-camel camel-http

我有一个非常简单的路由,可以使用Camel HTTP4组件获取URL并打印内容:

from("timer://foo?fixedRate=true&delay=0&period=10000")
    .to("http4://www.google.com")
    .process(e -> System.out.println("Out body: " + e.getOut().getBody()));

请注意,我正在使用out.body,因为Camel documentation中所述:

  

Camel将在OUT上存储来自外部服务器的HTTP响应   身体。 IN消息中的所有标题都将复制到OUT   消息,因此在路由期间保留标题。

但是我从 OUT (身体和标题)获取空值。只有 IN 消息才会填写所有内容。

我错过了什么或者它是一个错误吗?

2 个答案:

答案 0 :(得分:0)

您正在从处理器获取Out正文,而不先进行设置。这就是你得到null的原因。要完成此工作,首先需要将传入的消息,标题和附件明确复制到Out Body,然后打印它。或者更容易接受你提到的In消息。

下一部分来自“Camel in Action”一书,这是一本很棒的书,我觉得它非常有帮助。

  

在实践中,使用getOut时存在一个常见的陷阱:传入   邮件标题和附件将丢失。这往往不是什么   你想要的,所以你必须从中复制标题和附件   传入消息的传入消息,这可能很乏味。

答案 1 :(得分:0)

在Camel中,路由由节点组成。每个节点都使用Exchange。 Exchange有一个IN和OUT消息。因此,在您的情况下,带有http4组件的节点使用了Exchange,称为google.com,并将正文和标题写入OUT消息。接下来,您的proccesor节点接管了Exchange。现在IN消息有来自前一节点(http4)的响应,但是你打印的是空的!所以IN和OUT消息是每个节点不是每个路由!