我有一个简单的Camel get方法,我所要做的就是将body设置为XSL转换的结果。我该怎么做?下面的代码没有编译,但它显示了我想要实现的目标:
rest("/api")
.get("/booksByAuthor/{author}")
.route()
.setBody(
from("file:/conf.xml")
.setHeader("author",simple("${header.author}"))
.to("xslt:/transformers/booksByAuthor.xsl")
);
发布于 2018-12-08 15:25:17
您可以使用处理器将主体设置为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");
https://stackoverflow.com/questions/53681960
复制相似问题