簡體   English   中英

如何在Camel Restlet中設置請求正文?

[英]How to set request body in Camel Restlet?

我有一個簡單的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。 您不需要在消息正文中包含文件內容,只需文件的句柄就足以用於“ 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");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM