使用属性或参数进行骡子自定义验证



我们正在尝试将现有代码迁移到Mule,为了完成所有验证,我们需要自定义验证器更强大以支持以下内容:

<RULE>
    <ID crosssite="Y" stoponerr="Y">CheckAmount</ID>
    <MSG>Err_CheckAmount</MSG>
    <PARAM name="isIndex"></PARAM>
    <PARAM name="ccyIdField"></PARAM>
    <PARAM name="ccyListField"></PARAM>
    <PARAM name="ccyField">HKD</PARAM>
</RULE>

其中 CheckAmount 是一个验证器类,并获取参数列表,因此它可以基于参数验证所有内容。

我注意到这个问题在多年前已经在下面的评论中提出过。https://www.mulesoft.org/jira/browse/MULE-6087

那么骡子有这样的东西吗?

<validation:all doc:name="Validate min">
        <validation:validations>
            <validation:custom-validator class="test.CheckVal" message="Err_CheckValue">
                **<validation:param name="CITY">HK</validation:param>
                <validation:param name="MIN">20</validation:param>
                <validation:param name="MAX">50</validation:param>**
            </validation:custom-validator>
            <validation:is-false expression=""/>
        </validation:validations>
</validation:all>

因此,当我实现验证器接口时,我可以根据参数进行验证。

提前致谢

你必须使用Spring bean作为验证器。所有可配置的属性都必须可以通过公共 get/set 方法访问(在此示例中为属性 min 和 max(。

示例 Java 类:

package de.codecentric;
import org.mule.api.MuleEvent;
import org.mule.extension.validation.api.ValidationResult;
import org.mule.extension.validation.api.Validator;
import org.mule.extension.validation.internal.ImmutableValidationResult;
public class CustomValidator implements Validator {
    private int min;
    private int max;
    public int getMin() {
        return min;
    }
    public void setMin(int min) {
        this.min = min;
    }
    public int getMax() {
        return max;
    }
    public void setMax(int max) {
        this.max = max;
    }
    @Override
    public ValidationResult validate(MuleEvent event) {
        Object payload = event.getMessage().getPayload();
        if (!(payload instanceof Number)) {
            return ImmutableValidationResult.error("Not a number: " +     payload);
        }
        Number number = (Number) payload;
        if (number.intValue() > max) {
            return ImmutableValidationResult.error("Too big: " + number);
        }
        if (number.intValue() < min) {
            return ImmutableValidationResult.error("Too small: " + number);
        }
        return ImmutableValidationResult.ok();
    }
}

然后必须从这里创建一个实例作为 Spring bean:

<spring:beans>
    <spring:bean id="MyValidator" class="de.codecentric.CustomValidator">
        <spring:property name="min" value="10" />
        <spring:property name="max" value="20" />
    </spring:bean>
</spring:beans>

并在您的骡子流中使用它,如下所示:

<validation:custom-validator doc:name="Validation" ref="MyValidator"/>

最新更新