1

我在下面的代码中遇到了一个奇怪的情况,它只是将请求路由到 Google 并返回响应。

它运行良好,但是当我激活注释为“//激活此行导致浏览器上的响应为空”的行 以打印从 http 端点(Google)返回的响应时,响应消失,浏览器上不显示任何内容。我认为它可能与只能使用一次的 http 响应的输入流有关,我在上下文中激活了流缓存但没有任何改变。

Apache Camel 版本是 2.11.0

任何建议都非常感谢,在此先感谢。

    public class GoogleCaller {
        public static void main(String[] args) throws Exception {
            CamelContext context = new DefaultCamelContext();

        context.addRoutes(new RouteBuilder() {
            public void configure() {
                from("jetty:http://0.0.0.0:8081/myapp/")
                .to("jetty://http://www.google.com?bridgeEndpoint=true&throwExceptionOnFailure=false")
                .process(new Processor() {

                    public void process(Exchange exchange) throws Exception {
                        System.out.println("Response received from Google, is streamCaching = " + exchange.getContext().isStreamCaching());
                        System.out.println("----------------------------------------------IN MESSAGE--------------------------------------------------------------");
                        System.out.println(exchange.getIn().getBody(String.class));
                        System.out.println("----------------------------------------------OUT MESSAGE--------------------------------------------------------------");
                        //System.out.println(exchange.getOut().getBody(String.class)); //Activating this line causes empty response on browser
                    }
                });
            }
        });

        context.setTracing(true);
        context.setStreamCaching(true);
        context.start();
    }
}
4

1 回答 1

3

当您使用自定义处理器来处理消息时,您应该记住,exchange 的 in 消息有来自 google 的响应消息,如果您使用 exchange.getOut(),camel 将为您创建一个新的空消息并将其视为响应消息。

因为您没有在处理器中设置 out 消息正文,所以在浏览器中获得空响应是有意义的。

于 2013-08-19T01:12:58.130 回答