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