You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2009/05/12 16:07:15 UTC

svn commit: r773905 - in /myfaces/extensions/validator/branches/beanval_integration/trunk: component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/ component-support/trinidad-support/src/main/java/o...

Author: gpetracek
Date: Tue May 12 14:07:14 2009
New Revision: 773905

URL: http://svn.apache.org/viewvc?rev=773905&view=rev
Log:
sync with trunk

Modified:
    myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadRendererInterceptor.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadValidationExceptionInterceptor.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/util/TrinidadUtils.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ExtValELResolver.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/FaceletsTaglibExpressionHelper.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/configuration/StaticConfigurationNames.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/MetaDataEntry.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidationStrategy.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/internal/ToDo.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/HtmlCoreComponentsValidationExceptionInterceptor.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/ValidationInterceptorWithSkipValidationSupport.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/DateIs.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java
    myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadRendererInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadRendererInterceptor.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadRendererInterceptor.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadRendererInterceptor.java Tue May 12 14:07:14 2009
@@ -26,7 +26,6 @@
 import org.apache.myfaces.extensions.validator.core.metadata.extractor.MetaDataExtractor;
 import org.apache.myfaces.extensions.validator.core.factory.FactoryNames;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
-import org.apache.myfaces.extensions.validator.core.CustomInformation;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
 import org.apache.myfaces.extensions.validator.util.ReflectionUtils;
@@ -39,8 +38,6 @@
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.List;
-import java.lang.annotation.Annotation;
 
 /**
  * @author Gerhard Petracek
@@ -110,7 +107,7 @@
                 }
 
                 if(Boolean.TRUE.equals(skipInitialization) && !metaData.isEmpty() &&
-                        isSkipableValidationStrategy(validationStrategy.getClass()))
+                        ExtValUtils.isSkipableValidationStrategy(validationStrategy.getClass()))
                 {
                     metaData.put(CommonMetaDataKeys.SKIP_VALIDATION, true);
                 }
@@ -133,38 +130,4 @@
 
         return !(isReadOnly || isDisabled);
     }
-    
-    @SuppressWarnings({"unchecked"})
-    private boolean isSkipableValidationStrategy(Class<? extends ValidationStrategy> validationStrategyClass)
-    {
-        String key = ExtValContext.getContext().getInformationProviderBean()
-                .get(CustomInformation.BASE_PACKAGE) + CommonMetaDataKeys.SKIP_VALIDATION.toUpperCase();
-        List<Class<? extends Annotation>> markerList =
-                (List<Class<? extends Annotation>>)ExtValContext.getContext().getGlobalProperty(key);
-
-        if(markerList == null)
-        {
-            return false;
-        }
-
-        for(Class<? extends Annotation> currentClass : markerList)
-        {
-            if(currentClass.isAnnotation())
-            {
-                if(validationStrategyClass.isAnnotationPresent(currentClass))
-                {
-                    return true;
-                }
-            }
-            else
-            {
-                if(currentClass.isAssignableFrom(validationStrategyClass))
-                {
-                    return true;
-                }
-            }
-        }
-
-        return false;
-    }
 }

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadValidationExceptionInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadValidationExceptionInterceptor.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadValidationExceptionInterceptor.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/interceptor/TrinidadValidationExceptionInterceptor.java Tue May 12 14:07:14 2009
@@ -24,6 +24,7 @@
 import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
 import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.validation.message.LabeledMessage;
 import org.apache.myfaces.extensions.validator.util.ReflectionUtils;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
 import org.apache.myfaces.trinidad.context.RequestContext;
@@ -70,9 +71,17 @@
                 label = metaDataEntry.getProperty(PropertyInformationKeys.LABEL, String.class);
             }
 
-            for(int i = 0; i < 3; i++)
+            if(facesMessage instanceof LabeledMessage)
             {
-                ExtValUtils.tryToPlaceLabel(facesMessage, label, i);
+                ((LabeledMessage)facesMessage).setLabelText(label);
+            }
+            //if someone uses a normal faces message
+            else
+            {
+                for(int i = 0; i < 3; i++)
+                {
+                    ExtValUtils.tryToPlaceLabel(facesMessage, label, i);
+                }
             }
         }
         return true;

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/startup/TrinidadModuleStartupListener.java Tue May 12 14:07:14 2009
@@ -25,11 +25,10 @@
 import org.apache.myfaces.extensions.validator.core.factory.FactoryNames;
 import org.apache.myfaces.extensions.validator.trinidad.initializer.component.TrinidadComponentInitializer;
 import org.apache.myfaces.extensions.validator.trinidad.WebXmlParameter;
+import org.apache.myfaces.extensions.validator.trinidad.validation.message.TrinidadFacesMessageFactory;
 import org.apache.myfaces.extensions.validator.trinidad.renderkit.ExtValTrinidadRendererProxy;
 import org.apache.myfaces.extensions.validator.trinidad.interceptor.TrinidadValidationExceptionInterceptor;
 import org.apache.myfaces.extensions.validator.trinidad.interceptor.TrinidadRendererInterceptor;
-import org.apache.myfaces.extensions.validator.internal.Priority;
-import org.apache.myfaces.extensions.validator.internal.ToDo;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 
@@ -42,7 +41,6 @@
 @UsageInformation(UsageCategory.INTERNAL)
 public class TrinidadModuleStartupListener extends AbstractStartupListener
 {
-    @ToDo(value = Priority.MEDIUM, description = "web.xml parameter to deactivate it")
     protected void init()
     {
         initTrinidadSupport();
@@ -81,6 +79,10 @@
         ExtValContext.getContext()
                 .addGlobalProperty(ExtValRendererProxy.KEY, ExtValTrinidadRendererProxy.class.getName());
 
+        ExtValContext.getContext()
+                .addGlobalProperty(
+                        FactoryNames.FACES_MESSAGE_FACTORY.name(),
+                        TrinidadFacesMessageFactory.class.getName());
         /*
          * if there are further incompatible renderers use the following quick-fix:
          *         ExtValContext.getContext()

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/util/TrinidadUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/util/TrinidadUtils.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/util/TrinidadUtils.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/component-support/trinidad-support/src/main/java/org/apache/myfaces/extensions/validator/trinidad/util/TrinidadUtils.java Tue May 12 14:07:14 2009
@@ -43,6 +43,11 @@
     public static UIComponent findLabeledEditableComponent(CoreOutputLabel coreOutputLabel)
     {
         //TODO
+        if(coreOutputLabel.getFor() == null)
+        {
+            return null;
+        }
+
         FacesContext facesContext = FacesContext.getCurrentInstance();
         UIComponent result = facesContext.getViewRoot().findComponent(coreOutputLabel.getFor());
 

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/CustomInformation.java Tue May 12 14:07:14 2009
@@ -48,6 +48,7 @@
     VALIDATION_STRATEGY_FACTORY,
     COMPONENT_META_DATA_EXTRACTOR_FACTORY,
     META_DATA_TRANSFORMER_FACTORY,
+    FACES_MESSAGE_FACTORY,
 
     MESSAGE_BUNDLE_NAME,
     STATIC_STRATEGY_MAPPING_SOURCE

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/InformationProviderBean.java Tue May 12 14:07:14 2009
@@ -111,6 +111,8 @@
                 "ComponentMetaDataExtractorFactory");
         customizableInfos.put(CustomInformation.META_DATA_TRANSFORMER_FACTORY,
                 "MetaDataTransformerFactory");
+        customizableInfos.put(CustomInformation.FACES_MESSAGE_FACTORY,
+                "FacesMessageFactory");
 
         //conventions (the rest of the conventions are built with the help of name mappers,...
         customizableInfos.put(CustomInformation.MESSAGE_BUNDLE_NAME,

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/WebXmlParameter.java Tue May 12 14:07:14 2009
@@ -85,6 +85,9 @@
     static final String CUSTOM_META_DATA_TRANSFORMER_FACTORY = WebXmlUtils
         .getInitParameter("CUSTOM_META_DATA_TRANSFORMER_FACTORY");
 
+    static final String CUSTOM_FACES_MESSAGE_FACTORY = WebXmlUtils
+        .getInitParameter("CUSTOM_FACES_MESSAGE_FACTORY");
+
     /*
      * deactivate
      */

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/DefaultELHelper.java Tue May 12 14:07:14 2009
@@ -20,7 +20,10 @@
 
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
+import org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+import org.apache.myfaces.extensions.validator.util.ReflectionUtils;
 import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
 import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
 import org.apache.myfaces.extensions.validator.ExtValInformation;
@@ -33,6 +36,8 @@
 import javax.faces.context.FacesContext;
 import javax.faces.el.ValueBinding;
 import java.io.Externalizable;
+import java.lang.reflect.Method;
+import java.util.Map;
 
 /**
  * in order to centralize the jsf version dependency within the core
@@ -178,7 +183,7 @@
                 " -- an el-resolver error occurred! maybe you used an invalid binding. otherwise: " +
                 "please report the issue, deactivate the el-resovler of extval via web.xml context-param: " +
                 ExtValInformation.WEBXML_PARAM_PREFIX + ".DEACTIVATE_EL_RESOLVER" +
-                " and test again.");
+                " and test again.", t);
         }
 
         if(elResolver.getPath() == null || elResolver.getBaseObject() == null || elResolver.getProperty() == null)
@@ -189,28 +194,25 @@
         return new PropertyDetails(elResolver.getPath(), elResolver.getBaseObject(), elResolver.getProperty());
     }
 
+    //keep in sync with DefaultELHelper#getPropertyDetailsOfValueBinding of branch!!!
     private PropertyDetails getPropertyDetailsViaReflectionFallback(UIComponent uiComponent)
     {
+        FacesContext facesContext = FacesContext.getCurrentInstance();
         ValueBindingExpression valueBindingExpression = getValueBindingExpression(uiComponent, false);
-
-        if(valueBindingExpression == null)
-        {
-            return null;
-        }
-
         ValueBindingExpression currentValueBindingExpression =
             new ValueBindingExpression(valueBindingExpression.getExpressionString());
+
         String path = null;
 
         while(currentValueBindingExpression.getBaseExpression() != null)
         {
             if(path == null)
             {
-                path = currentValueBindingExpression.getProperty();
+                path = getPropertyName(currentValueBindingExpression);
             }
             else
             {
-                path = currentValueBindingExpression.getProperty() + "." + path;
+                path = getPropertyName(currentValueBindingExpression) + "." + path;
             }
 
             currentValueBindingExpression = currentValueBindingExpression.getBaseExpression();
@@ -218,9 +220,67 @@
 
         path = currentValueBindingExpression.getProperty() + "." + path;
 
-        Object baseObject = getValueOfExpression(
-                FacesContext.getCurrentInstance(), valueBindingExpression.getBaseExpression());
-        return new PropertyDetails(path, baseObject, valueBindingExpression.getProperty());
+        Object baseObject = getValueOfExpression(facesContext, valueBindingExpression.getBaseExpression());
+
+        //in case of e.g.: #{bean[bean.passwordRepeatedPropertyName]}
+        //-> bean.passwordRepeatedPropertyName is not the final property name
+        return new PropertyDetails(path, baseObject, getPropertyName(valueBindingExpression));
+    }
+
+    private String getPropertyName(ValueBindingExpression valueBindingExpression)
+    {
+        String propertyName = valueBindingExpression.getProperty();
+
+        if(propertyName.contains("."))
+        {
+            propertyName = extractPropertyNameOfPropertyPath(propertyName);
+        }
+
+        return propertyName;
+    }
+
+    @ToDo(value = Priority.MEDIUM, description = "support for more dynamic bindings - details see inline")
+    private String extractPropertyNameOfPropertyPath(String propertyChain)
+    {
+        String[] properties = propertyChain.split("\\.");
+
+        Object currentPropertyValue = ExtValUtils.getELHelper().getBean(properties[0]);
+
+        Method currentMethod;
+        String currentPropertyName;
+        for(int i = 1; i < properties.length; i++)
+        {
+            currentPropertyName = properties[i];
+            currentMethod = ReflectionUtils.tryToGetMethod(currentPropertyValue.getClass(),
+                "get" + currentPropertyName.substring(0, 1).toUpperCase() + currentPropertyName.substring(1));
+
+            if(currentMethod == null && currentPropertyValue instanceof Map)
+            {
+                //it's ok for the simple map case - but not for e.g.:
+                //#{bean1[bean2.propertyNameProvider[ bean3.index]]}
+                //or every other complex replacement for bean3.index
+                //it might also require an adjustment at FaceletsTaglibExpressionHelper#tryToTransformToRealBinding
+                ((Map)currentPropertyValue).get(currentPropertyName);
+            }
+            else
+            {
+                currentPropertyValue = ReflectionUtils.tryToInvokeMethod(currentPropertyValue, currentMethod);
+            }
+        }
+
+        if(currentPropertyValue instanceof String)
+        {
+            return (String)currentPropertyValue;
+        }
+        else
+        {
+            if(this.logger.isErrorEnabled())
+            {
+                this.logger.error("unexpected value within map syntax: " + propertyChain +
+                        " last property name: " + currentPropertyValue);
+            }
+            return null;
+        }
     }
 
     static String getOriginalValueBindingExpression(UIComponent uiComponent)

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ExtValELResolver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ExtValELResolver.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ExtValELResolver.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ExtValELResolver.java Tue May 12 14:07:14 2009
@@ -18,12 +18,16 @@
  */
 package org.apache.myfaces.extensions.validator.core.el;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
 import javax.el.ELResolver;
 import javax.el.ELContext;
 import javax.el.VariableMapper;
 import javax.el.FunctionMapper;
 import java.util.Iterator;
 import java.util.Locale;
