对于骆驼的cxfrs:rsclient中的400错误请求,交换为空对于200 http状态,将设置交换对象

问题描述

以下是使用api端点的代码段。对于200 http响应,交换对象包含收到的有效负载。但是对于400个响应,未在交换对象中设置接收到的有效负载。下面的代码中缺少什么吗?

Exchange exchange = serviceProducer.send(endPoint,new Processor() {
            public void process(Exchange exchange) throws Exception {
                exchange.setPattern(ExchangePattern.InOut);
                Message inMessage = exchange.getIn();
                inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_USING_HTTP_API,Boolean.TRUE);
                inMessage.setHeader(Exchange.CONTENT_TYPE,"application/json");
                inMessage.setHeader(Exchange.HTTP_METHOD,"POST");
                inMessage.setHeader(Exchange.HTTP_QUERY,"clientId=" + ClientId);
                inMessage.setBody(request);
                inMessage.setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS,SearchResponse.class);
                inMessage.setHeader(Exchange.CONTENT_TYPE,"application/json");
            }
        });
SearchResponse searchResponse = (SearchResponse) exchange.getout().getBody();

解决方法

getOut()创建空白输出消息。您需要使用getIn()getMessage()

SearchResponse searchResponse = (SearchResponse) exchange.getIn().getBody();

https://camel.apache.org/manual/latest/faq/using-getin-or-getout-methods-on-exchange.html#UsinggetInorgetOutmethodsonExchange-UsinggetInorgetOutmethodsonExchange