-2

使用 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 -> 处理器 -> 响应正文

4

2 回答 2

0

如果您只想在 Camel 中使用 MDC 登录,您可以使用 camelContext.setUseMDCLogging(true);

我不知道 Camel 3.x 是否仍然支持这一点,因为官方 Camel 文档中不再存在链接的文档页面。

如果您想在骆驼路线中使用 UnitOfWork,请查看此页面

于 2020-06-22T05:48:05.530 回答
0
   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 我用上面的代码解决了这个问题。

于 2020-06-29T05:59:55.243 回答