+import java.util.Map;
 import java.beans.FeatureDescriptor;
 
 /**
@@ -32,11 +36,14 @@
  */
 public class ExtValELResolver extends ELResolver
 {
+    protected final Log logger = LogFactory.getLog(getClass());
+
     private ELResolver wrapped;
     private Object baseObject;
     private String property;
     //forms the id for cross-validation within complex components
     private String expression;
+    private boolean isPathRecordingStopped = false;
 
     public ExtValELResolver(ELResolver elResolver)
     {
@@ -55,7 +62,11 @@
 
     public String getPath()
     {
-        return expression;
+        if(this.logger.isTraceEnabled())
+        {
+            this.logger.trace("extracted path: " + this.expression);
+        }
+        return this.expression;
     }
 
     public void reset()
@@ -65,17 +76,94 @@
         this.expression = null;
     }
 
+    /**
+     * path recording is performed to get a key for cross-validation<br/>
+     * every base after the first call which is null stops recording<br/>
+     * with a dynamic map syntax the last property in the middle of an expression has to be a string.
+     * such a string result continues the path recording at the next call for the current expression.
+     * <p/>
+     * example: #{bean[bean.propertyNameProvider['nameOfProperty1']]['dynBean'].property}
+     * <p/>
+     * limitation for cross-validation: nameOfProperty1 has to be of type string.
+     * other key types aren't supported yet
+     *
+     * @param elContext wrapped el-context
+     * @param base current base
+     * @param property property to resolve
+     * @return result of the delegated method call
+     */
     public Object getValue(ELContext elContext, Object base, Object property)
     {
+        Object result = this.wrapped.getValue(elContext, base, property);
+
+        //very first call for an expression
         if(this.expression == null)
         {
             this.expression = (String)property;
         }
+        //#{bean[dynBase.propertyName]} -> base of dynBase is null -> stop path recording
+        else if(base == null)
+        {
+            this.isPathRecordingStopped = true;
+        }
         else
         {
+            boolean propertyExists = false;
+            String propertyName = (String)property;
+            propertyName = propertyName.substring(0, 1).toUpperCase() + propertyName.substring(1);
+
+            try
+            {
+                if(base instanceof Map)
+                {
+                    if(((Map)base).containsKey(property))
+                    {
+                        propertyExists = true;
+                    }
+                }
+                else if(base.getClass().getMethod("get" + propertyName) != null)
+                {
+                    propertyExists = true;
+                }
+            }
+            catch (NoSuchMethodException e)
+            {
+                try
+                {
+                    if(base.getClass().getMethod("is" + propertyName) != null)
+                    {
+                        propertyExists = true;
+                    }
+                }
+                catch (NoSuchMethodException e1)
+                {
+                    if(this.logger.isTraceEnabled())
+                    {
+                        this.logger.trace("property: " + property +
+                                " isn't used for path - it isn't a property of " + base.getClass());
+                    }
+                }
+            }
+
+            //e.g.: #{bean.subBase.property} -> here we are at subBase
+            if(propertyExists && !this.isPathRecordingStopped)
+            {
+                this.expression += "." + property;
+            }
+            else if(propertyExists && result instanceof String)
+            {
+                this.isPathRecordingStopped = false;
+            }
+        }
+
+        /*
+        if(this.isPathRecordingStopped && result instanceof String)
+        {
             this.expression += "." + property;
         }
-        return wrapped.getValue(elContext, base, property);
+        */
+
+        return result;
     }
 
     public Class<?> getType(ELContext elContext, Object o, Object o1)

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/FaceletsTaglibExpressionHelper.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/FaceletsTaglibExpressionHelper.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/FaceletsTaglibExpressionHelper.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/FaceletsTaglibExpressionHelper.java Tue May 12 14:07:14 2009
@@ -135,10 +135,11 @@
         String originalBinding = addedVirtualNames.get("value");
         originalBinding = originalBinding.substring(originalBinding.indexOf("{") + 1, originalBinding.indexOf("}"));
         addedVirtualNames.remove("value");
-        return tryToTransformToRealBinding(originalBinding, addedVirtualNames);
+        return tryToTransformToRealBinding(originalBinding, addedVirtualNames, virtualVars);
     }
 
-    private static String tryToTransformToRealBinding(String originalBinding, Map<String, String> addedVirtualNames)
+    private static String tryToTransformToRealBinding(
+            String originalBinding, Map<String, String> addedVirtualNames, Map<String, String> virtualVars)
     {
         originalBinding = "#{" + originalBinding + "}";
         Iterator nameIterator = addedVirtualNames.keySet().iterator();
@@ -148,12 +149,44 @@
         while(nameIterator.hasNext())
         {
             currentKey = (String) nameIterator.next();
-            currentValue = addedVirtualNames.get(currentKey);
 
+            currentValue = addedVirtualNames.get(currentKey);
             currentValue = currentValue.substring(currentValue.indexOf("{") + 1, currentValue.indexOf("}"));
+
             originalBinding = originalBinding.replace("{" + currentKey + ".", "{" + currentValue + ".");
+            //dynamic base and property
+            originalBinding = originalBinding.replace("{" + currentKey + "[", "{" + currentValue + "[");
+
             originalBinding = originalBinding.replace("." + currentKey + ".", "." + currentValue + ".");
-            originalBinding = originalBinding.replace("[" + currentKey + "]", "[" + currentValue + "]");
+            //dynamic base and property
+            originalBinding = originalBinding.replace("." + currentKey + "[", "." + currentValue + "[");
+
+            originalBinding = originalBinding.replace("[" + currentKey + "]", "['" + currentValue + "']");
+            //dynamic base and property
+            originalBinding = originalBinding.replace("[" + currentKey + "[", "[" + currentValue + "[");
+            originalBinding = originalBinding.replace("[" + currentKey + ".", "[" + currentValue + ".");
+        }
+
+        nameIterator = virtualVars.keySet().iterator();
+
+        while(nameIterator.hasNext())
+        {
+            currentKey = (String) nameIterator.next();
+
+            currentValue = virtualVars.get(currentKey);
+
+            originalBinding = originalBinding.replace("{" + currentKey + ".", "{" + currentValue + ".");
+            //dynamic base and property
+            originalBinding = originalBinding.replace("{" + currentKey + "[", "{" + currentValue + "[");
+
+            originalBinding = originalBinding.replace("." + currentKey + ".", "." + currentValue + ".");
+            //dynamic base and property
+            originalBinding = originalBinding.replace("." + currentKey + "[", "." + currentValue + "[");
+
+            originalBinding = originalBinding.replace("[" + currentKey + "]", "['" + currentValue + "']");
+            //dynamic base and property
+            originalBinding = originalBinding.replace("[" + currentKey + "[", "[" + currentValue + "[");
+            originalBinding = originalBinding.replace("[" + currentKey + ".", "[" + currentValue + ".");
         }
 
         return originalBinding.substring(2, originalBinding.length() - 1);
@@ -510,4 +543,4 @@
         return result;
     }
     */
