如何在使用Spring DSL的Camel中记录标头值

14

这似乎应该很简单,抱歉用了双关语。我正在尝试在Spring DSL路由中记录Camel头信息。我已经看到了Java DSL的答案,但是我一直在徒劳地寻找如何在Spring DSL中使其工作的方法。我已经尝试过:

 <log message="ftping $simple{header.CamelFileName}"/>

还有:

 <log message="ftping ${header.CamelFileName}"/>

还有其他几种排列/变化,但它们都只是逐字记录文本(即它们不替换实际的标题名称)。

我错过了什么?


更新:下面是我的XML文件的较大部分:

<split>
    <simple>${body}</simple>
    <setHeader headerName="CamelFileName">
        <simple>${body.batchNumber}.xml</simple>
    </setHeader>
    <log message="SLH - 5 -- marshalling an EFileBatch to XML" loggingLevel="DEBUG" />
    <marshal>
        <jaxb prettyPrint="true" contextPath="generated.gov.nmcourts.ecitation"
                partClass="generated.gov.nmcourts.ecitation.NMCitationEFileBatch"
                partNamespace="EFileBatch" />
    </marshal>

    <log message="SLH - 6 -- xslt transform to add schema location" loggingLevel="DEBUG" />
    <to uri="{{addSchemaLocationXsltUri}}"/>

    <log message="SLH - 7 -- ftp now initiating" loggingLevel="DEBUG" />
    <log message="ftping ${headers.CamelFileName}"/>

    <to uri="{{ftpOdysseyInputPath}}"/>
    <log message="SLH - 8 -- ftp now complete" loggingLevel="DEBUG" />
</split>

你使用的Camel版本是什么? - Claus Ibsen
使用camel 2.11.1 - 我怀疑这与我同时使用camel和spring属性有关吗?我的Spring属性可以使用如下语法引用:#{springprops['tylerAgency']},而我的Camel属性可以使用如下语法引用:{{ftpOdysseyInputPath}}。也许使用Spring属性造成了问题,我已经阅读了各种camel / Spring属性文档,但也许我错过了什么。 - Steve Harrington
5个回答

18

之前有人问过这个问题,后来我找到了答案,所以在这里发布一下,以防其他人在搜索中找到此线程。以下方法有效:

<log message="ftping $simple{in.header.CamelFileName}" loggingLevel="DEBUG"/>

9

请尝试以下两种方法,都可以实现:

<log message="ftping ${header[CamelFileName]}"/>
<log message="ftping ${headers.CamelFileName}"/>
< p > $simple{...} 语法是在 Camel 2.5 中添加的,以避免与 Spring ${...} 冲突 - 可能是因为您正在使用较旧的版本?


感谢您的建议,但是对我来说都不适用;我正在使用camel version 2.11.1。 我会更新我的原始问题,以展示我的spring DSL xml文件的更大片段。 - Steve Harrington
Camel 2.17,"... ${header.CamelFileName}" 对我有效。 - fg78nc

7

在JAVA DSL中

from("logger")
.log(LoggingLevel.INFO, "${in.headers.CamelFileName}")
.end

LoggingLevel 是来自 org.apache.camel.LoggingLevel 的。


1

使用Java DSL实现这个目标的一种方法是:

from("logger")
.log("${exchange.getIn().getHeader(\"<HEADER>\").toString()}")
.end

将“<HEADER>”替换为您想要的任何标题键,例如“Authorization”:

from("logger")
.log("${exchange.getIn().getHeader(\"Authorization\").toString()}")
.end

0

不确定是否可能

http://camel.apache.org/logeip.html

DSL日志和Log组件之间的区别 DSL日志更轻,适用于记录人类日志,例如“开始做...”等。它只能基于简单语言记录消息。

另一方面,Log组件是一个完整的组件,涉及使用端点等。Log组件用于记录消息本身,并且您有许多URI选项来控制您想要记录什么。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接