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返回给客户端。
我正在尝试从 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返回给客户端。