-}
\ No newline at end of file
+}

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/el/ValueBindingExpression.java Tue May 12 14:07:14 2009
@@ -53,6 +53,7 @@
     public static ValueBindingExpression replaceProperty(ValueBindingExpression valueBindingExpression,
                                                          String newProperty)
     {
+        //TODO adjustments for isDynamicBaseAndProperty
         if(valueBindingExpression.getProperty().endsWith("']"))
         {
             valueBindingExpression = valueBindingExpression.getBaseExpression();
@@ -73,6 +74,7 @@
         String sourceExpression = valueBindingExpression.getExpressionString();
         String result = sourceExpression.substring(0, sourceExpression.length() - 1);
 
+        //TODO adjustments for isDynamicBaseAndProperty
         if(newProperty.startsWith("['"))
         {
             return new ValueBindingExpression(result + newProperty + "}");
@@ -90,7 +92,8 @@
             throw new IllegalStateException(expression + " is no valid el-expression");
         }
 
-        int index1 = expression.lastIndexOf("']");
+        boolean isDynamicBaseAndProperty = expression.lastIndexOf("']") == -1;
+        int index1 = isDynamicBaseAndProperty ? expression.lastIndexOf("]") : expression.lastIndexOf("']");
         int index2 = expression.lastIndexOf(".");
 
         if(index1 > index2)
@@ -98,9 +101,18 @@
             expression = expression.substring(0, index1);
 
             int index3 = findIndexOfStartingBracket(expression);
-            this.value = expression.substring(index3 + 2, index1);
+            if(isDynamicBaseAndProperty)
+            {
+                this.value = expression.substring(index3 + 1, index1);
+
+            }
+            else
+            {
+                this.value = expression.substring(index3 + 2, index1);
+            }
+
             this.base = new ValueBindingExpression(expression.substring(0, index3) + "}");
-            this.token = "['";
+            this.token = isDynamicBaseAndProperty ? "[" : "['";
         }
         else if( index2 > index1)
         {
@@ -125,7 +137,7 @@
             {
                 return this.value.substring(1, this.value.length() - 1);
             }
-            return this.base.value + this.token + this.value.substring(0, this.value.length()) + "']";
+            //return this.base.value + this.token + this.value.substring(0, this.value.length()) + "']";
         }
         return value;
     }
@@ -145,6 +157,10 @@
             {
                 return baseExpression.substring(0, baseExpression.length() - 1) + this.token + this.value + "']}";
             }
+            else if("[".equals(this.token))
+            {
+                return baseExpression.substring(0, baseExpression.length() - 1) + this.token + this.value + "]}";
+            }
             return baseExpression.substring(0, baseExpression.length() - 1) + this.token + this.value + "}";
         }
         else

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/DefaultFactoryFinder.java Tue May 12 14:07:14 2009
@@ -20,6 +20,8 @@
 
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.myfaces.extensions.validator.internal.ToDo;
+import org.apache.myfaces.extensions.validator.internal.Priority;
 import org.apache.myfaces.extensions.validator.core.metadata.extractor.DefaultComponentMetaDataExtractorFactory;
 import org.apache.myfaces.extensions.validator.core.WebXmlParameter;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
@@ -29,6 +31,7 @@
 import org.apache.myfaces.extensions.validator.core.metadata.transformer.DefaultMetaDataTransformerFactory;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.DefaultValidationStrategyFactory;
 import org.apache.myfaces.extensions.validator.core.validation.message.resolver.DefaultMessageResolverFactory;
+import org.apache.myfaces.extensions.validator.core.validation.message.DefaultFacesMessageFactory;
 import org.apache.myfaces.extensions.validator.util.ClassUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
@@ -103,6 +106,11 @@
             case EL_HELPER_FACTORY:
                 factory = createELHelperFactory();
                 break;
+
+            case FACES_MESSAGE_FACTORY:
+                factory = createFacesMessageFactory();
+                break;
+
             default: //required by checkstyle
         }
 
@@ -114,6 +122,7 @@
         factoryMap.put(factoryName, factory);
     }
 
+    @ToDo(value = Priority.MEDIUM, description = "add global property extension point")
     protected Object createComponentMetaDataExtractorFactory()
     {
         Object factory = null;
@@ -138,6 +147,7 @@
         return factory;
     }
 
+    @ToDo(value = Priority.MEDIUM, description = "add global property extension point")
     protected Object createValidationStrategyFactory()
     {
         Object factory = null;
@@ -163,6 +173,7 @@
         return factory;
     }
 
+    @ToDo(value = Priority.MEDIUM, description = "add global property extension point")
     protected Object createMessageResolverFactory()
     {
         Object factory = null;
@@ -188,6 +199,7 @@
         return factory;
     }
 
+    @ToDo(value = Priority.MEDIUM, description = "add global property extension point")
     protected Object createMetaDataTransformerFactory()
     {
         Object factory = null;
@@ -217,6 +229,37 @@
         return new DefaultRenderKitWrapperFactory();
     }
 
