Java 如何在Camel Restlet中设置请求主体?

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

我有一个简单的Camel-get方法,我只想将主体设置为XSL转换的结果。我该怎么做? 以下代码未编译,但它显示了我想要实现的目标:

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");