如何使用 Spring DSL 在骆驼中记录标头值

Posted

技术标签:

【中文标题】如何使用 Spring DSL 在骆驼中记录标头值【英文标题】:How can I log a header value in camel using spring DSL 【发布时间】:2013-09-23 12:39:34 【问题描述】:

这似乎应该很简单,请原谅双关语。我正在尝试在 spring DSL 路由中记录骆驼的标头。我已经看到了Java DSL 的答案,但我一直在徒劳地寻找如何让它在 Spring DSL 中工作。我试过了:

 <log message="ftping $simpleheader.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 版本? 使用骆驼2.11.1——我怀疑这是因为我使用骆驼和弹簧属性(两者)的事实?我可以使用 #springprops['tylerAgency'] 等语法来引用我的 spring 道具,我可以使用 ftpOdysseyInputPath 等语法来引用我的骆驼道具。也许弹簧道具的使用使这成为一个问题,我已经阅读了各种骆驼/弹簧属性文档,但也许我遗漏了一些东西。 【参考方案1】:

我可以实现的一种方法(使用 Java DSL)是:

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

其中“

”应替换为您想要的任何标题键,例如“授权”:

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

【讨论】:

【参考方案2】:

在 JAVA DSL 中

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

LoggingLevel 来自 org.apache.camel.LoggingLevel

【讨论】:

【参考方案3】:

前段时间问过这个问题,并意识到我最终找到了答案,所以应该把它贴在这里,以防其他人在搜索中找到这个帖子。这有效:

<log message="ftping $simplein.header.CamelFileName" loggingLevel="DEBUG"/>

【讨论】:

【参考方案4】:

尝试以下方法,任何一种都可以:

<log message="ftping $header[CamelFileName]"/>
<log message="ftping $headers.CamelFileName"/>

在 Camel 2.5 中添加了 $simple... 语法以避免与 Spring $... 冲突 - 可能是您使用的是旧版本?

【讨论】:

感谢您的建议,但这些都不适合我;使用骆驼版本 2.11.1。更新我的原始问题以显示我的 spring DSL xml 文件的更大的 sn-p。 Camel 2.17, " ... $header.CamelFileName" 为我工作。【参考方案5】:

不确定有没有可能

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

DSL 和 Log 组件中的 log 区别 log DSL 更轻量级,用于记录人类日志,例如开始做...等。它只能记录基于 Simple 语言的消息。

另一方面,Log 组件是一个完整的组件,涉及使用端点等。Log 组件用于记录消息本身,您有许多 URI 选项来控制您希望记录的内容。

【讨论】:

以上是关于如何使用 Spring DSL 在骆驼中记录标头值的主要内容,如果未能解决你的问题,请参考以下文章

Spring Integration DSL 变压器

骆驼如何将授权标头添加到休息路线?

Spring Cloud 网关在过滤器中发送响应

如何使骆驼简单表达式与spring xml中的属性占位符一起使用

如何在骆驼中对石英进行单元测试

如何记录 spring-webflux WebClient 请求 + 响应详细信息(正文、标头、elasped_time)?