我在下面的代码中遇到了一个奇怪的情况,它只是将请求路由到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();
}
}
答案 0 :(得分:3)
当您使用自定义处理器处理邮件时,您应该记住,来自Google的交换有响应邮件的消息,如果您使用的是exchange.getOut(),则驼峰会创建一个新的空出来给您留言并将其视为回复消息。
因为您没有在处理器中设置out消息体,所以在浏览器中获得空响应是有意义的。