使用validate时处理Apache camel的PredicateValidationException

wgxvkvu9  于 11个月前  发布在  Apache
关注(0)|答案(1)|浏览(77)

我使用springboot camel-validator-starter来验证传入请求的查询参数。库抛出PredicateValidationException,状态码为500。我想处理这个异常的方式是它抛出一个适当的自定义异常。根据camel validate document,我可以创建一个PredicateExceptionFactorybean来处理异常。然而,如何创建这个bean还不清楚,也没有这样的例子。如果有人能帮我的话我会非常感激的。
下面是代码:

rest("/").description(description)
                .id(routeId)
                .get(endpoint)
                .produces(APPLICATION_JSON)
                .consumes(APPLICATION_JSON)
                .bindingMode(RestBindingMode.auto)
                .type(responseClazz)
                .enableCORS(true)
                .route()
                .onException(CustomValidationFailed.class)
                .handled(true)
                .setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpStatus.SC_BAD_REQUEST))
                .setBody(constant("offerId should be provided"))
                .end()
                .validate(header("offerId").isNotNull())
                .end()
                .endRest()
                .to(routeTechnicalId);

字符串
下面是抛出的异常:

org.apache.camel.support.processor.PredicateValidationException: Validation failed for Predicate[header(offerId) is not null]. Exchange[]
    at org.apache.camel.support.processor.PredicateValidatingProcessor.process(PredicateValidatingProcessor.java:70)
    at org.apache.camel.support.AsyncProcessorConverterHelper$ProcessorToAsyncProcessorBridge.process(AsyncProcessorConverterHelper.java:66)
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.doRun(RedeliveryErrorHandler.java:812)
    at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$RedeliveryTask.run(RedeliveryErrorHandler.java:720)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:187)
    at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:64)
    at org.apache.camel.processor.Pipeline.process(Pipeline.java:184)
    at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:399)
    at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:83)
    at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:41)
    at org.apache.camel.http.common.CamelServlet.doExecute(CamelServlet.java:319)
    at org.apache.camel.http.common.CamelServlet.doService(CamelServlet.java:214)
    at org.apache.camel.http.common.CamelServlet.service(CamelServlet.java:130)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:327)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:115)
    at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:81)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:122)
    at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:116)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:126)
    at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:81)
    at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:336)
    at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:109)

1cklez4t

1cklez4t1#

你在一个类中实现这个接口,然后根据你使用的运行时(spring Boot ,quarkus或其他东西),这个bean示例可以由这些运行时自动创建。如果没有,您需要手动将bean示例注册到ApacheCamel。

相关问题