public class RestRouter extends RouteBuilder
{
@Override
public void configure() throws Exception
{
rest("/sample")
.post()
.route()
.routeId("postSample")
.to("direct:validate")
.to("direct:save")
.endRest();
}
}
public class CustomRouter extends RouteBuilder
{
@Override
public void configure() throws Exception
{
onException(ValidationException.class)
.handled(true)
.setBody(simple("${exchangeProperty[CamelExceptionCaught]}"))
.to("bean:exceptionHandler?method=constraintViolationHandler")
.setHeader(Exchange.CONTENT_TYPE, constant(ErrorResponse.class.getName()))
.setHeader(Exchange.HTTP_RESPONSE_CODE, constant(HttpStatus.SC_BAD_REQUEST));
validator()
.type(Sample.class)
.withBean("sampleValidator");
from("direct:validate")
.to("bean-validator://x"); // Runs javax/Hibernate annotated validations
from("direct:save")
.routeId("saveSample")
.inputTypeWithValidate(Sample.class)
.to("bean:sampleRepository?method=save");
}
}
安装程序的问题是,Camel没有为validationexception
调用我的自定义异常处理程序。路由SaveSample发生验证异常。下面是我的发现,它是如何进一步深入骆驼处理器类型的。
>
RedeliveryErrorHandler的handleException()
中,在那里查找异常策略。失败exchange的根(即RestRouter
->postSample)在此应定义异常处理程序。unitofwork
(即saveSample)以标识异常处理程序。这意味着,在下面的表达式中,routeId来自CustomRouter,而exceptionPolicy来自RestRouter。组合不存在,Camel无法找到异常处理器。
处理器=ExceptionPolicy.getErrorHandler(routeId)
在上述背景下,我有以下几个问题
RouterBuilder
类型中划分一个功能是一个好的做法吗?UnitOfWork
来解决异常策略吗?RouteBuilder
类型,Camel是否可以调用我的自定义处理程序?编辑我不能移动到只有一个RouterBuilder
。
transformer
来完成到JPA实体的转换。这种安排不适合Camel调用验证器
的方式(请参见contractadvice
)。ContractAdvice是一个CamelInternalProcessorAdvice
,它应用Transformer
(如果intype!=outtype)和Validator
。RouterBuilder
将需要我将Avro-to-Entity逻辑转移到骆驼Transformer
中,而这种方法将与我们当前所做的方式有很大不同。但是,可以使用单个RouterBuilder+Transformer+Validator。让我们看看这个来自Camel In Action的示例,它演示了如何在Java DSL中定义的路由构建器之间重用错误处理。
BaseRouteBuilder和InboxRouteBuilder和OrderRouteBuilder
您可以创建一个基类来设置上下文范围的错误配置,然后您的RouteBuilder类扩展这个基类并调用calling Super.Configure以获得公共配置。
我的申请中有如下路线- 从("sftp: config").到("file: config") 我必须在生成endpoint时处理那些超出apache camel默认异常处理边界的异常。例如。编写文件时可能会出现异常。我如何处理那个异常? 在camel文档中,我了解到,对于文件消费者,他们提供了不同的选项,比如-consumer。errorHandler和consumer。bridgeErrorH
问题内容: 这是处理生成器中引发的异常的后续操作,并讨论了一个更一般的问题。 我有一个功能,可以读取不同格式的数据。所有格式都是面向行或记录的,每种格式都有一个专用的解析功能,可以作为生成器来实现。因此,主读取函数获得一个输入和一个生成器,该生成器从输入中读取其各自的格式并将记录传递回主函数: 哪里是这样的: 我面临的问题是,尽管可能引发异常(例如,从流中读取时),但它不知道如何处理它。负责处理异
问题内容: 尝试添加pdf文件生成时,我看到奇怪的行为。 在if语句上,以下代码将引发:both \ routes.js 错误:只能在方法调用中调用Meteor.userId。在发布函数中使用this.userId。在[对象Object] .Router处的Object.Meteor.user(packages / accounts-base / accounts_server.js:24:1)处
但没能完成。如果有某种方法可以在camel路由构建器级别获得netty服务器异常?请建议 谢谢
问题内容: 假设我有一个抛出某种Exception的方法。引发异常的代码位于访问外部服务的第三方库中。我有一些课程可以很好地处理外部服务,并且有很多异常处理程序可以处理潜在的问题。我遇到的问题是我可能有很多异常,但是如果有一个动作,并且可能有大量尝试/捕获块,我可能只需要执行几个动作之一。异常的类型甚至可能不相关,或者不同的方法可能会抛出相同类型的异常,但是根据抛出该异常的方法,需要采取不同的操作
我正在尝试使用angular与主播合作,我已经做了我的研究,但没有成功,所以我正在联系你们。 我有 3 个组件 {导航栏组件, 红色组件, 蓝色组件} 导航栏组件有 2 个锚点。我希望当我单击其中一个时,它实际上会将我引导到正确的组件 导航栏组件.ts 红色. component.ts blue.component.ts app.component.html 应用程序模块