SFTP для отдыха с использованием Camel - PullRequest
0 голосов
/ 31 октября 2019

Я очень плохо знаком с верблюдом. Я хочу вытащить некоторый 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 как в случае успеха, так и в случае сбоя.

Ответы [ 2 ]

0 голосов
/ 04 ноября 2019

Наконец-то я получил ответ

  • Мой процессор вызывался, но обнаружил NPE при исключении тела процессора, и это исключение было внутренне использовано верблюдом
  • Во время исключения,всю информацию, связанную с исключениями, можно получить из самого объекта исключения, а не из In / Out

Ниже приведен код моего обработчика исключений (процессора),

HttpOperationFailedException cause = exchange.getProperty(Exchange.EXCEPTION_CAUGHT, HttpOperationFailedException.class);
LOG.error(cause.getMessage());
final String responseBody = cause.getResponseBody();
LOG.error(responseBody);
0 голосов
/ 31 октября 2019

Вместо этого вы получите код ответа из заголовков внутри метода getIn(). При возникновении любой проблемы (я имею в виду ошибки HTTP-вызова), отличной от ожидаемого ответа, будет сгенерировано исключение и установлено в свойствах обмена (Exchange.EXCEPTION_CAUGHT).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...