Java 如何在Camel Restlet中设置请求主体?
我有一个简单的Camel-get方法,我只想将主体设置为XSL转换的结果。我该怎么做? 以下代码未编译,但它显示了我想要实现的目标:Java 如何在Camel Restlet中设置请求主体?,java,apache-camel,restlet,Java,Apache Camel,Restlet,我有一个简单的Camel-get方法,我只想将主体设置为XSL转换的结果。我该怎么做? 以下代码未编译,但它显示了我想要实现的目标: rest("/api") .get("/booksByAuthor/{author}") .route() .setBody( from("file:/conf.xml") .setHeader("author",simple("${header.author}")) .to("xslt:/t
rest("/api")
.get("/booksByAuthor/{author}")
.route()
.setBody(
from("file:/conf.xml")
.setHeader("author",simple("${header.author}"))
.to("xslt:/transformers/booksByAuthor.xsl")
);
可以使用处理器将主体设置为xml文件,然后将其传递给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"/>
如果您试图在请求中设置body,那么它不应该是
post
而不是get
。setBody指的是沿着驼峰路由传递的消息体,而不是http请求体。它给我一个错误,声明:javax.xml.transform.TransformerException:javax.xml.transform.TransformerException:com.sun.org.apache.xml.internal.utils.WrappedRuntimeException:prolog中不允许包含内容。@Dan您能在问题中添加conf.xml
和booksByAuthor.xsl
文件吗?还要提到您使用的camel的版本。@Dan我添加了一个替代选项,可以将xml文件读入正文。您可以在xslt步骤之前添加.log(“${body}”)
,以查看传入的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");