繁体   English   中英

Java,M子-在一个Validation组件上引发不同类型的异常

[英]Java, Mule - Throw different types of exceptions on one Validation component

在我设计的流程中,我具有一个Validation组件,该组件带有一个自定义验证器,该验证器引用实现DataValidator Validator接口的类DataValidator DataValidator ,我验证了几个属性,并希望为每个属性抛出不同种类的异常(可能是我创建的自定义异常)。 这可能吗?

我的理解是,通过指定exceptionClass ,Validation组件将仅抛出该类的异常。

可以选择使用ExceptionFactory而不是exceptionClass 使用它是否会引发几种类型的异常? 如果可以,该如何使用? 我检查了博客文章,但对它的理解不够。

如果这一切都不可能,我有什么办法可以在自定义验证器组件中获取ValidationResult消息,以便可以在消息中使用它?

是的,您可以抛出几种类型的异常。 如前所述,您必须实现DataValidatorExceptionFactory接口,并配置您的组件以使用它们。

在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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM