Apache Camel:在路由上明确到达时,响应会丢失

时间:2013-08-18 18:54:46

标签: apache-camel

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

效果很好但是当我激活注释掉的行“//激活此行导致浏览器上的空响应”打印出来自http端点(Google)的返回响应时,响应消失,浏览器上没有显示任何内容我认为它可能与http响应的输入流有关,它只能被消耗一次而我在上下文中激活Stream Caching但没有任何改变。

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();
    }
}

1 个答案:

答案 0 :(得分:3)

当您使用自定义处理器处理邮件时,您应该记住,来自Google的交换有响应邮件的消息,如果您使用的是exchange.getOut(),则驼峰会创建一个新的空出来给您留言并将其视为回复消息。

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