EXTVAL-130

git-svn-id: https://svn.apache.org/repos/asf/myfaces/extensions/validator/trunk@1084400 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ValidatorFactoryProxy.java b/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ValidatorFactoryProxy.java
new file mode 100644
index 0000000..d7bfd40
--- /dev/null
+++ b/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/ValidatorFactoryProxy.java
@@ -0,0 +1,121 @@
+/*

+ * 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.myfaces.extensions.validator.beanval;

+

+import org.apache.myfaces.extensions.validator.beanval.util.BeanValidationUtils;

+import org.apache.myfaces.extensions.validator.util.ClassUtils;

+import org.apache.myfaces.extensions.validator.util.ExtValUtils;

+

+import javax.validation.ConstraintValidatorFactory;

+import javax.validation.MessageInterpolator;

+import javax.validation.TraversableResolver;

+import javax.validation.Validator;

+import javax.validation.ValidatorContext;

+import javax.validation.ValidatorFactory;

+import java.util.logging.Level;

+import java.util.logging.Logger;

+

+/**

+ * @author Gerhard Petracek

+ * @since r5

+ */

+//see EXTVAL-130

+public class ValidatorFactoryProxy implements ValidatorFactory

+{

+    private ValidatorFactory validatorFactory;

+

+    protected ValidatorFactory getValidatorFactory()

+    {

+        if(this.validatorFactory != null)

+        {

+            return validatorFactory;

+        }

+

+        ValidatorFactory validatorFactory;

+

+        Object contextAwareValidatorFactory = null;

+

+        if (isMyFacesCodiBeanValidationModuleAvailable())

+        {

+            try

+            {

+                contextAwareValidatorFactory = ExtValUtils.getELHelper().getBean("contextAwareValidatorFactory");

+            }

+            catch (Exception e)

+            {

+                Logger logger = Logger.getLogger(getClass().getName());

+

+                if (logger.isLoggable(Level.WARNING))

+                {

+                    logger.log(Level.WARNING, "failed to lookup a bean with the name contextAwareValidatorFactory", e);

+                }

+            }

+        }

+

+        if (contextAwareValidatorFactory instanceof ValidatorFactory)

+        {

+            validatorFactory = (ValidatorFactory) contextAwareValidatorFactory;

+        }

+        else

+        {

+            validatorFactory = new BeanAwareValidatorFactory(BeanValidationUtils.getDefaultValidatorFactory());

+        }

+

+        this.validatorFactory = validatorFactory;

+        return validatorFactory;

+    }

+

+    public Validator getValidator()

+    {

+        return getValidatorFactory().getValidator();

+    }

+

+    protected boolean isMyFacesCodiBeanValidationModuleAvailable()

+    {

+        Class result = ClassUtils

+                .tryToLoadClassForName("org.apache.myfaces.extensions.cdi.bv.api.BeanValidationModuleBeanNames");

+

+        return result != null;

+    }

+

+    public ValidatorContext usingContext()

+    {

+        return getValidatorFactory().usingContext();

+    }

+

+    public MessageInterpolator getMessageInterpolator()

+    {

+        return getValidatorFactory().getMessageInterpolator();

+    }

+

+    public TraversableResolver getTraversableResolver()

+    {

+        return getValidatorFactory().getTraversableResolver();

+    }

+

+    public ConstraintValidatorFactory getConstraintValidatorFactory()

+    {

+        return getValidatorFactory().getConstraintValidatorFactory();

+    }

+

+    public <T> T unwrap(Class<T> type)

+    {

+        return getValidatorFactory().unwrap(type);

+    }

+}

diff --git a/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java b/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java
index e30760f..ca3a1d3 100644
--- a/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java
+++ b/validation-modules/bean-validation/src/main/java/org/apache/myfaces/extensions/validator/beanval/startup/BeanValidationStartupListener.java
@@ -20,11 +20,10 @@
 

 import org.apache.myfaces.extensions.validator.beanval.BeanValidationModuleValidationInterceptor;

 import org.apache.myfaces.extensions.validator.beanval.HtmlCoreComponentsComponentInitializer;

-import org.apache.myfaces.extensions.validator.beanval.BeanAwareValidatorFactory;

 import org.apache.myfaces.extensions.validator.beanval.MappedConstraintSourceBeanValidationModuleValidationInterceptor;

+import org.apache.myfaces.extensions.validator.beanval.ValidatorFactoryProxy;

 import org.apache.myfaces.extensions.validator.beanval.payload.ViolationSeverity;

 import org.apache.myfaces.extensions.validator.beanval.payload.DisableClientSideValidation;

-import org.apache.myfaces.extensions.validator.beanval.util.BeanValidationUtils;

 import org.apache.myfaces.extensions.validator.beanval.interceptor.ExtValBeanValidationMetaDataExtractionInterceptor;

 import org.apache.myfaces.extensions.validator.beanval.validation.ModelValidationPhaseListener;

 import org.apache.myfaces.extensions.validator.beanval.metadata.transformer.mapper.SizeNameMapper;

@@ -72,19 +71,8 @@
 

     protected void registerValidatorFactory()

     {

-        ValidatorFactory validatorFactory;

-        Object contextAwareValidatorFactory = ExtValUtils.getELHelper().getBean("contextAwareValidatorFactory");

-

-        if(contextAwareValidatorFactory instanceof ValidatorFactory)

-        {

-            validatorFactory = (ValidatorFactory)contextAwareValidatorFactory;

-        }

-        else

-        {

-            validatorFactory = new BeanAwareValidatorFactory(BeanValidationUtils.getDefaultValidatorFactory());

-        }

-

-        ExtValContext.getContext().addGlobalProperty(ValidatorFactory.class.getName(), validatorFactory, false);

+        ExtValContext.getContext()

+                .addGlobalProperty(ValidatorFactory.class.getName(), new ValidatorFactoryProxy(), false);

     }

 

     protected void registerBeanValidationInterceptors()