You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在Apache Camel路由中设置setHeader并将其值传入脚本?

在Apache Camel路由中实现SetHeader并传递给脚本的完整方案

我来帮你补全这个Apache Camel路由代码,完美实现设置Header并将其值作为输入传递给脚本的需求。下面是完整的路由配置,我会在后面拆解关键部分的逻辑:

<routes xmlns="http://camel.apache.org/schema/spring">
    <route id="com.performancebikes.RouteScript" autoStartup="false">
        <!-- 从指定文件系统路径读取文件 -->
        <from uri="b2bmbFileSystem:com.performancebikes/tempSFTP/in"/>
        <!-- 将Body转换为UTF-8编码的String -->
        <convertBodyTo type="java.lang.String" charset="UTF-8"/>
        <!-- 再将String转换为DOM Document,方便后续XPath解析 -->
        <convertBodyTo type="org.w3c.dom.Document" charset="UTF-8"/>
        <!-- 用XPath拆分XML,提取采购订单号 -->
        <split>
            <xpath>/B2B_Documents/B2B_PurchaseOrder/Header/HeaderInfo/PurchaseOrderNumber/text()</xpath>
            <!-- 设置Header,将拆分出的采购订单号存入名为PurchaseOrderNumber的Header中 -->
            <setHeader name="PurchaseOrderNumber">
                <simple>${body}</simple>
            </setHeader>
            <!-- 调用脚本组件(这里以Groovy脚本为例),将Header的值作为输入传递 -->
            <to uri="groovy:classpath:scripts/processPO.groovy?purchaseOrderNumber=${header.PurchaseOrderNumber}"/>
            <!-- 如果你用的是其他脚本类型,比如JavaScript,可以改成类似这样: -->
            <!-- <to uri="javascript:classpath:scripts/processPO.js?input=${header.PurchaseOrderNumber}"/> -->
        </split>
    </route>
</routes>

关键部分说明

  • setHeader的实现:通过<simple>${body}</simple>把拆分后得到的采购订单号(此时Body就是XPath提取出的单个订单号)存入名为PurchaseOrderNumber的Header中。
  • 传递Header到脚本:在调用脚本的to端点里,通过${header.PurchaseOrderNumber}这个表达式,直接引用刚才设置的Header值作为脚本的输入参数。
  • 脚本适配:根据你实际使用的脚本类型(Groovy、JavaScript、Python等),调整uri的前缀和参数传递方式即可,核心都是通过Camel的表达式语言引用Header。

内容的提问来源于stack exchange,提问作者Arundhathi D

火山引擎 最新活动