0

我正在使用 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"}]

并且任何卷曲只返回 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();
4

1 回答 1

2

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

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

其他方式你必须删除日志行

.log("HTTP Response: " + "${body}")
于 2021-09-19T00:11:45.667 回答