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

Camel XSLT组件动态XML转换:能否在URI中传入Java变量作为模板?

关于Camel XSLT组件传入字符串模板的问题

兄弟,直接用xslt:${fee}这种写法是行不通的哈~原因很简单:Camel的XSLT组件默认是通过URI来定位静态资源路径的(比如classpath下的.xsl文件、本地文件系统路径),它没法直接识别URI里传入的字符串形式的XSLT模板内容。

那要实现动态传入字符串类型的XSLT模板,该怎么操作呢?给你两种常用的方案:

方案一:直接使用StringSource包装模板字符串

如果你已经拿到了fee这个字符串类型的模板变量,可以通过transform().xslt()方法,用StringSource把模板包装后传入,代码示例如下:

import javax.xml.transform.stream.StringSource;

// ...

from("direct:foo")
    .transform().xslt(new StringSource(fee))
    .to("direct:output");

StringSource是JDK自带的XML转换源类,专门用来处理字符串形式的XML/XSLT内容。

方案二:动态从Exchange中获取模板字符串

如果模板字符串是存放在Exchange的Header或者其他属性里的(比如你示例里的fee是消息头),可以用Lambda表达式动态获取并包装:

from("direct:foo")
    .transform().xslt(exchange -> {
        // 从Header中获取字符串模板
        String xsltTemplate = exchange.getIn().getHeader("fee", String.class);
        return new StringSource(xsltTemplate);
    })
    .to("direct:output");

额外注意点

  • 要确保你的字符串模板是合法的XSLT语法,否则转换时会抛出语法错误
  • 如果模板内容比较大或者需要复用,更建议把模板存成独立的.xsl文件,通过资源路径(比如xslt:classpath:templates/my-transform.xsl)引用,这样性能和维护性更好
  • 如果你用的是Spring Boot + Camel,也可以结合Camel的表达式语言(比如Simple表达式)来动态获取模板,但核心还是要通过StringSource来包装字符串内容

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:01:17