+    private Object createFacesMessageFactory()
+    {
+        Object factory = null;
+
+        List<String> facesMessageFactoryClassNames = new ArrayList<String>();
+
+        facesMessageFactoryClassNames.add(WebXmlParameter.CUSTOM_FACES_MESSAGE_FACTORY);
+        facesMessageFactoryClassNames
+            .add(ExtValContext.getContext().getInformationProviderBean()
+                    .get(CustomInformation.FACES_MESSAGE_FACTORY));
+
+        Object target = ExtValContext.getContext().getGlobalProperty(CustomInformation.FACES_MESSAGE_FACTORY.name());
+        if(target != null && target instanceof String)
+        {
+            facesMessageFactoryClassNames.add((String)target);
+        }
+        facesMessageFactoryClassNames.add(DefaultFacesMessageFactory.class.getName());
+
+        for (String className : facesMessageFactoryClassNames)
+        {
+            factory = ClassUtils.tryToInstantiateClassForName(className);
+
+            if (factory != null)
+            {
+                break;
+            }
+        }
+
+        return factory;
+    }
+
     private Object createELHelperFactory()
     {
         return new DefaultELHelperFactory();

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/factory/FactoryNames.java Tue May 12 14:07:14 2009
@@ -33,6 +33,8 @@
     MESSAGE_RESOLVER_FACTORY,
     META_DATA_TRANSFORMER_FACTORY,
 
+    FACES_MESSAGE_FACTORY,
+
     RENDERKIT_WRAPPER_FACTORY,
     EL_HELPER_FACTORY
 }

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/configuration/StaticConfigurationNames.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/configuration/StaticConfigurationNames.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/configuration/StaticConfigurationNames.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/initializer/configuration/StaticConfigurationNames.java Tue May 12 14:07:14 2009
@@ -30,5 +30,7 @@
 {
     META_DATA_TO_VALIDATION_STRATEGY_CONFIG,
     VALIDATION_STRATEGY_TO_MESSAGE_RESOLVER_CONFIG,
-    VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_CONFIG
+    VALIDATION_STRATEGY_TO_META_DATA_TRANSFORMER_CONFIG,
+
+    SKIP_VALIDATION_SUPPORT_CONFIG
 }
\ No newline at end of file

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/interceptor/ValidationInterceptor.java Tue May 12 14:07:14 2009
@@ -176,6 +176,9 @@
             {
                 if(skipValidation(facesContext, uiComponent, validationStrategy, entry))
                 {
+                    //required is a special case - reset it
+                    ((EditableValueHolder)uiComponent).setRequired(false);
+
                     continue;
                 }
 

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/MetaDataEntry.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/MetaDataEntry.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/MetaDataEntry.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/MetaDataEntry.java Tue May 12 14:07:14 2009
@@ -20,6 +20,8 @@
 
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import java.util.Map;
 import java.util.HashMap;
@@ -33,6 +35,8 @@
 @UsageInformation(UsageCategory.API)
 public class MetaDataEntry
 {
+    protected final Log logger = LogFactory.getLog(getClass());
+
     private String key;
     private Object value;
     private Map<String, Object> properties = new HashMap<String, Object>();
@@ -44,6 +48,11 @@
 
     public void setKey(String key)
     {
+        if(this.logger.isTraceEnabled())
+        {
+            this.logger.trace("setting meta-data key: " + key);
+        }
+
         this.key = key;
     }
 
@@ -59,12 +68,12 @@
 
     public void setValue(Object value)
     {
-        this.value = value;
-    }
+        if(this.logger.isTraceEnabled())
+        {
+            this.logger.trace("setting meta-data value: " + value);
+        }
 
-    public Map<String, Object> getProperties()
-    {
-        return properties;
+        this.value = value;
     }
 
     public void setProperties(Map<String, Object> properties)
@@ -84,6 +93,11 @@
 
     public void setProperty(String key, Object value)
     {
+        if(this.logger.isTraceEnabled())
+        {
+            this.logger.trace("new property added key: " + key + " value: " + value + " for metadata-key: " + this.key);
+        }
+
         this.properties.put(key, value);
     }
 }

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/metadata/extractor/DefaultComponentMetaDataExtractor.java Tue May 12 14:07:14 2009
@@ -107,19 +107,9 @@
             addPropertyAccessAnnotations(currentClass, propertyDetails.getProperty(), propertyInformation);
             addFieldAccessAnnotations(currentClass, propertyDetails.getProperty(), propertyInformation);
 
-            currentClass = currentClass.getSuperclass();
-        }
-
-        for (Class currentInterface : entityClass.getInterfaces())
-        {
-            currentClass = currentInterface;
+            processInterfaces(currentClass, propertyDetails, propertyInformation);
 
-            while (currentClass != null)
-            {
-                addPropertyAccessAnnotations(currentClass, propertyDetails.getProperty(), propertyInformation);
-
-                currentClass = currentClass.getSuperclass();
-            }
+            currentClass = currentClass.getSuperclass();
         }
 
         if(logger.isTraceEnabled())
@@ -130,6 +120,17 @@
         return propertyInformation;
     }
 
