【问题标题】:Get HttpServletRequest and HttpServletResponse from Camel Message Body从 Camel 消息体中获取 HttpServletRequest 和 HttpServletResponse
【发布时间】:2016-06-01 00:47:00
【问题描述】:

我正在尝试使用 Camel Jetty 或 Camel HTTP 组件向 HTTP 端点发送请求。我想知道是否可以将请求和响应转换为 HttpServletRequest 和 HttpServletResponse 对象。

我有以下路线:

from("direct://processing/callEndpoint")
    .to("jetty:http://www.google.com")
    .to("bean:processHttpResponse")

我使用 Guice 进行依赖注入,"bean:processHttpResponse" 如下:

public class HttpResponseBean {

    public void processResponse(Exchange exchange) {

        HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
        HttpServletResponse response = exchange.getOut().getBody(HttpServletResponse.class);

    }
}

requestresponse 对象都是 null。调试/检查 Exchange 时,In Message 是字节数组 (byte[]),Out Message 为空。不知道如何继续..

【问题讨论】:

    标签: java apache-camel jetty


    【解决方案1】:

    请参阅Camel Jetty 转到消费者示例。

    尝试像这样调用你的 bean。

    from("jetty:http://localhost:{{port}}/myapp/myservice").bean(HttpResponseBean,"processResponse");
    
    public class HttpResponseBean {
    
        public void processResponse(Exchange exchange) {
    
             // we have access to the HttpServletRequest here and we can grab it if we need it
                HttpServletRequest req = exchange.getIn().getBody(HttpServletRequest.class);
    
        }
    }
    

    【讨论】:

    • .bean() 格式(而不是 .to("bean:") 不起作用。我得到了相同的结果。
    【解决方案2】:

    你应该实现一个像这样的处理器:

    public class MyBean implements Processor {
        public void process(Exchange exchange) throws Exception {
            HttpServletRequest request = exchange.getIn().getBody(HttpServletRequest.class);
            HttpServletResponse response = exchange.getOut().getBody(HttpServletResponse.class);
        }
    }
    

    如果你有这样的@Configuration Spring 上下文

    @Configuration
    class ApplicationConfiguration {
    
      @Bean
      public MyBean myBean() {
        return new MyBean();
      }
    
    }
    

    您应该可以在 process 语句中引用它,例如 .process("bean:myBean")

    如果您使用 RouteBuilder 构建路由,请使用 SpringCamelContext 以让 Camel 访问 bean。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-05
      • 1970-01-01
      • 2015-07-13
      • 2011-12-02
      • 2016-08-11
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      相关资源
      最近更新 更多