You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by mu...@apache.org on 2009/03/30 22:02:32 UTC

svn commit: r760136 - in /struts/sandbox/trunk/struts2-oval-plugin/src: main/java/org/apache/struts2/interceptor/ test/java/org/apache/struts2/interceptor/ test/resources/ test/resources/org/apache/struts2/interceptor/

Author: musachy
Date: Mon Mar 30 20:02:31 2009
New Revision: 760136

URL: http://svn.apache.org/viewvc?rev=760136&view=rev
Log:
Add more tests. Improve field name extraction from OVal message

Added:
    struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/SimpleFieldsXMLChild.java
    struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/ValidationInMethods.java
    struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/aa.java
    struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXMLChild-validation.xml
Modified:
    struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/DefaultOValValidationManager.java
    struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/OValValidationInterceptor.java
    struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/OValValidationInterceptorTest.java
    struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldI18n.properties
    struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXML-validation.xml
    struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/oval-test.xml

Modified: struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/DefaultOValValidationManager.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/DefaultOValValidationManager.java?rev=760136&r1=760135&r2=760136&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/DefaultOValValidationManager.java (original)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/DefaultOValValidationManager.java Mon Mar 30 20:02:31 2009
@@ -19,9 +19,9 @@
 public class DefaultOValValidationManager implements OValValidationManager {
     private static final Logger LOG = LoggerFactory.getLogger(DefaultOValValidationManager.class);
 
-    private static final String VALIDATION_CONFIG_SUFFIX = "-validation.xml";
-    private final Map<String, List<Configurer>> validatorCache = new HashMap<String, List<Configurer>>();
-    private final Map<String, Configurer> validatorFileCache = new HashMap<String, Configurer>();
+    protected static final String VALIDATION_CONFIG_SUFFIX = "-validation.xml";
+    protected final Map<String, List<Configurer>> validatorCache = new HashMap<String, List<Configurer>>();
+    protected final Map<String, Configurer> validatorFileCache = new HashMap<String, Configurer>();
 
     public synchronized List<Configurer> getConfigurers(Class clazz, String context) {
         final String validatorKey = buildValidatorKey(clazz, context);

Modified: struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/OValValidationInterceptor.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/OValValidationInterceptor.java?rev=760136&r1=760135&r2=760136&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/OValValidationInterceptor.java (original)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/main/java/org/apache/struts2/interceptor/OValValidationInterceptor.java Mon Mar 30 20:02:31 2009
@@ -42,6 +42,7 @@
 
 import java.util.List;
 import java.lang.reflect.Method;
+import java.lang.reflect.Field;
 
 import org.apache.struts2.validation.Profiles;
 import org.apache.commons.lang.xwork.StringUtils;
@@ -89,7 +90,7 @@
         ActionProxy proxy = invocation.getProxy();
         ValueStack valueStack = invocation.getStack();
         String methodName = proxy.getMethod();
-        String context = proxy.getActionName();
+        String context = proxy.getConfig().getName();
 
         if (LOG.isDebugEnabled()) {
             LOG.debug("Validating [#0/#1] with method [#2]", invocation.getProxy().getNamespace(), invocation.getProxy().getActionName(), methodName);
@@ -167,7 +168,7 @@
                 String key = violation.getMessage();
 
                 //push the validator into the stack
-                valueStack.push(violation);
+                valueStack.push(violation.getContext());
                 String message = key;
                 try {
                     message = validatorContext.getText(key);
@@ -178,10 +179,8 @@
                 if (isActionError(violation))
                     validatorContext.addActionError(message);
                 else {
-                    String className = clazz.getName();
-                    //the default OVal message shows the field name as ActionClass.fieldName
-                    message = StringUtils.removeStart(message, className + ".");
-                    validatorContext.addFieldError(extractFieldName(violation), message);
+                    ValidationError validationError = buildValidationError(violation, message);
+                    validatorContext.addFieldError(validationError.getFieldName(), validationError.getMessage());
                 }
             }
         }
@@ -189,24 +188,41 @@
 
 
     /**
-     * Get field name, used to add the validation error to fieldErrors
+     * Get field name and message, used to add the validation error to fieldErrors
      */
-    protected String extractFieldName(ConstraintViolation violation) {
+    protected ValidationError buildValidationError(ConstraintViolation violation, String message) {
         OValContext context = violation.getContext();
         if (context instanceof FieldContext) {
-            return ((FieldContext) context).getField().getName();
+            Field field = ((FieldContext) context).getField();
+            String className = field.getDeclaringClass().getName();
+
+            //the default OVal message shows the field name as ActionClass.fieldName
+            String finalMessage = StringUtils.removeStart(message, className + ".");
+
+            return new ValidationError(field.getName(), finalMessage);
         } else if (context instanceof MethodReturnValueContext) {
-            String methodName = ((MethodReturnValueContext) context).getMethod().getName();
+            Method method = ((MethodReturnValueContext) context).getMethod();
+            String className = method.getDeclaringClass().getName();
+            String methodName = method.getName();
+
+            //the default OVal message shows the field name as ActionClass.fieldName
+            String finalMessage = StringUtils.removeStart(message, className + ".");
+
+            String fieldName = null;
             if (methodName.startsWith("get")) {
-                return StringUtils.uncapitalize(StringUtils.removeStart(methodName, "get"));
+                fieldName = StringUtils.uncapitalize(StringUtils.removeStart(methodName, "get"));
             } else if (methodName.startsWith("is")) {
-                return StringUtils.uncapitalize(StringUtils.removeStart(methodName, "is"));
+                fieldName = StringUtils.uncapitalize(StringUtils.removeStart(methodName, "is"));
             }
 
-            return methodName;
+            //the result will have the full method name, like "getName()", replace it by "name" (obnly if it is a field)
+            if (fieldName != null)
+                finalMessage = finalMessage.replaceAll(methodName + "\\(.*?\\)", fieldName);
+
+            return new ValidationError(StringUtils.defaultString(fieldName, methodName), finalMessage);
         }
 
-        return violation.getCheckName();
+        return new ValidationError(violation.getCheckName(), message);
     }
 
     /**
@@ -215,4 +231,22 @@
     protected boolean isActionError(ConstraintViolation violation) {
         return false;
     }
+
+    class ValidationError {
+        private String fieldName;
+        private String message;
+
+        ValidationError(String fieldName, String message) {
+            this.fieldName = fieldName;
+            this.message = message;
+        }
+
+        public String getFieldName() {
+            return fieldName;
+        }
+
+        public String getMessage() {
+            return message;
+        }
+    }
 }

Modified: struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/OValValidationInterceptorTest.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/OValValidationInterceptorTest.java?rev=760136&r1=760135&r2=760136&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/OValValidationInterceptorTest.java (original)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/OValValidationInterceptorTest.java Mon Mar 30 20:02:31 2009
@@ -43,16 +43,52 @@
         assertValue(fieldErrors, "lastName", Arrays.asList("lastName cannot be null"));
     }
 
+    public void testValidationInMethods() throws Exception {
+        ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "validationInMethods", null, null);
+        baseActionProxy.execute();
+
+        Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
+        assertNotNull(fieldErrors);
+        assertEquals(4, fieldErrors.size());
+        assertValue(fieldErrors, "name", Arrays.asList("name cannot be null"));
+        assertValue(fieldErrors, "SisyphusHasTheAnswer", Arrays.asList("SisyphusHasTheAnswer() cannot be null"));
+        assertValue(fieldErrors, "thereAnyMeaningInLife", Arrays.asList("thereAnyMeaningInLife cannot be null"));
+        assertValue(fieldErrors, "theManingOfLife", Arrays.asList("theManingOfLife cannot be null"));
+    }
+
+    public void testSimpleFieldsInheritedXML() throws Exception {
+        ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsXMLChild", null, null);
+        baseActionProxy.execute();
+
+        Map<String, List<String>> fieldErrors = ((ValidationAware) baseActionProxy.getAction()).getFieldErrors();
+        assertNotNull(fieldErrors);
+        assertEquals(3, fieldErrors.size());
+        assertValue(fieldErrors, "firstName", Arrays.asList("firstName cannot be null"));
+        assertValue(fieldErrors, "lastName", Arrays.asList("lastName cannot be null"));
+        assertValue(fieldErrors, "middleName", Arrays.asList("middleName cannot be null"));
+    }
+
+    public void testSlashesInNameWithWildcardsHitsCache() throws Exception {
+        ActionProxy baseActionProxy = actionProxyFactory.createActionProxy("oval", "simpleFieldsXML/test", null, null);
+        baseActionProxy.execute();
+               
+        ActionProxy baseActionProxy2 = actionProxyFactory.createActionProxy("oval", "simpleFieldsXML/test2", null, null);
+        baseActionProxy2.execute();
+
+        DummyDefaultOValValidationManager manager = (DummyDefaultOValValidationManager) container.getInstance(OValValidationManager.class);
+        assertEquals(1, manager.getCache().size());
+    }
+
     public void testXMLLoadCaching() {
         OValValidationManager manager = container.getInstance(OValValidationManager.class);
-        List<Configurer> configurers = manager.getConfigurers(SimpleFieldsXML.class, "simpleFieldsXML");
+        List<Configurer> configurers = manager.getConfigurers(SimpleFieldsXML.class, "simpleFieldsXMLCaching");
         assertNotNull(configurers);
-        assertEquals(1, configurers.size());
+        assertEquals(2, configurers.size());
 
         //load again and check it is the same instance
-        List<Configurer> configurers2 = manager.getConfigurers(SimpleFieldsXML.class, "simpleFieldsXML");
+        List<Configurer> configurers2 = manager.getConfigurers(SimpleFieldsXML.class, "simpleFieldsXMLCaching");
         assertNotNull(configurers2);
-        assertEquals(1, configurers2.size());
+        assertEquals(2, configurers2.size());
         assertSame(configurers.get(0), configurers2.get(0));
     }
 
@@ -210,7 +246,6 @@
         assertEquals(expectedValues, values);
     }
 
-
     @Override
     protected void setUp() throws Exception {
         super.setUp();

Added: struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/SimpleFieldsXMLChild.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/SimpleFieldsXMLChild.java?rev=760136&view=auto
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/SimpleFieldsXMLChild.java (added)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/SimpleFieldsXMLChild.java Mon Mar 30 20:02:31 2009
@@ -0,0 +1,33 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.interceptor;
+
+public class SimpleFieldsXMLChild extends SimpleFieldsXML {
+    private String middleName;
+
+    public String getMiddleName() {
+        return middleName;
+    }
+
+    public void setMiddleName(String middleName) {
+        this.middleName = middleName;
+    }
+}

Added: struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/ValidationInMethods.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/ValidationInMethods.java?rev=760136&view=auto
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/ValidationInMethods.java (added)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/ValidationInMethods.java Mon Mar 30 20:02:31 2009
@@ -0,0 +1,52 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.interceptor;
+
+import com.opensymphony.xwork2.ActionSupport;
+import net.sf.oval.constraint.NotNull;
+import net.sf.oval.configuration.annotation.IsInvariant;
+
+public class ValidationInMethods extends ActionSupport {
+    @IsInvariant
+    @NotNull
+    public String getName() {
+        return null;
+    }
+
+    @IsInvariant
+    @NotNull
+    public Boolean isThereAnyMeaningInLife() {
+        return null;
+    }
+
+    @IsInvariant 
+    @NotNull
+    public String getTheManingOfLife() {
+        return null;
+    }
+
+    @IsInvariant
+    @NotNull
+    public String SisyphusHasTheAnswer() {
+        //some method annotated, whose name is not a field
+        return null;
+    }
+}
\ No newline at end of file

Added: struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/aa.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/aa.java?rev=760136&view=auto
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/aa.java (added)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/test/java/org/apache/struts2/interceptor/aa.java Mon Mar 30 20:02:31 2009
@@ -0,0 +1,33 @@
+/*
+ * $Id$
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.struts2.interceptor;
+
+import net.sf.oval.configuration.Configurer;
+
+import java.util.List;
+import java.util.Map;
+
+//just to expose the cache
+class DummyDefaultOValValidationManager extends DefaultOValValidationManager {
+    public Map<String, List<Configurer>> getCache() {
+        return validatorCache;
+    }
+}

Modified: struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldI18n.properties
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldI18n.properties?rev=760136&r1=760135&r2=760136&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldI18n.properties (original)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldI18n.properties Mon Mar 30 20:02:31 2009
@@ -1 +1 @@
-notnull.field=${context.field.name} cannot be null
\ No newline at end of file
+notnull.field=${field.name} cannot be null
\ No newline at end of file

Modified: struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXML-validation.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXML-validation.xml?rev=760136&r1=760135&r2=760136&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXML-validation.xml (original)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXML-validation.xml Mon Mar 30 20:02:31 2009
@@ -1,9 +1,4 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<!--
-<!DOCTYPE oval PUBLIC
-   "-//OVal/OVal Configuration DTD 1.3//EN"
-   "http://oval.sourceforge.net/oval-configuration-1.3.dtd">
--->
 <oval xmlns="http://oval.sf.net/oval-configuration" xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://oval.sf.net/oval-configuration http://oval.sourceforge.net/oval-configuration-1.3.xsd">
     <class type="org.apache.struts2.interceptor.SimpleFieldsXML" overwrite="false"

Added: struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXMLChild-validation.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXMLChild-validation.xml?rev=760136&view=auto
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXMLChild-validation.xml (added)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/org/apache/struts2/interceptor/SimpleFieldsXMLChild-validation.xml Mon Mar 30 20:02:31 2009
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<oval xmlns="http://oval.sf.net/oval-configuration" xmlns:xsi="http://http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://oval.sf.net/oval-configuration http://oval.sourceforge.net/oval-configuration-1.3.xsd">
+    <class type="org.apache.struts2.interceptor.SimpleFieldsXMLChild" overwrite="false"
+           applyFieldConstraintsToSetters="true">
+        <field name="middleName">
+            <notNull/>
+        </field>
+    </class>
+</oval>
\ No newline at end of file

Modified: struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/oval-test.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/oval-test.xml?rev=760136&r1=760135&r2=760136&view=diff
==============================================================================
--- struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/oval-test.xml (original)
+++ struts/sandbox/trunk/struts2-oval-plugin/src/test/resources/oval-test.xml Mon Mar 30 20:02:31 2009
@@ -4,7 +4,8 @@
         >
 
 <xwork>
-    <bean type="org.apache.struts2.interceptor.OValValidationManager" class="org.apache.struts2.interceptor.DefaultOValValidationManager" />
+    <bean type="org.apache.struts2.interceptor.OValValidationManager" class="org.apache.struts2.interceptor.DummyDefaultOValValidationManager"/>
+    <constant name="struts.enable.SlashesInActionNames" value="true"/>
     <package namespace="oval" name="oval-test">
         <result-types>
             <result-type name="void" class="org.apache.struts2.interceptor.VoidResult"/>
@@ -13,10 +14,26 @@
             <interceptor name="ovalValidation" class="org.apache.struts2.interceptor.OValValidationInterceptor"/>
         </interceptors>
 
+        <action name="simpleFieldsXMLChild" class="org.apache.struts2.interceptor.SimpleFieldsXMLChild">
+            <interceptor-ref name="ovalValidation"/>
+            <result type="void"></result>
+        </action>
+        <action name="validationInMethods" class="org.apache.struts2.interceptor.ValidationInMethods">
+            <interceptor-ref name="ovalValidation"/>
+            <result type="void"></result>
+        </action>
+        <action name="simpleFieldsXML/*" class="org.apache.struts2.interceptor.SimpleFieldsXML">
+            <interceptor-ref name="ovalValidation"/>
+            <result type="void"></result>
+        </action>
         <action name="simpleFieldsXML" class="org.apache.struts2.interceptor.SimpleFieldsXML">
             <interceptor-ref name="ovalValidation"/>
             <result type="void"></result>
         </action>
+        <action name="simpleFieldsXMLCaching" class="org.apache.struts2.interceptor.SimpleFieldsXML">
+            <interceptor-ref name="ovalValidation"/>
+            <result type="void"></result>
+        </action>
         <action name="simpleField" class="org.apache.struts2.interceptor.SimpleField">
             <interceptor-ref name="ovalValidation"/>
             <result type="void"></result>