+    private void processInterfaces(
+            Class currentClass, PropertyDetails propertyDetails, PropertyInformation propertyInformation)
+    {
+        for (Class currentInterface : currentClass.getInterfaces())
+        {
+            addPropertyAccessAnnotations(currentInterface, propertyDetails.getProperty(), propertyInformation);
+
+            processInterfaces(currentInterface, propertyDetails, propertyInformation);
+        }
+    }
+
     protected void addPropertyAccessAnnotations(Class entity, String property,
                                                 PropertyInformation propertyInformation)
     {

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/renderkit/ExtValRendererProxy.java Tue May 12 14:07:14 2009
@@ -63,7 +63,16 @@
         if (!entry.isDecodeCalled())
         {
             entry.setDecodeCalled(true);
-            wrapped.decode(facesContext, uiComponent);
+
+            try
+            {
+                this.wrapped.decode(facesContext, uiComponent);
+            }
+            catch (RuntimeException r)
+            {
+                resetComponentProxyMapping();
+                throw r;
+            }
         }
         else
         {
@@ -83,7 +92,20 @@
         if (!entry.isEncodeBeginCalled())
         {
             entry.setEncodeBeginCalled(true);
-            wrapped.encodeBegin(facesContext, uiComponent);
+            try
+            {
+                this.wrapped.encodeBegin(facesContext, uiComponent);
+            }
+            catch (IOException e)
+            {
+                resetComponentProxyMapping();
+                throw e;
+            }
+            catch (RuntimeException r)
+            {
+                resetComponentProxyMapping();
+                throw r;
+            }
         }
         else
         {
@@ -103,7 +125,21 @@
         if (!entry.isEncodeChildrenCalled())
         {
             entry.setEncodeChildrenCalled(true);
-            wrapped.encodeChildren(facesContext, uiComponent);
+
+            try
+            {
+                this.wrapped.encodeChildren(facesContext, uiComponent);
+            }
+            catch (IOException e)
+            {
+                resetComponentProxyMapping();
+                throw e;
+            }
+            catch (RuntimeException r)
+            {
+                resetComponentProxyMapping();
+                throw r;
+            }
         }
         else
         {
@@ -123,7 +159,21 @@
         if (!entry.isEncodeEndCalled())
         {
             entry.setEncodeEndCalled(true);
-            wrapped.encodeEnd(facesContext, uiComponent);
+
+            try
+            {
+                this.wrapped.encodeEnd(facesContext, uiComponent);
+            }
+            catch (IOException e)
+            {
+                resetComponentProxyMapping();
+                throw e;
+            }
+            catch (RuntimeException r)
+            {
+                resetComponentProxyMapping();
+                throw r;
+            }
         }
         else
         {
@@ -137,13 +187,29 @@
     @Override
     public String convertClientId(FacesContext facesContext, String s)
     {
-        return wrapped.convertClientId(facesContext, s);
+        try
+        {
+            return wrapped.convertClientId(facesContext, s);
+        }
+        catch (RuntimeException r)
+        {
+            resetComponentProxyMapping();
+            throw r;
+        }
     }
 
     @Override
     public boolean getRendersChildren()
     {
-        return wrapped.getRendersChildren();
+        try
+        {
+            return wrapped.getRendersChildren();
+        }
+        catch (RuntimeException t)
+        {
+            resetComponentProxyMapping();
+            throw t;
+        }
     }
 
     @Override
@@ -154,7 +220,15 @@
 
         if (entry.getConvertedValue() == null)
         {
-            entry.setConvertedValue(wrapped.getConvertedValue(facesContext, uiComponent, o));
+            try
+            {
+                entry.setConvertedValue(wrapped.getConvertedValue(facesContext, uiComponent, o));
+            }
+            catch (RuntimeException r)
+            {
+                resetComponentProxyMapping();
+                throw r;
+            }
         }
         else
         {
@@ -207,4 +281,10 @@
 
         return proxyStorage.get(key);
     }
+
+    private void resetComponentProxyMapping()
+    {
+        //reset component proxy mapping
+        FacesContext.getCurrentInstance().getExternalContext().getRequestMap().remove(PROXY_STORAGE_NAME);
+    }
 }

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractAnnotationValidationStrategy.java Tue May 12 14:07:14 2009
@@ -79,8 +79,7 @@
 
     protected FacesMessage getValidationErrorFacesMassage(Annotation annotation)
     {
-        return new FacesMessage(FacesMessage.SEVERITY_ERROR,
-            getErrorMessageSummary(annotation), getErrorMessageDetail(annotation));
+        return ExtValUtils.createFacesMessage(getErrorMessageSummary(annotation), getErrorMessageDetail(annotation));
     }
 
     protected abstract String getValidationErrorMsgKey(Annotation annotation);

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidationStrategy.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidationStrategy.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/core/validation/strategy/AbstractValidationStrategy.java Tue May 12 14:07:14 2009
@@ -87,7 +87,10 @@
                 logger.trace("start processAfterValidatorException of " + getClass().getName());
             }
 
-            if (processAfterValidatorException(facesContext, uiComponent, metaDataEntry, convertedObject, e))
+            ValidatorException validatorException = new ValidatorException(
+                    ExtValUtils.convertFacesMessage(e.getFacesMessage()), e.getCause());
+            if (processAfterValidatorException(
+                    facesContext, uiComponent, metaDataEntry, convertedObject, validatorException))
             {
                 if(logger.isTraceEnabled())
                 {
@@ -95,7 +98,7 @@
                         ": throw original exception after processAfterValidatorException");
                 }
 
-                throw e;
+                throw validatorException;
             }
 
             if(logger.isTraceEnabled())

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/internal/ToDo.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/internal/ToDo.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/internal/ToDo.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/internal/ToDo.java Tue May 12 14:07:14 2009
@@ -32,4 +32,10 @@
 {
     Priority value();
     String description() default "";
+
+    @Target({TYPE, METHOD, FIELD})
+    @interface List
+    {
+        ToDo[] value();
+    }
 }
\ No newline at end of file

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/core/src/main/java/org/apache/myfaces/extensions/validator/util/ExtValUtils.java Tue May 12 14:07:14 2009
@@ -36,10 +36,16 @@
 import org.apache.myfaces.extensions.validator.core.metadata.extractor.MetaDataExtractor;
 import org.apache.myfaces.extensions.validator.core.metadata.extractor.ComponentMetaDataExtractorFactory;
 import org.apache.myfaces.extensions.validator.core.initializer.component.ComponentInitializer;
+import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfigurationNames;
+import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfiguration;
+import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfigurationEntry;
 import org.apache.myfaces.extensions.validator.core.metadata.transformer.MetaDataTransformer;
 import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
 import org.apache.myfaces.extensions.validator.core.factory.FactoryNames;
 import org.apache.myfaces.extensions.validator.core.factory.NameMapperAwareFactory;
+import org.apache.myfaces.extensions.validator.core.factory.FacesMessageFactory;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 import javax.faces.component.UIComponent;
 import javax.faces.context.FacesContext;
@@ -47,7 +53,8 @@
 import javax.faces.application.FacesMessage;
 import java.util.Map;
 import java.util.MissingResourceException;
-
+import java.util.List;
+import java.util.ArrayList;
 
 /**
  * @author Gerhard Petracek
@@ -56,6 +63,8 @@
 @UsageInformation(UsageCategory.INTERNAL)
 public class ExtValUtils
 {
+    private static final Log LOGGER = LogFactory.getLog(ExtValUtils.class);
+
     private static final String JAVAX_FACES_REQUIRED = "javax.faces.component.UIInput.REQUIRED";
     private static final String JAVAX_FACES_REQUIRED_DETAIL = "javax.faces.component.UIInput.REQUIRED_detail";
 
@@ -228,6 +237,25 @@
             .getFactory(FactoryNames.EL_HELPER_FACTORY, AbstractELHelperFactory.class).create();
     }
 
+    public static FacesMessage createFacesMessage(String summary, String detail)
+    {
+        return createFacesMessage(FacesMessage.SEVERITY_ERROR, summary, detail);
+    }
+
+    public static FacesMessage createFacesMessage(FacesMessage.Severity severity, String summary, String detail)
+    {
+        return ExtValContext.getContext().getFactoryFinder()
+            .getFactory(FactoryNames.FACES_MESSAGE_FACTORY, FacesMessageFactory.class)
+                .create(severity, summary, detail);
+    }
+
+    public static FacesMessage convertFacesMessage(FacesMessage facesMessage)
+    {
+        return ExtValContext.getContext().getFactoryFinder()
+            .getFactory(FactoryNames.FACES_MESSAGE_FACTORY, FacesMessageFactory.class)
+                .convert(facesMessage);
+    }
+
     public static PropertyDetails createPropertyDetailsForNewTarget(MetaDataEntry metaDataEntry,
                                                                                   String targetExpression)
     {
@@ -319,4 +347,76 @@
         facesMessage.setSummary(facesRequiredMessage);
         facesMessage.setDetail(facesRequiredMessageDetail);
     }
+
+    public static boolean isSkipableValidationStrategy(Class<? extends ValidationStrategy> targetClass)
+    {
+        for(Class currentClass : ExtValUtils.getSkipValidationSupportClassList())
+        {
+            if(ExtValUtils.isSkipValidationSupported(currentClass, targetClass))
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
+
+    public static boolean processMetaDataEntryAfterSkipValidation(
+            Class<? extends ValidationStrategy> targetClass, MetaDataEntry entry)
+    {
+        return ExtValUtils.isSkipableValidationStrategy(targetClass) &&
+                Boolean.TRUE.equals(entry.getProperty(PropertyInformationKeys.SKIP_VALIDATION, Boolean.class));
+    }
+
+    public static List<Class> getSkipValidationSupportClassList()
+    {
+        List<StaticConfiguration<String, String>> staticConfigurationList = ExtValContext.getContext()
+                .getStaticConfiguration(StaticConfigurationNames.SKIP_VALIDATION_SUPPORT_CONFIG);
+
+        List<Class> markerList = new ArrayList<Class>();
+
+        Class currentClass;
+        for(StaticConfiguration<String, String> currentEntry : staticConfigurationList)
+        {
+            for(StaticConfigurationEntry<String, String> currentConfigurationEntry : currentEntry.getMapping())
+            {
+                currentClass = ClassUtils.tryToLoadClassForName(currentConfigurationEntry.getTarget());
+
+                if(currentClass != null)
+                {
+                    markerList.add(currentClass);
+                }
+                else
+                {
+                    if(LOGGER.isWarnEnabled())
+                    {
+                        LOGGER.warn("configuration entry provides an invalid entry: "
+                                + currentConfigurationEntry.getTarget());
+                    }
+                }
+            }
+        }
+
+        return markerList;
+    }
+
+    public static boolean isSkipValidationSupported(Class currentClass, Class targetClass)
+    {
+        if(currentClass.isAnnotation())
+        {
+            if(targetClass.isAnnotationPresent(currentClass))
+            {
+                return true;
+            }
+        }
+        else
+        {
+            if(currentClass.isAssignableFrom(targetClass))
+            {
+                return true;
+            }
+        }
+
+        return false;
+    }
 }

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/HtmlCoreComponentsValidationExceptionInterceptor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/HtmlCoreComponentsValidationExceptionInterceptor.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/HtmlCoreComponentsValidationExceptionInterceptor.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/HtmlCoreComponentsValidationExceptionInterceptor.java Tue May 12 14:07:14 2009
@@ -22,6 +22,7 @@
 import org.apache.myfaces.extensions.validator.core.interceptor.ValidationExceptionInterceptor;
 import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
+import org.apache.myfaces.extensions.validator.core.validation.message.LabeledMessage;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.util.ReflectionUtils;
@@ -57,7 +58,7 @@
     {
         if(processComponent(uiComponent))
         {
-            FacesMessage facesMessage = validatorException.getFacesMessage();
+            FacesMessage facesMessage = ExtValUtils.convertFacesMessage(validatorException.getFacesMessage());
 
             String label = (String) ReflectionUtils.tryToInvokeMethod(uiComponent,
                 ReflectionUtils.tryToGetMethod(uiComponent.getClass(), "getLabel"));
@@ -73,9 +74,17 @@
                 label = metaDataEntry.getProperty(PropertyInformationKeys.LABEL, String.class);
             }
 
-            for(int i = 0; i < 3; i++)
+            if(facesMessage instanceof LabeledMessage)
             {
-                ExtValUtils.tryToPlaceLabel(facesMessage, label, i);
+                ((LabeledMessage)facesMessage).setLabelText(label);
+            }
+            //if someone uses a normal faces message
+            else
+            {
+                for(int i = 0; i < 3; i++)
+                {
+                    ExtValUtils.tryToPlaceLabel(facesMessage, label, i);
+                }
             }
         }
         return true;

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/PropertyValidationModuleStartupListener.java Tue May 12 14:07:14 2009
@@ -22,21 +22,18 @@
 import org.apache.myfaces.extensions.validator.baseval.annotation.SkipValidationSupport;
 import org.apache.myfaces.extensions.validator.core.startup.AbstractStartupListener;
 import org.apache.myfaces.extensions.validator.core.ExtValContext;
-import org.apache.myfaces.extensions.validator.core.CustomInformation;
 import org.apache.myfaces.extensions.validator.core.metadata.CommonMetaDataKeys;
 import org.apache.myfaces.extensions.validator.core.interceptor.ValidationInterceptor;
 import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticResourceBundleConfiguration;
 import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfiguration;
 import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticConfigurationNames;
+import org.apache.myfaces.extensions.validator.core.initializer.configuration.StaticInMemoryConfiguration;
 import org.apache.myfaces.extensions.validator.internal.ToDo;
 import org.apache.myfaces.extensions.validator.internal.Priority;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 import org.apache.myfaces.extensions.validator.crossval.recorder.CrossValidationUserInputRecorder;
 
-import java.util.List;
-import java.util.ArrayList;
-
 /**
  * @author Gerhard Petracek
  * @since 1.x.1
@@ -92,16 +89,13 @@
         ExtValContext.getContext().denyRendererInterceptor(ValidationInterceptor.class);
         ExtValContext.getContext().registerRendererInterceptor(new ValidationInterceptorWithSkipValidationSupport());
 
-        String key = ExtValContext.getContext().getInformationProviderBean()
-                    .get(CustomInformation.BASE_PACKAGE) + CommonMetaDataKeys.SKIP_VALIDATION.toUpperCase();
-        List<Class> markerList = (List<Class>)ExtValContext.getContext().getGlobalProperty(key);
+        StaticInMemoryConfiguration config = new StaticInMemoryConfiguration();
+        //it's just required to set the target
+        config.addMapping(CommonMetaDataKeys.SKIP_VALIDATION, SkipValidationSupport.class.getName());
 
-        if(markerList == null)
-        {
-            markerList = new ArrayList<Class>();
-            ExtValContext.getContext().addGlobalProperty(key, markerList);
-        }
-        
-        markerList.add(SkipValidationSupport.class);
+        ExtValContext.getContext()
+                .addStaticConfiguration(StaticConfigurationNames.SKIP_VALIDATION_SUPPORT_CONFIG, config);
+
+        //config.addMapping(CommonMetaDataKeys.SKIP_VALIDATION, RequiredStrategy.class.getName());
     }
 }

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/ValidationInterceptorWithSkipValidationSupport.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/ValidationInterceptorWithSkipValidationSupport.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/ValidationInterceptorWithSkipValidationSupport.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/ValidationInterceptorWithSkipValidationSupport.java Tue May 12 14:07:14 2009
@@ -22,10 +22,8 @@
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
 import org.apache.myfaces.extensions.validator.core.metadata.MetaDataEntry;
-import org.apache.myfaces.extensions.validator.core.property.PropertyInformationKeys;
 import org.apache.myfaces.extensions.validator.core.interceptor.ValidationInterceptor;
-import org.apache.myfaces.extensions.validator.baseval.annotation.SkipValidationSupport;
-import org.apache.myfaces.extensions.validator.baseval.strategy.SkipValidationStrategy;
+import org.apache.myfaces.extensions.validator.util.PropertyValidationUtils;
 
 import javax.faces.context.FacesContext;
 import javax.faces.component.UIComponent;
@@ -43,26 +41,6 @@
                                      ValidationStrategy validationStrategy,
                                      MetaDataEntry metaDataEntry)
     {
-        if(validationStrategy.getClass().isAnnotationPresent(SkipValidationSupport.class))
-        {
-            Boolean skipValidation = metaDataEntry.getProperty(
-                PropertyInformationKeys.SKIP_VALIDATION, Boolean.class);
-
-            if(Boolean.TRUE.equals(skipValidation))
-            {
-                if(logger.isTraceEnabled())
-                {
-                    logger.trace("validation of " + validationStrategy.getClass().getName() + " canceled");
-                }
-
-                return true;
-            }
-        }
-        else if(validationStrategy instanceof SkipValidationStrategy)
-        {
-            validationStrategy.validate(facesContext, uiComponent, metaDataEntry, null);
-            return true;
-        }
-        return false;
+        return PropertyValidationUtils.isValidationSkipped(facesContext, validationStrategy, metaDataEntry);
     }
 }
\ No newline at end of file

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/metadata/transformer/JoinMetaDataTransformer.java Tue May 12 14:07:14 2009
@@ -26,6 +26,7 @@
 import org.apache.myfaces.extensions.validator.core.validation.strategy.ValidationStrategy;
 import org.apache.myfaces.extensions.validator.core.property.PropertyDetails;
 import org.apache.myfaces.extensions.validator.util.ExtValUtils;
+import org.apache.myfaces.extensions.validator.util.PropertyValidationUtils;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 
@@ -58,10 +59,17 @@
                 .createPropertyDetailsForNewTarget(metaDataEntry, targetExpression);
 
             for (MetaDataEntry entry : extractor.extract(FacesContext.getCurrentInstance(),
-                propertyDetails).getMetaDataEntries())
+                                                            propertyDetails).getMetaDataEntries())
             {
                 validationStrategy = ExtValUtils.getValidationStrategyForMetaData(entry.getKey());
 
+                if(validationStrategy == null ||
+                        PropertyValidationUtils.isValidationSkipped(FacesContext.getCurrentInstance(),
+                                validationStrategy, entry))
+                {
+                    continue;
+                }
+
                 metaDataTransformer = ExtValUtils.getMetaDataTransformerForValidationStrategy(validationStrategy);
 
                 if (metaDataTransformer != null)

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/baseval/strategy/JoinValidationStrategy.java Tue May 12 14:07:14 2009
@@ -62,6 +62,11 @@
 
                 if (validationStrategy != null)
                 {
+                    if(ExtValUtils.processMetaDataEntryAfterSkipValidation(validationStrategy.getClass(), entry))
+                    {
+                        continue;
+                    }
+
                     validationStrategy.validate(facesContext, uiComponent, entry, convertedObject);
                 }
                 else

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/DateIs.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/DateIs.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/DateIs.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/annotation/DateIs.java Tue May 12 14:07:14 2009
@@ -18,8 +18,6 @@
  */
 package org.apache.myfaces.extensions.validator.crossval.annotation;
 
-import org.apache.myfaces.extensions.validator.internal.ToDo;
-import org.apache.myfaces.extensions.validator.internal.Priority;
 import org.apache.myfaces.extensions.validator.internal.UsageInformation;
 import org.apache.myfaces.extensions.validator.internal.UsageCategory;
 
@@ -36,7 +34,6 @@
  */
 @Target({METHOD, FIELD})
 @Retention(RUNTIME)
-@ToDo(value = Priority.MEDIUM, description = "DateIsEntry (valueOf, type)")
 @UsageInformation(UsageCategory.API)
 public @interface DateIs
 {

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/crossval/strategy/AbstractCompareStrategy.java Tue May 12 14:07:14 2009
@@ -166,7 +166,8 @@
                     entryOfTarget.getComponent(), entryOfTarget.getMetaDataEntry(),
                     entryOfTarget.getConvertedObject(), validatorException, this))
             {
-                facesContext.addMessage(entryOfTarget.getClientId(), validatorException.getFacesMessage());
+                facesContext.addMessage(entryOfTarget.getClientId(),
+                        ExtValUtils.convertFacesMessage(validatorException.getFacesMessage()));
             }
         }
     }
