Apache Camel 在 JSLT 转换后不返回 http 响应

Apache Camel not returning http response after JSLT Transformation

我正在尝试从 Apache Camel 中的 JSLT 转换器获取 http 响应。

就像给定的代码示例

rest("/transform")
.post("/start")
.route()
.to("jslt:transform.jslt").transform().body

我想return改造后body

但我总是遇到这样的异常

2022/03/23 14:51:09,842 [ERROR] [CamelHttpTransportServlet] - Error processing request
java.lang.IllegalStateException: getWriter() has already been called for this response

添加记录器后,我可以确认到 body 的 jslt 转换工作正常。

这样的简单回复
rest("/say")
.get("/hello").route().transform().constant("Hello World");

工作。我认为这与 JSLT 转换的实现有关。

这取决于您的实际用例,但假设您 post 一个 json 负载到您的端点,那么您想要实现的目标可以按照下一步完成,假设您使用 camel-undertow:

// configure rest-dsl
restConfiguration()
    // to use undertow component and run on port 8080
    .component("undertow").port(8080);
// The endpoint /transform/start calls the route `direct:jslt`
rest("/transform")
    .post("/start").consumes("application/json").to("direct:jslt");
from("direct:jslt")
    // Convert the payload to a String as only String or InputStream 
    // are supported by the component jslt
    .convertBodyTo(String.class)
    // Transform the body using the template transform.jslt available from 
    // the classpath
    .to("jslt:transform.jslt");

结果直接设置在您的消息正文中,因此其余端点将在其正文中return返回给客户端。