2017-04-11 131 views
0

我們正試圖遷移現有的代碼騾子,以完成所有的驗證騾子自定義驗證,我們需要自定義驗證更強大的支持以下內容:財產或參數

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

所以,當我實現Validator接口,我可以做基於參數的驗證。

在此先感謝

回答

2

您必須使用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"/>