Инициируемое завершение, а не исключение

Это вариант вопроса, который я задал в CXF-компоненте Camel, не обращающем внимания на ExException(Exception.class)

Я реализовал решение, предложенное Клаусом выше, но оно не работает. Я не понимаю, почему onCompletion запускается, когда я установил HandleFault = true на глобальном уровне.

Я изменил код много, следовательно, задавая тот же вопрос, но с несколькими изменениями.

Мой маршрут выглядит следующим образом: Маршрут 1(конечная точка camel-cxf) -> Маршрут 2(прямой) -> Маршрут 3(прямой). В маршруте 3 я выбрасываю исключение WebApplicationException(я снова оборачиваю это в MyWSException), которое является исключением времени выполнения.

Я установил для HandleFault значение true на уровне контекста.

getContext().setHandleFault(true);

Мой дескриптор onException на глобальном уровне выглядит так:

onException(Exception.class, MyWSException.class)
        .process(new Processor(){
            @Override
            public void process(Exchange exchange) throws Exception {
                System.out.println("In onException Exception and IServicesWSException");
            }
        })
        .to("direct:IServicesWSExceptionHandler");

У меня также есть локальный (Маршрут конкретного), который выглядит следующим образом.

from("cxf:bean:ordermanagementservice")
        .routeId("ordermanagementservice")
        .startupOrder(2)
        .onException(Throwable.class)
            .handled(true)
            .setBody().simple(PROCESS_RESULT_FAILED)
            .process(new Processor(){
                @Override
                public void process(Exchange exchange) throws Exception {
                    exchange.getIn().setHeader(AuditConstants.AUDIT_MAP_KEY.getValue(), AuditParam.AUDIT_ATTR_STATUS_ORDER);
                }
            })
            .beanRef("AuditManager", "audit")
            .to("direct:IServicesWSExceptionHandler")
            .end()

Мой onCompletion(конкретный маршрут) выглядит следующим образом.

.onCompletion()
            .setBody().simple(PROCESS_RESULT_SUCCESS)
            .process(new Processor(){
                @Override
                public void process(Exchange exchange) throws Exception {
                    exchange.getIn().setHeader(AuditConstants.AUDIT_MAP_KEY.getValue(), AuditParam.AUDIT_ATTR_STATUS_ORDER);
                }
            })
            .beanRef("AuditManager", "audit")
            .end()

Пожалуйста помоги. Я прошу прощения, если вопрос кажется повторением. Очень отчаянно

Заранее спасибо.

0 ответов

Другие вопросы по тегам