我有一个简单的Camel get方法,我要做的只是将主体设置为XSL转换的结果。我该怎么做呢? 以下代码无法编译,但是显示了我想要实现的目标:
rest("/api")
.get("/booksByAuthor/{author}")
.route()
.setBody(
from("file:/conf.xml")
.setHeader("author",simple("${header.author}"))
.to("xslt:/transformers/booksByAuthor.xsl")
);
答案 0 :(得分:2)
您可以使用处理器将主体设置为xml文件,然后将其传递给xslt。您不需要在消息正文中包含文件内容,只需文件的句柄就足以用于“ xslt:”。像
rest("/api")
.get("/booksByAuthor/{author}")
.route()
.process(exchange -> exchange.getIn().setBody(new File("/conf.xml")))
.to("xslt:/transformers/booksByAuthor.xsl");
作者已经在消息标题中,因此您无需进行设置,就可以使用
在xslt中对其进行访问。 <xsl:param name="author"/>
<xsl:value-of select="$author"/>
我刚刚将处理器编写为Java 8 lambda,但是如果愿意,可以始终使用单独的类。
如果要将XML文件的源获取到消息中,而不是使用文件句柄,则可以使用pollEnrich来读取文件。然后,您需要使用一种聚合策略来确保您保留原始消息的标头。最简单的方法可能只是将带有xml的邮件正文复制到原始邮件。这是如何执行此操作的示例。
rest("/api")
.get("/booksByAuthor/{author}")
.route()
.pollEnrich("file:/?fileName=conf.xml&noop=true", (original, xml) -> {
original.getIn().setBody(xml.getIn().getBody());
return original;})
.to("xslt:/transformers/booksByAuthor.xsl");