You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Camel 2.25+升级后Velocity模板无法访问Exchange属性求助

解决Apache Camel Velocity 2.25.4无法访问Exchange属性的问题

1. 开启上下文全访问权限(快速修复)

Camel 2.25.x版本开始,为了安全默认限制了Velocity上下文对Exchange属性的直接访问,需要显式开启allowContextMapAll配置:

// Java路由配置
from("direct:processTemplate")
    .to("velocity:templates/my-template.vm?allowContextMapAll=true");

如果用Spring XML配置:

<to uri="velocity:templates/my-template.vm?allowContextMapAll=true"/>

2. 手动绑定所需属性(更安全的方式)

若不想全局开启全访问权限,可以手动将需要的Exchange属性放入Velocity上下文,避免潜在安全风险:

from("direct:processTemplate")
    .process(exchange -> {
        Map<String, Object> velocityCtx = new HashMap<>();
        // 按需绑定Exchange属性到Velocity上下文
        velocityCtx.put("orderId", exchange.getProperty("orderId"));
        velocityCtx.put("userInfo", exchange.getProperty("userInfo"));
        // 绑定到Camel指定的Velocity上下文属性
        exchange.setProperty("CamelVelocityContext", velocityCtx);
    })
    .to("velocity:templates/my-template.vm");

3. 适配Velocity Tools 3.1的工具注册

Velocity Tools 3.x的API与旧版本存在差异,需确保EscapeTool被正确注册到Velocity上下文:

@Bean
public VelocityComponent velocityComponent() {
    VelocityComponent component = new VelocityComponent();
    Map<String, Object> globalTools = new HashMap<>();
    globalTools.put("escape", new EscapeTool());
    component.setTools(globalTools);
    return component;
}

配置完成后,模板中即可正常使用$escape.html($content)这类语法。

4. 调试验证上下文内容

如果问题仍未解决,可在模板中添加调试代码,查看当前上下文包含的所有变量:

#* 调试代码:输出上下文所有键值对 *#
#foreach($key in $context.keySet())
    <p>$key = $context.get($key)</p>
#end

通过输出结果确认Exchange属性是否被正确传入上下文。

5. 检查依赖冲突

执行依赖树检查命令,排查是否引入了旧版本Velocity相关依赖:

mvn dependency:tree | grep velocity

若发现冲突,在pom.xml中排除旧版本依赖,示例如下:

<dependency>
    <groupId>org.apache.camel</groupId>
    <artifactId>camel-velocity</artifactId>
    <version>2.25.4</version>
    <exclusions>
        <exclusion>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.07 10:06:17