骆驼 REST 到外部 API 不返回响应

Camel REST to external API not returning the response

我正在使用 camel-rest 连接到外部 API 并验证 json-schemas,该应用程序按预期工作,但是呼叫没有回复,我只能看到它通过 Camel 内部的日志,如下所示:

INFO  [route3] (vert.x-worker-thread-0) HTTP Response: [{"description":"Winter fruit","name":"Apple"},{"description":"Tropical fruit","name":"Pineapple"}]

而且任何卷曲只做 returns 200 OK。

这是我的代码:

public class Validator extends RouteBuilder {

    private static final String REST_ENDPOINT_ECHO= "{{rest.endpoint}}?bridgeEndpoint=true" +
            "&copyHeaders=true" +
            "&connectionClose=true";

    @Override
    public void configure() throws Exception {
        onException(JsonValidationException.class)
            .handled(true)
            .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(400))
            .setHeader(Exchange.CONTENT_TYPE, simple("text/plain"))
            .log("Body: ${body}, Header: ${headers}")
            .setBody(simple("Error: Invalid JSON Schema"));

        rest()
            .post("/{{rest.endpoint.subpath}}").enableCORS(true).route()
            .to("direct:validator")
            .endRest();

        from("direct:echoServiceUrl")
             .to("json-validator:file:/deployments/schema.json")
             .to("http://" + REST_ENDPOINT_ECHO)
                 .log("HTTP Response: " + "${body}")
                 .convertBodyTo(String.class)
        .end();

Http 组件 returns CachedOutputStream 所以当你记录它时这个流对象正在被消耗并且你得到一个空的响应。这样您的流对象将存储在接下来的步骤中。第一个解决方案你可以像那样设置流缓存到你的代码

.to("https://anyurl.com")
    .streamCaching()
    .log("my body is ${body}");

否则你必须删除日志行

.log("HTTP Response: " + "${body}")