Наличие доступа ко всему мылу: телу, когда сервисный вызов возвращает мыло: ошибка - PullRequest
0 голосов
/ 10 сентября 2018

Я строю маршрут, который отправляет запрос SOAP веб-службе. Для этого я написал этот код.

.doTry()
    .inOut(getEndpointDocumentWS())
    .log("Response WHEN OKAY: ${body}")
    .process(Document_WS_REPLY_PROCESSOR)
.endDoTry()
.doCatch(Exception.class)
    .log(LoggingLevel.INFO, "SOAP REPLY WITH FAULTMESSAGE")
    .log("Response ON ERROR FAULT: ${body}")
    .process(Document_WS_REPLY_ERROR_PROCESSOR)
.end();

Все идет по плану, когда ответ службы «в порядке». В противном случае, когда ответ службы - это soap: Fault, у меня не будет доступа ко всем ответам (я использую soapUI для насмешки soap: Fault response).

Я могу получить крошечную долю сообщения soap: fault, получив свойство EXCEPTION_CAUGHT. Инструкция

.log("Response ON ERROR FAULT: ${body}")

Нет данных вообще.

Что я могу сделать по-другому, чтобы иметь доступ ко всем, а не только к строке ошибок?

Исключение исключение = exchange.getProperty (Exchange.EXCEPTION_CAUGHT, Exception.class);

1 Ответ

0 голосов
/ 10 сентября 2018

Согласно этому ответу, CXF-компонент Camel не перехватывает onException (Exception.class) :

OnException Camel только срабатывает, если есть исключение. МЫЛО Ошибка представляется как Сообщение с флагом ошибки = true.

Что вы можете сделать, это установить handleFault = true в CamelContext, а затем превратит сообщения об ошибках SOAP в исключение, которое onException может реагировать на.

Если вы не настроили handleFault=true, то странно, что ваш обработчик исключений вообще работает. Может случиться так, что возникает какое-то другое исключение, а не искомая ошибка, которая вызывает запуск обработчика исключения.

Если вы уже настроили handleFault=true, у меня нет никаких советов, кроме как проверить объекты данных в отладчике, чтобы узнать, сможете ли вы узнать, что происходит. (Если вы не знаете, для этого вы можете добавить Processor в обработчик исключений и вставить точку останова в Processor. Точки останова не работают в определении маршрута, потому что определения маршрута выполняются только при инициализации .)

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