ВАЖНО onException shareUnitOfWork Apache Camel - PullRequest
0 голосов
/ 19 июня 2020

Я не могу использовать единицу работы при использовании onException. Мне действительно нужно использовать многоадресную рассылку и сплиттер. Я пробовал до сих пор, например useOriginalMessage et c, но не смог.

   onException(Exception.class)
            .handled(Boolean.TRUE)
            .process(XXX)
            .marshal()
            .jacksonxml()
            .convertBodyTo(String.class)
            .removeHeader(XXXX)
            .end();



   from(RouteDefinition.XXX)
            .id("XXX")
            .unmarshal().jacksonxml(XXX.class)
            .to("bean-validator://x")
            .setHeader(XXXS, constant(XXX.class))
            .setProperty(ApplicationParam.REQUEST_BODY, body())
            .bean(xxxx, "XXX")
            .setHeader(Exchange.HTTP_METHOD, constant(HttpMethod.POST))
            .setHeader(Exchange.CONTENT_TYPE, constant(MediaType.APPLICATION_JSON))
            .setHeader(CxfConstants.CAMEL_CXF_RS_RESPONSE_CLASS, constant(XXX.class))
            .to(restUri(jaxrsEndpoint, uri))
            .removeHeader(Header.HEADER_LIST)
            .bean(xxxx, "responseBeanXX")
            .marshal().jacksonxml(); 

Поток процесса; Apache CXF -> JAXRS-> Исключение -> OnException -> Процессор -> Тело ответа

Ответы [ 2 ]

0 голосов
/ 29 июня 2020
   DefaultErrorHandlerBuilder defaultErrorHandlerBuilder = new DefaultErrorHandlerBuilder();
    defaultErrorHandlerBuilder.setOnExceptionOccurred(new Processor() {
        @Override
        public void process(Exchange exchange) throws Exception {
            CustomUnitOfFactory customUnitOfFactory = new CustomUnitOfFactory ();
            customUnitOfFactory .afterPropertiesConfigured(camelContext);
            customUnitOfFactory .createUnitOfWork(exchange);
        }
    });
    errorHandler(defaultErrorHandlerBuilder);

@ burki Я решил проблему указанным выше кодом.

0 голосов
/ 22 июня 2020

Если вы просто хотите использовать MD C вход в Camel , вы можете активировать его с помощью camelContext.setUseMDCLogging(true);

Я не знаю, поддерживается ли это еще в Camel 3 .x, поскольку связанная страница документации больше не существует в официальных документах Camel.

Если вы хотите использовать UnitOfWork в своих Camel Routes, посетите эту страницу

...