@@ -215,24 +216,12 @@
 
     protected FacesMessage getSourceComponentErrorMessage(Annotation annotation, String summary, String detail)
     {
-        FacesMessage message = new FacesMessage();
-
-        message.setSeverity(FacesMessage.SEVERITY_ERROR);
-        message.setSummary(summary);
-        message.setDetail(detail);
-
-        return message;
+        return ExtValUtils.createFacesMessage(summary, detail);
     }
 
     protected FacesMessage getTargetComponentErrorMessage(Annotation foundAnnotation, String summary, String detail)
     {
-        FacesMessage message = new FacesMessage();
-
-        message.setSeverity(FacesMessage.SEVERITY_ERROR);
-        message.setSummary(summary);
-        message.setDetail(detail);
-
-        return message;
+        return ExtValUtils.createFacesMessage(summary, detail);
     }
 
     protected String getErrorMessageSummary(Annotation annotation, boolean isTargetComponent)

Modified: myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java?rev=773905&r1=773904&r2=773905&view=diff
==============================================================================
--- myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java (original)
+++ myfaces/extensions/validator/branches/beanval_integration/trunk/validation-modules/property-validation/src/main/java/org/apache/myfaces/extensions/validator/util/CrossValidationUtils.java Tue May 12 14:07:14 2009
@@ -63,7 +63,7 @@
                 .put(CROSS_VALIDATION_STORAGE_KEY, new CrossValidationStorage());
     }
 
-    public static final String KEY_TO_CONVERTED_VALUE_MAPPING_KEY = JsfUtils.class.getName();
+    public static final String KEY_TO_CONVERTED_VALUE_MAPPING_KEY = CrossValidationUtils.class.getName();
 
     public static Map<String, ProcessedInformationEntry> getOrInitKeyToConvertedValueMapping()
     {