[英]Java Printing out exceptions thrown and no exceptions throw in different places
[英]Java, Mule - Throw different types of exceptions on one Validation component
在我设计的流程中,我具有一个Validation组件,该组件带有一个自定义验证器,该验证器引用实现DataValidator
Validator接口的类DataValidator
。 在DataValidator
,我验证了几个属性,并希望为每个属性抛出不同种类的异常(可能是我创建的自定义异常)。 这可能吗?
我的理解是,通过指定exceptionClass
,Validation组件将仅抛出该类的异常。
可以选择使用ExceptionFactory而不是exceptionClass
。 使用它是否会引发几种类型的异常? 如果可以,该如何使用? 我检查了此博客文章,但对它的理解不够。
如果这一切都不可能,我有什么办法可以在自定义验证器组件中获取ValidationResult消息,以便可以在消息中使用它?
是的,您可以抛出几种类型的异常。 如前所述,您必须实现DataValidator
和ExceptionFactory
接口,并配置您的组件以使用它们。
在Studio中,选择“使用例外工厂配置”,然后指定要使用的完整类名。 使用XML,指定您在validation-config
实现的exception-factory
。 (您还可以配置Spring Bean并引用它):
<validation:config name="Validation_Configuration" doc:name="Validation Configuration">
<validation:exception-factory class="com.mycomp.validation.MyExceptionFactory"/>
</validation:config>
在您的流程中,配置一个custom-validator
并使用异常工厂,验证器实现以及您要通过exceptionClass
引发的exceptionClass
类型引用您的配置。 为了能够抛出任何类型的Exception,请指定java.lang.Exception
或要从中使用的自定义异常可以继承的类:
<flow name="validation-exceptionFlow">
...
<validation:custom-validator
config-ref="Validation_Configuration"
class="com.mycomp.validation.MyValidator"
exceptionClass="java.lang.Exception"
doc:name="Validation" />
...
</flow>
根据您的需要,您可能希望以不同的方式指定exceptionClass
,即您的实际异常应该扩展它。
然后由您自己决定ExceptionFactory
实现。 您可以返回任何想要的异常...例如:
public class MyExceptionFactory implements ExceptionFactory{
@Override
public <T extends Exception> T createException(ValidationResult result, Class<T> exceptionClass, MuleEvent event) {
return (T) createException(result, exceptionClass.getCanonicalName(), event);
}
@Override
public Exception createException(ValidationResult result, String exceptionClassName, MuleEvent event) {
//...
//some logic to identify which kind of exception you want to throw
//from result and event
//...
if(something) {
return new SomeException("Something happened");
} else if (somethingElse) {
return new AnotherException("I am en error...");
} else {
return new BananaException("Ook");
}
}
}
看来接口有两种方法,一种返回泛型,另一种返回普通Exception
。 我不知道您的ExceptionFactory
的具体用法,我将无法提供很多指导,但是请注意,Mule可以调用这些方法中的任何一种,并且文档提供了一些要求 :
上面的接口接收被验证和引发错误的验证器拒绝的事件。 此方法旨在返回要抛出的异常,但不抛出该异常。 此接口的实现不应抛出异常。 它们还应该是线程安全的,并具有公共默认构造函数。 也可以看看
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.