Для 400 неверных запросов в cxfrs:rsclient в camel обмен равен нулю. Для http-статуса 200 устанавливается объект exchange

#apache-camel #httpresponse #jbossfuse #bad-request #cxfrs

#apache-camel #httpresponse #jbossfuse #неверный запрос #cxfrs

Вопрос:

Ниже приведен фрагмент кода для использования конечной точки api. Для 200 http-ответов объект exchange содержит полученную полезную нагрузку. Но для ответа 400 полученная полезная нагрузка не задана в объекте exchange. Чего-нибудь не хватает в приведенном ниже коде?

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

Ответ №1:

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

Комментарии:

1. Спасибо! Но ..exchange.getIn().getBody() выдает отправляемое тело запроса, а не тело ответа. Для 200 ответов exchange.getOut().getBody() имеет тело ответа, но не для 400

2. в таком случае, не могли бы вы зарегистрировать все свойства и заголовки для обмена out и проверить, что зарегистрировано для ответа 400?