gpt4 book ai didi

java - 带有属性或参数的 Mule 自定义验证

转载 作者:行者123 更新时间:2023-11-29 04:32:23 26 4
gpt4 key购买 nike

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

<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 是一个 validator 类,并获取参数列表,因此它可以根据参数验证所有内容。

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

那么 mule 有这样的东西吗?

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

所以当我实现 Validator 接口(interface)时,我可以根据参数进行验证。

提前致谢

最佳答案

您必须使用 Spring bean 作为 validator 。所有可配置的属性都必须可以通过公共(public) 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>

然后像这样在你的 Mule 流程中使用它:

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

关于java - 带有属性或参数的 Mule 自定义验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43336905/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com