Я очень плохо знаком с верблюдом. Я хочу вытащить некоторый XML-файл из местоположения sftp и передать содержимое в существующую конечную точку REST. Ниже приведена моя конфигурация:
<route id="xml.FOEBRE">
<from uri="<sftp server uri>"/>
<marshal>
<string/>
</marshal>
<setHeader headerName="Content-Type">
<constant>application/xml</constant>
</setHeader>
<doTry>
<to uri="<REST URI>?httpMethod=POST"/>
<bean ref="myListener" method="onPushSuccess"/>
<doCatch>
<exception>java.lang.Exception</exception>
<!--<log message="error : ${exception.message}" loggingLevel="ERROR"/>-->
<process ref="globalExceptionListener"/>
</doCatch>
</doTry>
</route>
Я могу позвонить, но я хочу зафиксировать состояние ответа и тело вызова REST. В моем процессоре успеха я написал:
Message message = exchange.getIn();
int status = message.getHeader(Exchange.HTTP_RESPONSE_CODE, Integer.class);
LOG.debug("Response status : {}", status);
LOG.debug("Payload successfully sent to securecargo");
String body = message.getBody(String.class);
LOG.debug("Response Body : {}", body);
Этот код возвращает мне правильное тело ответа. Но тот же код (в обработчике catch) не работает, когда код состояния равен 400. У меня два вопроса:
- Как перехватить это тело ответа, когда код состояния равен 400? Мой процессор в блоке catch никогда не вызывается.
- Почему я получаю это тело в exchange.getIn (), а не в exchange.getOut ()?
Примечание: моя служба REST возвращаетсядва состояния, 201 для успеха и 400 для неудачи. Я знаю, что мой сервис возвращает полезную нагрузку JSON как в случае успеха, так и в случае сбоя.