ВАЖНО onException shareUnitOfWork Apache Camel
Я не могу использовать единицу работы при использовании onException. Мне действительно нужно использовать многоадресную рассылку и сплиттер. Я пробовал до сих пор, например, useOriginalMessage и т. Д., Не смог.
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 ответа
Если вы просто хотите использовать ведение журнала MDC в Camel, вы можете активировать его с помощью camelContext.setUseMDCLogging(true);
Я не знаю, поддерживается ли это в Camel 3.x, так как связанная страница документации больше не существует в официальных документах Camel.
Если вы хотите использовать UnitOfWork в своих Camel Routes, посетите эту страницу
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 Я решил проблему с кодом, который выше.