You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by rm...@apache.org on 2015/12/23 13:45:02 UTC
svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
bval-jsr/src/main/java/org/apache/bval/jsr/
bval-jsr/src/test/java/org/apache/bval/jsr/ bval-tck/
Author: rmannibucau
Date: Wed Dec 23 12:45:01 2015
New Revision: 1721536
URL: http://svn.apache.org/viewvc?rev=1721536&view=rev
Log:
BVAL-143 caching should be hold by the factory or shouldnt be for performance reason + reactivating jboss repo since tck (1.0) modules are not on central
Modified:
bval/trunk/bval-jsr/pom.xml
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
bval/trunk/bval-tck/pom.xml
bval/trunk/pom.xml
Modified: bval/trunk/bval-jsr/pom.xml
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/pom.xml (original)
+++ bval/trunk/bval-jsr/pom.xml Wed Dec 23 12:45:01 2015
@@ -297,10 +297,12 @@
</includes>
</configuration>
</plugin>
+ <!-- TODO: activate but ATM it just doesnt build with it
<plugin>
<groupId>org.apache.commons</groupId>
<artifactId>commons-weaver-maven-plugin</artifactId>
</plugin>
+ -->
</plugins>
</build>
</project>
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java Wed Dec 23 12:45:01 2015
@@ -18,6 +18,23 @@
*/
package org.apache.bval.jsr;
+import org.apache.bval.jsr.groups.GroupsComputer;
+import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
+import org.apache.bval.util.AccessStrategy;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.reflect.TypeUtils;
+import org.apache.commons.weaver.privilizer.Privileged;
+
+import javax.validation.Constraint;
+import javax.validation.ConstraintDeclarationException;
+import javax.validation.ConstraintDefinitionException;
+import javax.validation.ConstraintTarget;
+import javax.validation.ConstraintValidator;
+import javax.validation.OverridesAttribute;
+import javax.validation.Payload;
+import javax.validation.ReportAsSingleViolation;
+import javax.validation.constraintvalidation.SupportedValidationTarget;
+import javax.validation.constraintvalidation.ValidationTarget;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -32,25 +49,6 @@ import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.validation.Constraint;
-import javax.validation.ConstraintDeclarationException;
-import javax.validation.ConstraintDefinitionException;
-import javax.validation.ConstraintTarget;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorFactory;
-import javax.validation.OverridesAttribute;
-import javax.validation.Payload;
-import javax.validation.ReportAsSingleViolation;
-import javax.validation.constraintvalidation.SupportedValidationTarget;
-import javax.validation.constraintvalidation.ValidationTarget;
-
-import org.apache.bval.jsr.groups.GroupsComputer;
-import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
-import org.apache.bval.util.AccessStrategy;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.reflect.TypeUtils;
-import org.apache.commons.weaver.privilizer.Privileged;
-
/**
* Description: helper class that builds a {@link ConstraintValidation} or its
* composite constraint validations by parsing the jsr-annotations and
@@ -64,19 +62,19 @@ final class AnnotationConstraintBuilder<
/**
* Create a new AnnotationConstraintBuilder instance.
- *
+ *
* @param validatorClasses
* @param annotation
* @param owner
* @param access
*/
- public AnnotationConstraintBuilder(ConstraintValidatorFactory factory,
- Class<? extends ConstraintValidator<A, ?>>[] validatorClasses, A annotation, Class<?> owner,
- AccessStrategy access, ConstraintTarget target) {
+ public AnnotationConstraintBuilder(
+ Class<? extends ConstraintValidator<A, ?>>[] validatorClasses, A annotation, Class<?> owner,
+ AccessStrategy access, ConstraintTarget target) {
final boolean reportFromComposite =
annotation != null && annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
constraintValidation =
- new ConstraintValidation<A>(factory, validatorClasses, annotation, owner, access, reportFromComposite,
+ new ConstraintValidation<A>(validatorClasses, annotation, owner, access, reportFromComposite,
target);
buildFromAnnotation();
}
@@ -259,7 +257,7 @@ final class AnnotationConstraintBuilder<
/**
* Get the configured {@link ConstraintValidation}.
- *
+ *
* @return {@link ConstraintValidation}
*/
public ConstraintValidation<?> getConstraintValidation() {
@@ -309,7 +307,7 @@ final class AnnotationConstraintBuilder<
* Calculates the index of the composite constraint. The index represents
* the order in which it is added in reference to other constraints of the
* same type.
- *
+ *
* @param composite
* The composite constraint (not yet added).
* @return An integer index always >= 0
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java Wed Dec 23 12:45:01 2015
@@ -34,7 +34,6 @@ import javax.validation.constraintvalida
import javax.validation.constraintvalidation.ValidationTarget;
import javax.validation.groups.ConvertGroup;
import javax.validation.groups.Default;
-
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.InvocationTargetException;
@@ -50,15 +49,15 @@ import java.util.Set;
@Privilizing(@CallTo(Reflection.class))
public final class AnnotationProcessor {
/** {@link ApacheFactoryContext} used */
- private final ApacheFactoryContext factoryContext;
+ private final ApacheValidatorFactory factory;
/**
* Create a new {@link AnnotationProcessor} instance.
*
- * @param factoryContext
+ * @param factory the validator factory.
*/
- public AnnotationProcessor(ApacheFactoryContext factoryContext) {
- this.factoryContext = factoryContext;
+ public AnnotationProcessor(ApacheValidatorFactory factory) {
+ this.factory = factory;
}
/**
@@ -112,7 +111,7 @@ public final class AnnotationProcessor {
* @throws InvocationTargetException
*/
public <A extends Annotation> boolean processAnnotation(A annotation, Meta prop, Class<?> owner,
- AccessStrategy access, AppendValidation appender, boolean reflection) throws IllegalAccessException,
+ AccessStrategy access, AppendValidation appender, boolean reflection) throws IllegalAccessException,
InvocationTargetException {
if (annotation instanceof Valid) {
return addAccessStrategy(prop, access);
@@ -204,12 +203,11 @@ public final class AnnotationProcessor {
}
final Class<A> annotationType = (Class<A>) annotation.annotationType();
Class<? extends ConstraintValidator<A, ?>>[] validatorClasses =
- factoryContext.getFactory().getConstraintsCache().getConstraintValidators(annotationType);
+ factory.getConstraintsCache().getConstraintValidators(annotationType);
if (validatorClasses == null) {
validatorClasses = (Class<? extends ConstraintValidator<A, ?>>[]) vcAnno.validatedBy();
if (validatorClasses.length == 0) {
- validatorClasses =
- factoryContext.getFactory().getDefaultConstraints().getValidatorClasses(annotationType);
+ validatorClasses = factory.getDefaultConstraints().getValidatorClasses(annotationType);
}
}
return validatorClasses;
@@ -234,7 +232,8 @@ public final class AnnotationProcessor {
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
- private <A extends Annotation> boolean applyConstraint(A annotation,
+ private <A extends Annotation> boolean applyConstraint(
+ A annotation,
Class<? extends ConstraintValidator<A, ?>>[] rawConstraintClasses, Meta prop, Class<?> owner,
AccessStrategy access, AppendValidation appender) throws IllegalAccessException, InvocationTargetException {
@@ -244,7 +243,8 @@ public final class AnnotationProcessor {
}
final AnnotationConstraintBuilder<A> builder =
- new AnnotationConstraintBuilder<A>(factoryContext.getConstraintValidatorFactory(), constraintClasses,
+ new AnnotationConstraintBuilder<A>(
+ constraintClasses,
annotation, owner, access, null);
// JSR-303 3.4.4: Add implicit groups
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java Wed Dec 23 12:45:01 2015
@@ -18,33 +18,18 @@
*/
package org.apache.bval.jsr;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.List;
+import org.apache.bval.MetaBeanFinder;
+import org.apache.bval.util.reflection.Reflection;
+import org.apache.commons.weaver.privilizer.Privilizing;
+import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
import javax.validation.ConstraintValidatorFactory;
import javax.validation.MessageInterpolator;
import javax.validation.ParameterNameProvider;
import javax.validation.TraversableResolver;
-import javax.validation.ValidationException;
import javax.validation.Validator;
import javax.validation.ValidatorContext;
-import org.apache.bval.IntrospectorMetaBeanFactory;
-import org.apache.bval.MetaBeanBuilder;
-import org.apache.bval.MetaBeanFactory;
-import org.apache.bval.MetaBeanFinder;
-import org.apache.bval.MetaBeanManager;
-import org.apache.bval.util.reflection.Reflection;
-import org.apache.bval.xml.XMLMetaBeanBuilder;
-import org.apache.bval.xml.XMLMetaBeanFactory;
-import org.apache.bval.xml.XMLMetaBeanManager;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.reflect.ConstructorUtils;
-import org.apache.commons.weaver.privilizer.Privileged;
-import org.apache.commons.weaver.privilizer.Privilizing;
-import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
-
/**
* Description: Represents the context that is used to create
* <code>ClassValidator</code> instances.<br/>
@@ -52,7 +37,7 @@ import org.apache.commons.weaver.privili
@Privilizing(@CallTo(Reflection.class))
public class ApacheFactoryContext implements ValidatorContext {
private final ApacheValidatorFactory factory;
- private final MetaBeanFinder metaBeanFinder;
+ private volatile MetaBeanFinder metaBeanFinder;
private MessageInterpolator messageInterpolator;
private TraversableResolver traversableResolver;
@@ -63,19 +48,9 @@ public class ApacheFactoryContext implem
* Create a new ApacheFactoryContext instance.
*
* @param factory validator factory
- */
- public ApacheFactoryContext(ApacheValidatorFactory factory) {
- this.factory = factory;
- this.metaBeanFinder = buildMetaBeanFinder();
- }
-
- /**
- * Create a new ApacheFactoryContext instance.
- *
- * @param factory validator factory
* @param metaBeanFinder meta finder
*/
- protected ApacheFactoryContext(ApacheValidatorFactory factory, MetaBeanFinder metaBeanFinder) {
+ public ApacheFactoryContext(ApacheValidatorFactory factory, MetaBeanFinder metaBeanFinder) {
this.factory = factory;
this.metaBeanFinder = metaBeanFinder;
}
@@ -99,11 +74,16 @@ public class ApacheFactoryContext implem
return metaBeanFinder;
}
+ private synchronized void resetMeta() { // ensure to ingnore the cache and rebuild constraint with new model
+ metaBeanFinder = factory.buildMetaBeanFinder();
+ }
+
/**
* {@inheritDoc}
*/
public ValidatorContext messageInterpolator(MessageInterpolator messageInterpolator) {
this.messageInterpolator = messageInterpolator;
+ resetMeta();
return this;
}
@@ -112,6 +92,7 @@ public class ApacheFactoryContext implem
*/
public ValidatorContext traversableResolver(TraversableResolver traversableResolver) {
this.traversableResolver = traversableResolver;
+ resetMeta();
return this;
}
@@ -120,11 +101,13 @@ public class ApacheFactoryContext implem
*/
public ValidatorContext constraintValidatorFactory(ConstraintValidatorFactory constraintValidatorFactory) {
this.constraintValidatorFactory = constraintValidatorFactory;
+ resetMeta();
return this;
}
public ValidatorContext parameterNameProvider(ParameterNameProvider parameterNameProvider) {
this.parameterNameProvider = parameterNameProvider;
+ resetMeta();
return this;
}
@@ -171,126 +154,4 @@ public class ApacheFactoryContext implem
return Boolean.parseBoolean(factory.getProperties().get(
ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS));
}
-
- /**
- * Create MetaBeanManager that uses factories:
- * <ol>
- * <li>if enabled by
- * {@link ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
- * {@link IntrospectorMetaBeanFactory}</li>
- * <li>{@link MetaBeanFactory} types (if any) specified by
- * {@link ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
- * </li>
- * <li>if no {@link JsrMetaBeanFactory} has yet been specified (this
- * allows factory order customization), a {@link JsrMetaBeanFactory}
- * which handles both JSR303-XML and JSR303-Annotations</li>
- * <li>if enabled by
- * {@link ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
- * {@link XMLMetaBeanFactory}</li>
- * </ol>
- *
- * @return a new instance of MetaBeanManager with adequate MetaBeanFactories
- */
- protected MetaBeanFinder buildMetaBeanFinder() {
- final List<MetaBeanFactory> builders = new ArrayList<MetaBeanFactory>();
- if (Boolean.parseBoolean(factory.getProperties().get(
- ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
- builders.add(new IntrospectorMetaBeanFactory());
- }
- final String[] factoryClassNames =
- StringUtils.split(factory.getProperties().get(
- ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
- if (factoryClassNames != null) {
- for (String clsName : factoryClassNames) {
- // cast, relying on #createMetaBeanFactory to throw the exception if incompatible:
- @SuppressWarnings("unchecked")
- final Class<? extends MetaBeanFactory> factoryClass = (Class<? extends MetaBeanFactory>) loadClass(clsName);
- builders.add(createMetaBeanFactory(factoryClass));
- }
- }
- boolean jsrFound = false;
- for (MetaBeanFactory builder : builders) {
- jsrFound |= builder instanceof JsrMetaBeanFactory;
- }
- if (!jsrFound) {
- builders.add(new JsrMetaBeanFactory(this));
- }
- @SuppressWarnings("deprecation")
- final boolean enableMetaBeansXml =
- Boolean.parseBoolean(factory.getProperties().get(
- ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
- if (enableMetaBeansXml) {
- XMLMetaBeanManagerCreator.addFactory(builders);
- }
- return createMetaBeanManager(builders);
- }
-
- /**
- * Create a {@link MetaBeanManager} using the specified builders.
- *
- * @param builders
- * {@link MetaBeanFactory} {@link List}
- * @return {@link MetaBeanManager}
- */
- @SuppressWarnings("deprecation")
- protected MetaBeanFinder createMetaBeanManager(List<MetaBeanFactory> builders) {
- // as long as we support both: jsr (in the builders list) and xstream-xml metabeans:
- if (Boolean.parseBoolean(factory.getProperties().get(
- ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
- return XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
- }
- return new MetaBeanManager(new MetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
- }
-
- @Privileged
- private <F extends MetaBeanFactory> F createMetaBeanFactory(final Class<F> cls) {
- try {
- Constructor<F> c = ConstructorUtils.getMatchingAccessibleConstructor(cls, ApacheFactoryContext.this.getClass());
- if (c != null) {
- return c.newInstance(ApacheFactoryContext.this);
- }
- c = ConstructorUtils.getMatchingAccessibleConstructor(cls, getFactory().getClass());
- if (c != null) {
- return c.newInstance(getFactory());
- }
- return cls.newInstance();
- } catch (Exception e) {
- throw new ValidationException(e);
- }
- }
-
- /**
- * separate class to prevent the classloader to immediately load optional
- * classes: XMLMetaBeanManager, XMLMetaBeanFactory, XMLMetaBeanBuilder that
- * might not be available in the classpath
- */
- private static class XMLMetaBeanManagerCreator {
-
- static void addFactory(List<MetaBeanFactory> builders) {
- builders.add(new XMLMetaBeanFactory());
- }
-
- /**
- * Create the {@link MetaBeanManager} to process JSR303 XML. Requires
- * bval-xstream at RT.
- *
- * @param builders meta bean builders
- * @return {@link MetaBeanManager}
- */
- // NOTE - We return MetaBeanManager instead of XMLMetaBeanManager to
- // keep
- // bval-xstream an optional module.
- protected static MetaBeanManager createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
- return new XMLMetaBeanManager(
- new XMLMetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
- }
- }
-
- private Class<?> loadClass(final String className) {
- try {
- return Class.forName(className, true, Reflection.getClassLoader(ApacheFactoryContext.class));
- } catch (ClassNotFoundException ex) {
- throw new ValidationException("Unable to load class: " + className, ex);
- }
- }
}
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java Wed Dec 23 12:45:01 2015
@@ -18,13 +18,24 @@
*/
package org.apache.bval.jsr;
+import org.apache.bval.IntrospectorMetaBeanFactory;
+import org.apache.bval.MetaBeanBuilder;
+import org.apache.bval.MetaBeanFactory;
+import org.apache.bval.MetaBeanFinder;
+import org.apache.bval.MetaBeanManager;
import org.apache.bval.jsr.xml.AnnotationIgnores;
import org.apache.bval.jsr.xml.MetaConstraint;
import org.apache.bval.jsr.xml.ValidationMappingParser;
import org.apache.bval.util.AccessStrategy;
import org.apache.bval.util.reflection.Reflection;
+import org.apache.bval.xml.XMLMetaBeanBuilder;
+import org.apache.bval.xml.XMLMetaBeanFactory;
+import org.apache.bval.xml.XMLMetaBeanManager;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ClassUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.reflect.ConstructorUtils;
+import org.apache.commons.weaver.privilizer.Privileged;
import org.apache.commons.weaver.privilizer.Privilizing;
import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
@@ -37,9 +48,9 @@ import javax.validation.ValidationExcept
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.spi.ConfigurationState;
-
import java.io.Closeable;
import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
@@ -80,6 +91,60 @@ public class ApacheValidatorFactory impl
private final ConcurrentMap<Class<?>, List<MetaConstraint<?, ? extends Annotation>>> constraintMap;
private final Collection<Closeable> toClose = new ArrayList<Closeable>();
+ private final MetaBeanFinder defaultMetaBeanFinder;
+
+ /**
+ * Create MetaBeanManager that uses factories:
+ * <ol>
+ * <li>if enabled by
+ * {@link ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
+ * {@link IntrospectorMetaBeanFactory}</li>
+ * <li>{@link MetaBeanFactory} types (if any) specified by
+ * {@link ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
+ * </li>
+ * <li>if no {@link JsrMetaBeanFactory} has yet been specified (this
+ * allows factory order customization), a {@link JsrMetaBeanFactory}
+ * which handles both JSR303-XML and JSR303-Annotations</li>
+ * <li>if enabled by
+ * {@link ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
+ * {@link XMLMetaBeanFactory}</li>
+ * </ol>
+ *
+ * @return a new instance of MetaBeanManager with adequate MetaBeanFactories
+ */
+ protected MetaBeanFinder buildMetaBeanFinder() {
+ final List<MetaBeanFactory> builders = new ArrayList<MetaBeanFactory>();
+ if (Boolean.parseBoolean(getProperties().get(
+ ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
+ builders.add(new IntrospectorMetaBeanFactory());
+ }
+ final String[] factoryClassNames =
+ StringUtils.split(getProperties().get(
+ ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
+ if (factoryClassNames != null) {
+ for (String clsName : factoryClassNames) {
+ // cast, relying on #createMetaBeanFactory to throw the exception if incompatible:
+ @SuppressWarnings("unchecked")
+ final Class<? extends MetaBeanFactory> factoryClass = (Class<? extends MetaBeanFactory>) loadClass(clsName);
+ builders.add(createMetaBeanFactory(factoryClass));
+ }
+ }
+ boolean jsrFound = false;
+ for (MetaBeanFactory builder : builders) {
+ jsrFound |= builder instanceof JsrMetaBeanFactory;
+ }
+ if (!jsrFound) {
+ builders.add(new JsrMetaBeanFactory(this));
+ }
+ @SuppressWarnings("deprecation")
+ final boolean enableMetaBeansXml =
+ Boolean.parseBoolean(getProperties().get(
+ ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
+ if (enableMetaBeansXml) {
+ XMLMetaBeanManagerCreator.addFactory(builders);
+ }
+ return createMetaBeanManager(builders);
+ }
/**
* Convenience method to retrieve a default global ApacheValidatorFactory
@@ -110,22 +175,11 @@ public class ApacheValidatorFactory impl
/**
* Create a new ApacheValidatorFactory instance.
*/
- public ApacheValidatorFactory(ConfigurationState configurationState) {
- properties = new HashMap<String, String>();
+ public ApacheValidatorFactory(ConfigurationState configuration) {
+ properties = new HashMap<String, String>(configuration.getProperties());
defaultSequences = new HashMap<Class<?>, Class<?>[]>();
validAccesses = new ConcurrentHashMap<Class<?>, List<AccessStrategy>>();
constraintMap = new ConcurrentHashMap<Class<?>, List<MetaConstraint<?, ? extends Annotation>>>();
- configure(configurationState);
- }
-
- /**
- * Configure this {@link ApacheValidatorFactory} from a
- * {@link ConfigurationState}.
- *
- * @param configuration
- */
- protected void configure(final ConfigurationState configuration) {
- getProperties().putAll(configuration.getProperties());
parameterNameProvider = configuration.getParameterNameProvider();
messageResolver = configuration.getMessageInterpolator();
@@ -138,6 +192,8 @@ public class ApacheValidatorFactory impl
}
new ValidationMappingParser(this).processMappingConfig(configuration.getMappingStreams());
+
+ defaultMetaBeanFinder = buildMetaBeanFinder();
}
/**
@@ -165,7 +221,7 @@ public class ApacheValidatorFactory impl
* @return the validator factory's context
*/
public ApacheFactoryContext usingContext() {
- return new ApacheFactoryContext(this);
+ return new ApacheFactoryContext(this, defaultMetaBeanFinder);
}
/**
@@ -428,4 +484,73 @@ public class ApacheValidatorFactory impl
private static Class<?>[] safeArray(Class<?>... array) {
return ArrayUtils.isEmpty(array) ? ArrayUtils.EMPTY_CLASS_ARRAY : ArrayUtils.clone(array);
}
+
+ /**
+ * Create a {@link MetaBeanManager} using the specified builders.
+ *
+ * @param builders
+ * {@link MetaBeanFactory} {@link List}
+ * @return {@link MetaBeanManager}
+ */
+ @SuppressWarnings("deprecation")
+ protected MetaBeanFinder createMetaBeanManager(List<MetaBeanFactory> builders) {
+ // as long as we support both: jsr (in the builders list) and xstream-xml metabeans:
+ if (Boolean.parseBoolean(getProperties().get(
+ ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
+ return XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
+ }
+ return new MetaBeanManager(new MetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
+ }
+
+ @Privileged
+ private <F extends MetaBeanFactory> F createMetaBeanFactory(final Class<F> cls) {
+ try {
+ Constructor<F> c = ConstructorUtils.getMatchingAccessibleConstructor(cls, ApacheValidatorFactory.this.getClass());
+ if (c != null) {
+ return c.newInstance(this);
+ }
+ c = ConstructorUtils.getMatchingAccessibleConstructor(cls, getClass());
+ if (c != null) {
+ return c.newInstance(this);
+ }
+ return cls.newInstance();
+ } catch (Exception e) {
+ throw new ValidationException(e);
+ }
+ }
+
+ /**
+ * separate class to prevent the classloader to immediately load optional
+ * classes: XMLMetaBeanManager, XMLMetaBeanFactory, XMLMetaBeanBuilder that
+ * might not be available in the classpath
+ */
+ private static class XMLMetaBeanManagerCreator {
+
+ static void addFactory(List<MetaBeanFactory> builders) {
+ builders.add(new XMLMetaBeanFactory());
+ }
+
+ /**
+ * Create the {@link MetaBeanManager} to process JSR303 XML. Requires
+ * bval-xstream at RT.
+ *
+ * @param builders meta bean builders
+ * @return {@link MetaBeanManager}
+ */
+ // NOTE - We return MetaBeanManager instead of XMLMetaBeanManager to
+ // keep
+ // bval-xstream an optional module.
+ protected static MetaBeanManager createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
+ return new XMLMetaBeanManager(
+ new XMLMetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
+ }
+ }
+
+ private Class<?> loadClass(final String className) {
+ try {
+ return Class.forName(className, true, Reflection.getClassLoader(ApacheValidatorFactory.class));
+ } catch (ClassNotFoundException ex) {
+ throw new ValidationException("Unable to load class: " + className, ex);
+ }
+ }
}
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java Wed Dec 23 12:45:01 2015
@@ -51,7 +51,6 @@ import javax.validation.metadata.MethodT
import javax.validation.metadata.ParameterDescriptor;
import javax.validation.metadata.PropertyDescriptor;
import javax.validation.metadata.ReturnValueDescriptor;
-
import java.beans.Introspector;
import java.lang.annotation.Annotation;
import java.lang.reflect.AccessibleObject;
@@ -329,7 +328,7 @@ public class BeanDescriptorImpl extends
private ExecutableMeta(final ApacheFactoryContext factoryContext, final MetaBean metaBean1, final Collection<ConstraintDescriptor<?>> constraintDescriptors) {
this.metaBean = metaBean1;
this.factoryContext = factoryContext;
- this.annotationProcessor = new AnnotationProcessor(factoryContext);
+ this.annotationProcessor = new AnnotationProcessor(factoryContext.getFactory());
buildExecutableDescriptors();
@@ -840,7 +839,9 @@ public class BeanDescriptorImpl extends
}
}
} else {
- annotationProcessor.processAnnotation(annotation, null, ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()), access, validations, true);
+ annotationProcessor.processAnnotation(
+ annotation, null, ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
+ access, validations, true);
}
}
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java Wed Dec 23 12:45:01 2015
@@ -638,8 +638,9 @@ public class ClassValidator implements C
protected <T> GroupValidationContext<T> createContext(MetaBean metaBean, T object, Class<T> objectClass, Class<?>... groups) {
final ConstraintValidationListener<T> listener = new ConstraintValidationListener<T>(object, objectClass);
final GroupValidationContextImpl<T> context =
- new GroupValidationContextImpl<T>(listener, this.factoryContext.getMessageInterpolator(),
- this.factoryContext.getTraversableResolver(), factoryContext.getParameterNameProvider(), metaBean);
+ new GroupValidationContextImpl<T>(listener, factoryContext.getMessageInterpolator(),
+ factoryContext.getTraversableResolver(), factoryContext.getParameterNameProvider(),
+ factoryContext.getConstraintValidatorFactory(), metaBean);
context.setBean(object, metaBean);
context.setGroups(groupsComputer.computeGroups(groups));
return context;
@@ -648,8 +649,9 @@ public class ClassValidator implements C
protected <T> GroupValidationContext<T> createInvocableContext(MetaBean metaBean, T object, Class<T> objectClass, Class<?>... groups) {
final ConstraintValidationListener<T> listener = new ConstraintValidationListener<T>(object, objectClass);
final GroupValidationContextImpl<T> context =
- new GroupValidationContextImpl<T>(listener, this.factoryContext.getMessageInterpolator(),
- this.factoryContext.getTraversableResolver(), factoryContext.getParameterNameProvider(), metaBean);
+ new GroupValidationContextImpl<T>(listener, factoryContext.getMessageInterpolator(),
+ factoryContext.getTraversableResolver(), factoryContext.getParameterNameProvider(),
+ factoryContext.getConstraintValidatorFactory(), metaBean);
context.setBean(object, metaBean);
final Groups computedGroup = groupsComputer.computeGroups(groups);
if (Collections.singletonList(Group.DEFAULT).equals(computedGroup.getGroups()) && metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java Wed Dec 23 12:45:01 2015
@@ -39,7 +39,6 @@ import javax.validation.ValidationExcept
import javax.validation.constraintvalidation.SupportedValidationTarget;
import javax.validation.constraintvalidation.ValidationTarget;
import javax.validation.metadata.ConstraintDescriptor;
-
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Array;
@@ -61,7 +60,6 @@ import java.util.Set;
* this instance is immutable!<br/>
*/
public class ConstraintValidation<T extends Annotation> implements Validation, ConstraintDescriptor<T> {
- private final ConstraintValidatorFactory factory;
private final AccessStrategy access;
private final boolean reportFromComposite;
private final Map<String, Object> attributes;
@@ -82,11 +80,9 @@ public class ConstraintValidation<T exte
private Class<? extends ConstraintValidator<T, ?>>[] validatorClasses;
private ConstraintTarget validationAppliesTo = null;
- public ConstraintValidation(ConstraintValidatorFactory factory,
- Class<? extends ConstraintValidator<T, ?>>[] validatorClasses,
+ public ConstraintValidation(Class<? extends ConstraintValidator<T, ?>>[] validatorClasses,
T annotation, Class<?> owner, AccessStrategy access,
boolean reportFromComposite, ConstraintTarget target) {
- this.factory = factory;
this.attributes = new HashMap<String, Object>();
this.validatorClasses = ArrayUtils.clone(validatorClasses);
this.annotation = annotation;
@@ -158,7 +154,8 @@ public class ConstraintValidation<T exte
synchronized (this) {
if (validator == null) {
try {
- validator = getConstraintValidator(annotation, validatorClasses, owner, access);
+ validator = getConstraintValidator(
+ context.getConstraintValidatorFactory(), annotation, validatorClasses, owner, access);
if (validator != null) {
validator.initialize(annotation);
}
@@ -235,7 +232,8 @@ public class ConstraintValidation<T exte
}
}
- private <A extends Annotation> ConstraintValidator<A, ? super T> getConstraintValidator(A annotation,
+ private <A extends Annotation> ConstraintValidator<A, ? super T> getConstraintValidator(
+ ConstraintValidatorFactory factory, A annotation,
Class<? extends ConstraintValidator<A, ?>>[] constraintClasses, Class<?> owner, AccessStrategy access) {
if (ArrayUtils.isNotEmpty(constraintClasses)) {
final Type type = determineTargetedType(owner, access);
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java Wed Dec 23 12:45:01 2015
@@ -24,6 +24,7 @@ import org.apache.bval.model.MetaBean;
import org.apache.bval.model.ValidationContext;
import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorFactory;
import javax.validation.ElementKind;
import javax.validation.MessageInterpolator;
import javax.validation.ParameterNameProvider;
@@ -107,6 +108,12 @@ public interface GroupValidationContext<
TraversableResolver getTraversableResolver();
/**
+ * Get the {@link ConstraintValidatorFactory}.
+ * @return {@link ConstraintValidatorFactory}
+ */
+ ConstraintValidatorFactory getConstraintValidatorFactory();
+
+ /**
* Accumulate a validated constraint.
* @param constraint
* @return true when the constraint for the object in this path was not
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java Wed Dec 23 12:45:01 2015
@@ -27,6 +27,7 @@ import org.apache.bval.model.MetaPropert
import org.apache.bval.util.AccessStrategy;
import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorFactory;
import javax.validation.ElementKind;
import javax.validation.MessageInterpolator;
import javax.validation.ParameterNameProvider;
@@ -70,6 +71,7 @@ final class GroupValidationContextImpl<T
private ConstraintValidation<?> constraintValidation;
private final TraversableResolver traversableResolver;
+ private final ConstraintValidatorFactory constraintValidatorFactory;
private Object[] parameters;
private Object returnValue;
@@ -86,11 +88,14 @@ final class GroupValidationContextImpl<T
* @param rootMetaBean
*/
public GroupValidationContextImpl(ConstraintValidationListener<T> listener, MessageInterpolator aMessageResolver,
- TraversableResolver traversableResolver, ParameterNameProvider parameterNameProvider, MetaBean rootMetaBean) {
+ TraversableResolver traversableResolver, ParameterNameProvider parameterNameProvider,
+ ConstraintValidatorFactory constraintValidatorFactory,
+ MetaBean rootMetaBean) {
// inherited variable 'validatedObjects' is of type:
// HashMap<GraphBeanIdentity, Set<PathImpl>> in this class
super(listener, new HashMap<GraphBeanIdentity, Set<PathImpl>>());
this.messageResolver = aMessageResolver;
+ this.constraintValidatorFactory = constraintValidatorFactory;
this.traversableResolver = CachingTraversableResolver.cacheFor(traversableResolver);
this.parameterNameProvider = parameterNameProvider;
this.rootMetaBean = rootMetaBean;
@@ -313,6 +318,11 @@ final class GroupValidationContextImpl<T
return traversableResolver;
}
+ @Override
+ public ConstraintValidatorFactory getConstraintValidatorFactory() {
+ return constraintValidatorFactory;
+ }
+
/**
* {@inheritDoc}
*/
Modified: bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java (original)
+++ bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java Wed Dec 23 12:45:01 2015
@@ -63,8 +63,8 @@ public class JsrMetaBeanFactory implemen
// of dubious utility as it's static :/
protected static final Logger log = Logger.getLogger(JsrMetaBeanFactory.class.getName());
- /** {@link ApacheFactoryContext} used */
- protected final ApacheFactoryContext factoryContext;
+ /** {@link javax.validation.ValidatorFactory} used */
+ protected final ApacheValidatorFactory factory;
/**
* {@link AnnotationProcessor} used.
@@ -74,11 +74,11 @@ public class JsrMetaBeanFactory implemen
/**
* Create a new Jsr303MetaBeanFactory instance.
*
- * @param factoryContext
+ * @param factory the validator factory.
*/
- public JsrMetaBeanFactory(ApacheFactoryContext factoryContext) {
- this.factoryContext = factoryContext;
- this.annotationProcessor = new AnnotationProcessor(factoryContext);
+ public JsrMetaBeanFactory(ApacheValidatorFactory factory) {
+ this.factory = factory;
+ this.annotationProcessor = new AnnotationProcessor(factory);
}
/**
@@ -123,7 +123,7 @@ public class JsrMetaBeanFactory implemen
InvocationTargetException {
// if NOT ignore class level annotations
- if (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(beanClass)) {
+ if (!factory.getAnnotationIgnores().isIgnoreAnnotations(beanClass)) {
annotationProcessor.processAnnotations(null, beanClass, beanClass, null, new AppendValidationToMeta(metabean));
}
@@ -134,7 +134,7 @@ public class JsrMetaBeanFactory implemen
MetaProperty metaProperty = metabean.getProperty(field.getName());
// create a property for those fields for which there is not yet a
// MetaProperty
- if (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(field)) {
+ if (!factory.getAnnotationIgnores().isIgnoreAnnotations(field)) {
AccessStrategy access = new FieldAccess(field);
boolean create = metaProperty == null;
if (create) {
@@ -160,7 +160,7 @@ public class JsrMetaBeanFactory implemen
propName = MethodAccess.getPropertyName(method);
}
if (propName != null) {
- if (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(method)) {
+ if (!factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
AccessStrategy access = new MethodAccess(propName, method);
MetaProperty metaProperty = metabean.getProperty(propName);
boolean create = metaProperty == null;
@@ -198,7 +198,7 @@ public class JsrMetaBeanFactory implemen
*/
private void addXmlConstraints(Class<?> beanClass, MetaBean metabean) throws IllegalAccessException,
InvocationTargetException {
- for (final MetaConstraint<?, ? extends Annotation> metaConstraint : factoryContext.getFactory().getMetaConstraints(beanClass)) {
+ for (final MetaConstraint<?, ? extends Annotation> metaConstraint : factory.getMetaConstraints(beanClass)) {
Meta meta;
AccessStrategy access = metaConstraint.getAccessStrategy();
boolean create = false;
@@ -263,7 +263,7 @@ public class JsrMetaBeanFactory implemen
metabean.putProperty(access.getPropertyName(), null);
}
}
- for (final AccessStrategy access : factoryContext.getFactory().getValidAccesses(beanClass)) {
+ for (final AccessStrategy access : factory.getValidAccesses(beanClass)) {
if (access.getElementType() == ElementType.PARAMETER) {
continue;
}
@@ -289,7 +289,7 @@ public class JsrMetaBeanFactory implemen
if (groupSeq == null) {
groupSeq = metabean.initFeature(key, new ArrayList<Group>(annotation == null ? 1 : annotation.value().length));
}
- Class<?>[] groupClasses = factoryContext.getFactory().getDefaultSequence(beanClass);
+ Class<?>[] groupClasses = factory.getDefaultSequence(beanClass);
if (groupClasses == null || groupClasses.length == 0) {
if (annotation == null) {
groupSeq.add(Group.DEFAULT);
Modified: bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
URL: http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java (original)
+++ bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java Wed Dec 23 12:45:01 2015
@@ -89,6 +89,10 @@ public class ValidationTest extends Test
return factory.getValidator();
}
+ public void testCache() {
+ factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
+ factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
+ }
public void testAccessStrategies_field_method() {
AccessTestBusinessObject o1 = new AccessTestBusinessObject("1");
AccessTestBusinessObjectSub o2 = new AccessTestBusinessObjectSub("3");
Modified: bval/trunk/bval-tck/pom.xml
URL: http://svn.apache.org/viewvc/bval/trunk/bval-tck/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-tck/pom.xml (original)
+++ bval/trunk/bval-tck/pom.xml Wed Dec 23 12:45:01 2015
@@ -169,6 +169,55 @@
<version>1.0.0</version>
</dependency>
</dependencies>
+ <repositories>
+ <repository>
+ <!-- override outdated URLs for jboss repo ids -->
+ <id>repository.jboss.org</id>
+ <name>JBoss Public Maven Repository Group</name>
+ <url>https://repository.jboss.org/nexus/content/groups/public/</url>
+ <layout>default</layout>
+ <releases>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>fail</checksumPolicy>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>warn</checksumPolicy>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>jboss</id>
+ <name>JBoss Public Maven Repository Group (again)</name>
+ <url>https://repository.jboss.org/nexus/content/groups/public/</url>
+ <layout>default</layout>
+ <releases>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>fail</checksumPolicy>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>warn</checksumPolicy>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>snapshots.jboss.org</id>
+ <url>https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>jboss-snapshots</id>
+ <url>https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
<build>
<plugins>
<plugin>
Modified: bval/trunk/pom.xml
URL: http://svn.apache.org/viewvc/bval/trunk/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/pom.xml (original)
+++ bval/trunk/pom.xml Wed Dec 23 12:45:01 2015
@@ -571,6 +571,7 @@
<artifactId>commons-weaver-maven-plugin</artifactId>
<version>${commons.weaver.version}</version>
<configuration>
+ <verbose>true</verbose>
<weaverConfig>
<privilizer.policy>DYNAMIC</privilizer.policy>
</weaverConfig>
Re: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
bval-jsr/src/main/java/org/apache/bval/jsr/ bval-jsr/src/test/java/org/apache/bval/jsr/
bval-tck/
Posted by Matt Benson <gu...@gmail.com>.
I am. :)
Matt
On Mon, Jan 4, 2016 at 2:48 AM, Romain Manni-Bucau
<rm...@gmail.com> wrote:
> Think Matt is on it
>
> Le 4 janv. 2016 09:44, "Mark Struberg" <st...@yahoo.de> a écrit :
>>
>> Means we should push for releasing commons-weaver first, right?
>>
>> LieGrue,
>> strub
>>
>>
>> > Am 23.12.2015 um 18:14 schrieb Romain Manni-Bucau
>> > <rm...@gmail.com>:
>> >
>> > yep the loop with a constant index was not loved by the runtime ;)
>> >
>> > FYI this issue (the real one not the weaver one) was triggered by a user
>> > which got very bad perfs upgrading to 1.1 so I'd like to get this out
>> > ASAP
>> > and if anyone has time for a review it would be really welcomed.
>> >
>> >
>> > Romain Manni-Bucau
>> > @rmannibucau <https://twitter.com/rmannibucau> | Blog
>> > <http://rmannibucau.wordpress.com> | Github
>> > <https://github.com/rmannibucau> |
>> > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>> > <http://www.tomitribe.com>
>> >
>> > 2015-12-23 18:11 GMT+01:00 Matt Benson <gu...@gmail.com>:
>> >
>> >> You got it. :-)
>> >>
>> >> Matt
>> >> On Dec 23, 2015 9:48 AM, "Romain Manni-Bucau" <rm...@gmail.com>
>> >> wrote:
>> >>
>> >>> seems a bug in 1.1 of [weaver], looks fixed in coming 1.2 so just
>> >> deployed
>> >>> the snapshot and upgraded in bval to the snapshot
>> >>>
>> >>>
>> >>> Romain Manni-Bucau
>> >>> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>> >>> <http://rmannibucau.wordpress.com> | Github <
>> >>> https://github.com/rmannibucau> |
>> >>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>> >>> <http://www.tomitribe.com>
>> >>>
>> >>> 2015-12-23 13:47 GMT+01:00 Romain Manni-Bucau <rm...@gmail.com>:
>> >>>
>> >>>> Hi guys
>> >>>>
>> >>>> I would need some help for commons-weaver-maven-plugin setup, i
>> >> commented
>> >>>> it out cause it was just hanging. Any inputs/help on that?
>> >>>>
>> >>>> Romain Manni-Bucau
>> >>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>> >>>> <http://rmannibucau.wordpress.com> | Github
>> >>>> <https://github.com/rmannibucau> | LinkedIn
>> >>>> <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>> >>>> <http://www.tomitribe.com>
>> >>>>
>> >>>> ---------- Forwarded message ----------
>> >>>> From: <rm...@apache.org>
>> >>>> Date: 2015-12-23 13:45 GMT+01:00
>> >>>> Subject: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
>> >>>> bval-jsr/src/main/java/org/apache/bval/jsr/
>> >>>> bval-jsr/src/test/java/org/apache/bval/jsr/ bval-tck/
>> >>>> To: commits@bval.apache.org
>> >>>>
>> >>>>
>> >>>> Author: rmannibucau
>> >>>> Date: Wed Dec 23 12:45:01 2015
>> >>>> New Revision: 1721536
>> >>>>
>> >>>> URL: http://svn.apache.org/viewvc?rev=1721536&view=rev
>> >>>> Log:
>> >>>> BVAL-143 caching should be hold by the factory or shouldnt be for
>> >>>> performance reason + reactivating jboss repo since tck (1.0) modules
>> >> are
>> >>>> not on central
>> >>>>
>> >>>> Modified:
>> >>>> bval/trunk/bval-jsr/pom.xml
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
>> >>>>
>> >>>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
>> >>>>
>> >>>>
>> >>
>> >> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
>> >>>> bval/trunk/bval-tck/pom.xml
>> >>>> bval/trunk/pom.xml
>> >>>>
>> >>>> Modified: bval/trunk/bval-jsr/pom.xml
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> --- bval/trunk/bval-jsr/pom.xml (original)
>> >>>> +++ bval/trunk/bval-jsr/pom.xml Wed Dec 23 12:45:01 2015
>> >>>> @@ -297,10 +297,12 @@
>> >>>> </includes>
>> >>>> </configuration>
>> >>>> </plugin>
>> >>>> + <!-- TODO: activate but ATM it just doesnt build with it
>> >>>> <plugin>
>> >>>> <groupId>org.apache.commons</groupId>
>> >>>> <artifactId>commons-weaver-maven-plugin</artifactId>
>> >>>> </plugin>
>> >>>> + -->
>> >>>> </plugins>
>> >>>> </build>
>> >>>> </project>
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -18,6 +18,23 @@
>> >>>> */
>> >>>> package org.apache.bval.jsr;
>> >>>>
>> >>>> +import org.apache.bval.jsr.groups.GroupsComputer;
>> >>>> +import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
>> >>>> +import org.apache.bval.util.AccessStrategy;
>> >>>> +import org.apache.commons.lang3.ArrayUtils;
>> >>>> +import org.apache.commons.lang3.reflect.TypeUtils;
>> >>>> +import org.apache.commons.weaver.privilizer.Privileged;
>> >>>> +
>> >>>> +import javax.validation.Constraint;
>> >>>> +import javax.validation.ConstraintDeclarationException;
>> >>>> +import javax.validation.ConstraintDefinitionException;
>> >>>> +import javax.validation.ConstraintTarget;
>> >>>> +import javax.validation.ConstraintValidator;
>> >>>> +import javax.validation.OverridesAttribute;
>> >>>> +import javax.validation.Payload;
>> >>>> +import javax.validation.ReportAsSingleViolation;
>> >>>> +import
>> >> javax.validation.constraintvalidation.SupportedValidationTarget;
>> >>>> +import javax.validation.constraintvalidation.ValidationTarget;
>> >>>> import java.lang.annotation.Annotation;
>> >>>> import java.lang.reflect.InvocationTargetException;
>> >>>> import java.lang.reflect.Method;
>> >>>> @@ -32,25 +49,6 @@ import java.util.Set;
>> >>>> import java.util.logging.Level;
>> >>>> import java.util.logging.Logger;
>> >>>>
>> >>>> -import javax.validation.Constraint;
>> >>>> -import javax.validation.ConstraintDeclarationException;
>> >>>> -import javax.validation.ConstraintDefinitionException;
>> >>>> -import javax.validation.ConstraintTarget;
>> >>>> -import javax.validation.ConstraintValidator;
>> >>>> -import javax.validation.ConstraintValidatorFactory;
>> >>>> -import javax.validation.OverridesAttribute;
>> >>>> -import javax.validation.Payload;
>> >>>> -import javax.validation.ReportAsSingleViolation;
>> >>>> -import
>> >> javax.validation.constraintvalidation.SupportedValidationTarget;
>> >>>> -import javax.validation.constraintvalidation.ValidationTarget;
>> >>>> -
>> >>>> -import org.apache.bval.jsr.groups.GroupsComputer;
>> >>>> -import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
>> >>>> -import org.apache.bval.util.AccessStrategy;
>> >>>> -import org.apache.commons.lang3.ArrayUtils;
>> >>>> -import org.apache.commons.lang3.reflect.TypeUtils;
>> >>>> -import org.apache.commons.weaver.privilizer.Privileged;
>> >>>> -
>> >>>> /**
>> >>>> * Description: helper class that builds a {@link
>> >> ConstraintValidation}
>> >>>> or its
>> >>>> * composite constraint validations by parsing the jsr-annotations
>> >>>> and
>> >>>> @@ -64,19 +62,19 @@ final class AnnotationConstraintBuilder<
>> >>>>
>> >>>> /**
>> >>>> * Create a new AnnotationConstraintBuilder instance.
>> >>>> - *
>> >>>> + *
>> >>>> * @param validatorClasses
>> >>>> * @param annotation
>> >>>> * @param owner
>> >>>> * @param access
>> >>>> */
>> >>>> - public AnnotationConstraintBuilder(ConstraintValidatorFactory
>> >>> factory,
>> >>>> - Class<? extends ConstraintValidator<A, ?>>[]
>> >> validatorClasses, A
>> >>>> annotation, Class<?> owner,
>> >>>> - AccessStrategy access, ConstraintTarget target) {
>> >>>> + public AnnotationConstraintBuilder(
>> >>>> + Class<? extends ConstraintValidator<A, ?>>[]
>> >>>> validatorClasses, A annotation, Class<?> owner,
>> >>>> + AccessStrategy access, ConstraintTarget target) {
>> >>>> final boolean reportFromComposite =
>> >>>> annotation != null &&
>> >>>>
>> >>>
>> >>
>> >> annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
>> >>>> constraintValidation =
>> >>>> - new ConstraintValidation<A>(factory, validatorClasses,
>> >>>> annotation, owner, access, reportFromComposite,
>> >>>> + new ConstraintValidation<A>(validatorClasses,
>> >>>> annotation,
>> >>>> owner, access, reportFromComposite,
>> >>>> target);
>> >>>> buildFromAnnotation();
>> >>>> }
>> >>>> @@ -259,7 +257,7 @@ final class AnnotationConstraintBuilder<
>> >>>>
>> >>>> /**
>> >>>> * Get the configured {@link ConstraintValidation}.
>> >>>> - *
>> >>>> + *
>> >>>> * @return {@link ConstraintValidation}
>> >>>> */
>> >>>> public ConstraintValidation<?> getConstraintValidation() {
>> >>>> @@ -309,7 +307,7 @@ final class AnnotationConstraintBuilder<
>> >>>> * Calculates the index of the composite constraint. The index
>> >>>> represents
>> >>>> * the order in which it is added in reference to other
>> >> constraints
>> >>>> of the
>> >>>> * same type.
>> >>>> - *
>> >>>> + *
>> >>>> * @param composite
>> >>>> * The composite constraint (not yet added).
>> >>>> * @return An integer index always >= 0
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -34,7 +34,6 @@ import javax.validation.constraintvalida
>> >>>> import javax.validation.constraintvalidation.ValidationTarget;
>> >>>> import javax.validation.groups.ConvertGroup;
>> >>>> import javax.validation.groups.Default;
>> >>>> -
>> >>>> import java.lang.annotation.Annotation;
>> >>>> import java.lang.reflect.AnnotatedElement;
>> >>>> import java.lang.reflect.InvocationTargetException;
>> >>>> @@ -50,15 +49,15 @@ import java.util.Set;
>> >>>> @Privilizing(@CallTo(Reflection.class))
>> >>>> public final class AnnotationProcessor {
>> >>>> /** {@link ApacheFactoryContext} used */
>> >>>> - private final ApacheFactoryContext factoryContext;
>> >>>> + private final ApacheValidatorFactory factory;
>> >>>>
>> >>>> /**
>> >>>> * Create a new {@link AnnotationProcessor} instance.
>> >>>> *
>> >>>> - * @param factoryContext
>> >>>> + * @param factory the validator factory.
>> >>>> */
>> >>>> - public AnnotationProcessor(ApacheFactoryContext factoryContext)
>> >>>> {
>> >>>> - this.factoryContext = factoryContext;
>> >>>> + public AnnotationProcessor(ApacheValidatorFactory factory) {
>> >>>> + this.factory = factory;
>> >>>> }
>> >>>>
>> >>>> /**
>> >>>> @@ -112,7 +111,7 @@ public final class AnnotationProcessor {
>> >>>> * @throws InvocationTargetException
>> >>>> */
>> >>>> public <A extends Annotation> boolean processAnnotation(A
>> >>> annotation,
>> >>>> Meta prop, Class<?> owner,
>> >>>> - AccessStrategy access, AppendValidation appender, boolean
>> >>>> reflection) throws IllegalAccessException,
>> >>>> + AccessStrategy access, AppendValidation appender,
>> >>>> boolean
>> >>>> reflection) throws IllegalAccessException,
>> >>>> InvocationTargetException {
>> >>>> if (annotation instanceof Valid) {
>> >>>> return addAccessStrategy(prop, access);
>> >>>> @@ -204,12 +203,11 @@ public final class AnnotationProcessor {
>> >>>> }
>> >>>> final Class<A> annotationType = (Class<A>)
>> >>>> annotation.annotationType();
>> >>>> Class<? extends ConstraintValidator<A, ?>>[] validatorClasses
>> >> =
>> >>>> -
>> >>>>
>> >>>
>> >>
>> >> factoryContext.getFactory().getConstraintsCache().getConstraintValidators(annotationType);
>> >>>> +
>> >>>>
>> >>>> factory.getConstraintsCache().getConstraintValidators(annotationType);
>> >>>> if (validatorClasses == null) {
>> >>>> validatorClasses = (Class<? extends
>> >>>> ConstraintValidator<A,
>> >>>> ?>>[]) vcAnno.validatedBy();
>> >>>> if (validatorClasses.length == 0) {
>> >>>> - validatorClasses =
>> >>>> -
>> >>>>
>> >>>
>> >>
>> >> factoryContext.getFactory().getDefaultConstraints().getValidatorClasses(annotationType);
>> >>>> + validatorClasses =
>> >>>> factory.getDefaultConstraints().getValidatorClasses(annotationType);
>> >>>> }
>> >>>> }
>> >>>> return validatorClasses;
>> >>>> @@ -234,7 +232,8 @@ public final class AnnotationProcessor {
>> >>>> * @throws IllegalAccessException
>> >>>> * @throws InvocationTargetException
>> >>>> */
>> >>>> - private <A extends Annotation> boolean applyConstraint(A
>> >> annotation,
>> >>>> + private <A extends Annotation> boolean applyConstraint(
>> >>>> + A annotation,
>> >>>> Class<? extends ConstraintValidator<A, ?>>[]
>> >>>> rawConstraintClasses, Meta prop, Class<?> owner,
>> >>>> AccessStrategy access, AppendValidation appender) throws
>> >>>> IllegalAccessException, InvocationTargetException {
>> >>>>
>> >>>> @@ -244,7 +243,8 @@ public final class AnnotationProcessor {
>> >>>> }
>> >>>>
>> >>>> final AnnotationConstraintBuilder<A> builder =
>> >>>> - new
>> >>>>
>> >>>
>> >>
>> >> AnnotationConstraintBuilder<A>(factoryContext.getConstraintValidatorFactory(),
>> >>>> constraintClasses,
>> >>>> + new AnnotationConstraintBuilder<A>(
>> >>>> + constraintClasses,
>> >>>> annotation, owner, access, null);
>> >>>>
>> >>>> // JSR-303 3.4.4: Add implicit groups
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -18,33 +18,18 @@
>> >>>> */
>> >>>> package org.apache.bval.jsr;
>> >>>>
>> >>>> -import java.lang.reflect.Constructor;
>> >>>> -import java.util.ArrayList;
>> >>>> -import java.util.List;
>> >>>> +import org.apache.bval.MetaBeanFinder;
>> >>>> +import org.apache.bval.util.reflection.Reflection;
>> >>>> +import org.apache.commons.weaver.privilizer.Privilizing;
>> >>>> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
>> >>>>
>> >>>> import javax.validation.ConstraintValidatorFactory;
>> >>>> import javax.validation.MessageInterpolator;
>> >>>> import javax.validation.ParameterNameProvider;
>> >>>> import javax.validation.TraversableResolver;
>> >>>> -import javax.validation.ValidationException;
>> >>>> import javax.validation.Validator;
>> >>>> import javax.validation.ValidatorContext;
>> >>>>
>> >>>> -import org.apache.bval.IntrospectorMetaBeanFactory;
>> >>>> -import org.apache.bval.MetaBeanBuilder;
>> >>>> -import org.apache.bval.MetaBeanFactory;
>> >>>> -import org.apache.bval.MetaBeanFinder;
>> >>>> -import org.apache.bval.MetaBeanManager;
>> >>>> -import org.apache.bval.util.reflection.Reflection;
>> >>>> -import org.apache.bval.xml.XMLMetaBeanBuilder;
>> >>>> -import org.apache.bval.xml.XMLMetaBeanFactory;
>> >>>> -import org.apache.bval.xml.XMLMetaBeanManager;
>> >>>> -import org.apache.commons.lang3.StringUtils;
>> >>>> -import org.apache.commons.lang3.reflect.ConstructorUtils;
>> >>>> -import org.apache.commons.weaver.privilizer.Privileged;
>> >>>> -import org.apache.commons.weaver.privilizer.Privilizing;
>> >>>> -import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
>> >>>> -
>> >>>> /**
>> >>>> * Description: Represents the context that is used to create
>> >>>> * <code>ClassValidator</code> instances.<br/>
>> >>>> @@ -52,7 +37,7 @@ import org.apache.commons.weaver.privili
>> >>>> @Privilizing(@CallTo(Reflection.class))
>> >>>> public class ApacheFactoryContext implements ValidatorContext {
>> >>>> private final ApacheValidatorFactory factory;
>> >>>> - private final MetaBeanFinder metaBeanFinder;
>> >>>> + private volatile MetaBeanFinder metaBeanFinder;
>> >>>>
>> >>>> private MessageInterpolator messageInterpolator;
>> >>>> private TraversableResolver traversableResolver;
>> >>>> @@ -63,19 +48,9 @@ public class ApacheFactoryContext implem
>> >>>> * Create a new ApacheFactoryContext instance.
>> >>>> *
>> >>>> * @param factory validator factory
>> >>>> - */
>> >>>> - public ApacheFactoryContext(ApacheValidatorFactory factory) {
>> >>>> - this.factory = factory;
>> >>>> - this.metaBeanFinder = buildMetaBeanFinder();
>> >>>> - }
>> >>>> -
>> >>>> - /**
>> >>>> - * Create a new ApacheFactoryContext instance.
>> >>>> - *
>> >>>> - * @param factory validator factory
>> >>>> * @param metaBeanFinder meta finder
>> >>>> */
>> >>>> - protected ApacheFactoryContext(ApacheValidatorFactory factory,
>> >>>> MetaBeanFinder metaBeanFinder) {
>> >>>> + public ApacheFactoryContext(ApacheValidatorFactory factory,
>> >>>> MetaBeanFinder metaBeanFinder) {
>> >>>> this.factory = factory;
>> >>>> this.metaBeanFinder = metaBeanFinder;
>> >>>> }
>> >>>> @@ -99,11 +74,16 @@ public class ApacheFactoryContext implem
>> >>>> return metaBeanFinder;
>> >>>> }
>> >>>>
>> >>>> + private synchronized void resetMeta() { // ensure to ingnore the
>> >>>> cache and rebuild constraint with new model
>> >>>> + metaBeanFinder = factory.buildMetaBeanFinder();
>> >>>> + }
>> >>>> +
>> >>>> /**
>> >>>> * {@inheritDoc}
>> >>>> */
>> >>>> public ValidatorContext messageInterpolator(MessageInterpolator
>> >>>> messageInterpolator) {
>> >>>> this.messageInterpolator = messageInterpolator;
>> >>>> + resetMeta();
>> >>>> return this;
>> >>>> }
>> >>>>
>> >>>> @@ -112,6 +92,7 @@ public class ApacheFactoryContext implem
>> >>>> */
>> >>>> public ValidatorContext traversableResolver(TraversableResolver
>> >>>> traversableResolver) {
>> >>>> this.traversableResolver = traversableResolver;
>> >>>> + resetMeta();
>> >>>> return this;
>> >>>> }
>> >>>>
>> >>>> @@ -120,11 +101,13 @@ public class ApacheFactoryContext implem
>> >>>> */
>> >>>> public ValidatorContext
>> >>>> constraintValidatorFactory(ConstraintValidatorFactory
>> >>>> constraintValidatorFactory) {
>> >>>> this.constraintValidatorFactory = constraintValidatorFactory;
>> >>>> + resetMeta();
>> >>>> return this;
>> >>>> }
>> >>>>
>> >>>> public ValidatorContext
>> >> parameterNameProvider(ParameterNameProvider
>> >>>> parameterNameProvider) {
>> >>>> this.parameterNameProvider = parameterNameProvider;
>> >>>> + resetMeta();
>> >>>> return this;
>> >>>> }
>> >>>>
>> >>>> @@ -171,126 +154,4 @@ public class ApacheFactoryContext implem
>> >>>> return Boolean.parseBoolean(factory.getProperties().get(
>> >>>>
>> >>>> ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS));
>> >>>> }
>> >>>> -
>> >>>> - /**
>> >>>> - * Create MetaBeanManager that uses factories:
>> >>>> - * <ol>
>> >>>> - * <li>if enabled by
>> >>>> - * {@link
>> >>>> ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
>> >>>> - * {@link IntrospectorMetaBeanFactory}</li>
>> >>>> - * <li>{@link MetaBeanFactory} types (if any) specified by
>> >>>> - * {@link
>> >>>> ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
>> >>>> - * </li>
>> >>>> - * <li>if no {@link JsrMetaBeanFactory} has yet been specified
>> >> (this
>> >>>> - * allows factory order customization), a {@link
>> >> JsrMetaBeanFactory}
>> >>>> - * which handles both JSR303-XML and JSR303-Annotations</li>
>> >>>> - * <li>if enabled by
>> >>>> - * {@link
>> >>>> ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
>> >>>> - * {@link XMLMetaBeanFactory}</li>
>> >>>> - * </ol>
>> >>>> - *
>> >>>> - * @return a new instance of MetaBeanManager with adequate
>> >>>> MetaBeanFactories
>> >>>> - */
>> >>>> - protected MetaBeanFinder buildMetaBeanFinder() {
>> >>>> - final List<MetaBeanFactory> builders = new
>> >>>> ArrayList<MetaBeanFactory>();
>> >>>> - if (Boolean.parseBoolean(factory.getProperties().get(
>> >>>> -
>> >>>> ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
>> >>>> - builders.add(new IntrospectorMetaBeanFactory());
>> >>>> - }
>> >>>> - final String[] factoryClassNames =
>> >>>> - StringUtils.split(factory.getProperties().get(
>> >>>> -
>> >>>>
>> >>>> ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
>> >>>> - if (factoryClassNames != null) {
>> >>>> - for (String clsName : factoryClassNames) {
>> >>>> - // cast, relying on #createMetaBeanFactory to throw
>> >> the
>> >>>> exception if incompatible:
>> >>>> - @SuppressWarnings("unchecked")
>> >>>> - final Class<? extends MetaBeanFactory> factoryClass
>> >>>> =
>> >>>> (Class<? extends MetaBeanFactory>) loadClass(clsName);
>> >>>> - builders.add(createMetaBeanFactory(factoryClass));
>> >>>> - }
>> >>>> - }
>> >>>> - boolean jsrFound = false;
>> >>>> - for (MetaBeanFactory builder : builders) {
>> >>>> - jsrFound |= builder instanceof JsrMetaBeanFactory;
>> >>>> - }
>> >>>> - if (!jsrFound) {
>> >>>> - builders.add(new JsrMetaBeanFactory(this));
>> >>>> - }
>> >>>> - @SuppressWarnings("deprecation")
>> >>>> - final boolean enableMetaBeansXml =
>> >>>> - Boolean.parseBoolean(factory.getProperties().get(
>> >>>> -
>> >>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
>> >>>> - if (enableMetaBeansXml) {
>> >>>> - XMLMetaBeanManagerCreator.addFactory(builders);
>> >>>> - }
>> >>>> - return createMetaBeanManager(builders);
>> >>>> - }
>> >>>> -
>> >>>> - /**
>> >>>> - * Create a {@link MetaBeanManager} using the specified
>> >>>> builders.
>> >>>> - *
>> >>>> - * @param builders
>> >>>> - * {@link MetaBeanFactory} {@link List}
>> >>>> - * @return {@link MetaBeanManager}
>> >>>> - */
>> >>>> - @SuppressWarnings("deprecation")
>> >>>> - protected MetaBeanFinder
>> >> createMetaBeanManager(List<MetaBeanFactory>
>> >>>> builders) {
>> >>>> - // as long as we support both: jsr (in the builders list)
>> >>>> and
>> >>>> xstream-xml metabeans:
>> >>>> - if (Boolean.parseBoolean(factory.getProperties().get(
>> >>>> -
>> >>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
>> >>>> - return
>> >>>> XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
>> >>>> - }
>> >>>> - return new MetaBeanManager(new
>> >>>> MetaBeanBuilder(builders.toArray(new
>> >> MetaBeanFactory[builders.size()])));
>> >>>> - }
>> >>>> -
>> >>>> - @Privileged
>> >>>> - private <F extends MetaBeanFactory> F
>> >>>> createMetaBeanFactory(final
>> >>>> Class<F> cls) {
>> >>>> - try {
>> >>>> - Constructor<F> c =
>> >>>> ConstructorUtils.getMatchingAccessibleConstructor(cls,
>> >>>> ApacheFactoryContext.this.getClass());
>> >>>> - if (c != null) {
>> >>>> - return c.newInstance(ApacheFactoryContext.this);
>> >>>> - }
>> >>>> - c =
>> >>>> ConstructorUtils.getMatchingAccessibleConstructor(cls,
>> >>>> getFactory().getClass());
>> >>>> - if (c != null) {
>> >>>> - return c.newInstance(getFactory());
>> >>>> - }
>> >>>> - return cls.newInstance();
>> >>>> - } catch (Exception e) {
>> >>>> - throw new ValidationException(e);
>> >>>> - }
>> >>>> - }
>> >>>> -
>> >>>> - /**
>> >>>> - * separate class to prevent the classloader to immediately load
>> >>>> optional
>> >>>> - * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
>> >>>> XMLMetaBeanBuilder that
>> >>>> - * might not be available in the classpath
>> >>>> - */
>> >>>> - private static class XMLMetaBeanManagerCreator {
>> >>>> -
>> >>>> - static void addFactory(List<MetaBeanFactory> builders) {
>> >>>> - builders.add(new XMLMetaBeanFactory());
>> >>>> - }
>> >>>> -
>> >>>> - /**
>> >>>> - * Create the {@link MetaBeanManager} to process JSR303 XML.
>> >>>> Requires
>> >>>> - * bval-xstream at RT.
>> >>>> - *
>> >>>> - * @param builders meta bean builders
>> >>>> - * @return {@link MetaBeanManager}
>> >>>> - */
>> >>>> - // NOTE - We return MetaBeanManager instead of
>> >>> XMLMetaBeanManager
>> >>>> to
>> >>>> - // keep
>> >>>> - // bval-xstream an optional module.
>> >>>> - protected static MetaBeanManager
>> >>>> createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
>> >>>> - return new XMLMetaBeanManager(
>> >>>> - new XMLMetaBeanBuilder(builders.toArray(new
>> >>>> MetaBeanFactory[builders.size()])));
>> >>>> - }
>> >>>> - }
>> >>>> -
>> >>>> - private Class<?> loadClass(final String className) {
>> >>>> - try {
>> >>>> - return Class.forName(className, true,
>> >>>> Reflection.getClassLoader(ApacheFactoryContext.class));
>> >>>> - } catch (ClassNotFoundException ex) {
>> >>>> - throw new ValidationException("Unable to load class: " +
>> >>>> className, ex);
>> >>>> - }
>> >>>> - }
>> >>>> }
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -18,13 +18,24 @@
>> >>>> */
>> >>>> package org.apache.bval.jsr;
>> >>>>
>> >>>> +import org.apache.bval.IntrospectorMetaBeanFactory;
>> >>>> +import org.apache.bval.MetaBeanBuilder;
>> >>>> +import org.apache.bval.MetaBeanFactory;
>> >>>> +import org.apache.bval.MetaBeanFinder;
>> >>>> +import org.apache.bval.MetaBeanManager;
>> >>>> import org.apache.bval.jsr.xml.AnnotationIgnores;
>> >>>> import org.apache.bval.jsr.xml.MetaConstraint;
>> >>>> import org.apache.bval.jsr.xml.ValidationMappingParser;
>> >>>> import org.apache.bval.util.AccessStrategy;
>> >>>> import org.apache.bval.util.reflection.Reflection;
>> >>>> +import org.apache.bval.xml.XMLMetaBeanBuilder;
>> >>>> +import org.apache.bval.xml.XMLMetaBeanFactory;
>> >>>> +import org.apache.bval.xml.XMLMetaBeanManager;
>> >>>> import org.apache.commons.lang3.ArrayUtils;
>> >>>> import org.apache.commons.lang3.ClassUtils;
>> >>>> +import org.apache.commons.lang3.StringUtils;
>> >>>> +import org.apache.commons.lang3.reflect.ConstructorUtils;
>> >>>> +import org.apache.commons.weaver.privilizer.Privileged;
>> >>>> import org.apache.commons.weaver.privilizer.Privilizing;
>> >>>> import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
>> >>>>
>> >>>> @@ -37,9 +48,9 @@ import javax.validation.ValidationExcept
>> >>>> import javax.validation.Validator;
>> >>>> import javax.validation.ValidatorFactory;
>> >>>> import javax.validation.spi.ConfigurationState;
>> >>>> -
>> >>>> import java.io.Closeable;
>> >>>> import java.lang.annotation.Annotation;
>> >>>> +import java.lang.reflect.Constructor;
>> >>>> import java.lang.reflect.Modifier;
>> >>>> import java.util.ArrayList;
>> >>>> import java.util.Collection;
>> >>>> @@ -80,6 +91,60 @@ public class ApacheValidatorFactory impl
>> >>>> private final ConcurrentMap<Class<?>, List<MetaConstraint<?, ?
>> >>>> extends Annotation>>> constraintMap;
>> >>>>
>> >>>> private final Collection<Closeable> toClose = new
>> >>>> ArrayList<Closeable>();
>> >>>> + private final MetaBeanFinder defaultMetaBeanFinder;
>> >>>> +
>> >>>> + /**
>> >>>> + * Create MetaBeanManager that uses factories:
>> >>>> + * <ol>
>> >>>> + * <li>if enabled by
>> >>>> + * {@link
>> >>>> ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
>> >>>> + * {@link IntrospectorMetaBeanFactory}</li>
>> >>>> + * <li>{@link MetaBeanFactory} types (if any) specified by
>> >>>> + * {@link
>> >>>> ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
>> >>>> + * </li>
>> >>>> + * <li>if no {@link JsrMetaBeanFactory} has yet been specified
>> >> (this
>> >>>> + * allows factory order customization), a {@link
>> >> JsrMetaBeanFactory}
>> >>>> + * which handles both JSR303-XML and JSR303-Annotations</li>
>> >>>> + * <li>if enabled by
>> >>>> + * {@link
>> >>>> ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
>> >>>> + * {@link XMLMetaBeanFactory}</li>
>> >>>> + * </ol>
>> >>>> + *
>> >>>> + * @return a new instance of MetaBeanManager with adequate
>> >>>> MetaBeanFactories
>> >>>> + */
>> >>>> + protected MetaBeanFinder buildMetaBeanFinder() {
>> >>>> + final List<MetaBeanFactory> builders = new
>> >>>> ArrayList<MetaBeanFactory>();
>> >>>> + if (Boolean.parseBoolean(getProperties().get(
>> >>>> +
>> >>>> ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
>> >>>> + builders.add(new IntrospectorMetaBeanFactory());
>> >>>> + }
>> >>>> + final String[] factoryClassNames =
>> >>>> + StringUtils.split(getProperties().get(
>> >>>> +
>> >>>>
>> >>>> ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
>> >>>> + if (factoryClassNames != null) {
>> >>>> + for (String clsName : factoryClassNames) {
>> >>>> + // cast, relying on #createMetaBeanFactory to throw
>> >> the
>> >>>> exception if incompatible:
>> >>>> + @SuppressWarnings("unchecked")
>> >>>> + final Class<? extends MetaBeanFactory> factoryClass
>> >>>> =
>> >>>> (Class<? extends MetaBeanFactory>) loadClass(clsName);
>> >>>> + builders.add(createMetaBeanFactory(factoryClass));
>> >>>> + }
>> >>>> + }
>> >>>> + boolean jsrFound = false;
>> >>>> + for (MetaBeanFactory builder : builders) {
>> >>>> + jsrFound |= builder instanceof JsrMetaBeanFactory;
>> >>>> + }
>> >>>> + if (!jsrFound) {
>> >>>> + builders.add(new JsrMetaBeanFactory(this));
>> >>>> + }
>> >>>> + @SuppressWarnings("deprecation")
>> >>>> + final boolean enableMetaBeansXml =
>> >>>> + Boolean.parseBoolean(getProperties().get(
>> >>>> +
>> >>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
>> >>>> + if (enableMetaBeansXml) {
>> >>>> + XMLMetaBeanManagerCreator.addFactory(builders);
>> >>>> + }
>> >>>> + return createMetaBeanManager(builders);
>> >>>> + }
>> >>>>
>> >>>> /**
>> >>>> * Convenience method to retrieve a default global
>> >>>> ApacheValidatorFactory
>> >>>> @@ -110,22 +175,11 @@ public class ApacheValidatorFactory impl
>> >>>> /**
>> >>>> * Create a new ApacheValidatorFactory instance.
>> >>>> */
>> >>>> - public ApacheValidatorFactory(ConfigurationState
>> >>> configurationState) {
>> >>>> - properties = new HashMap<String, String>();
>> >>>> + public ApacheValidatorFactory(ConfigurationState configuration)
>> >>>> {
>> >>>> + properties = new HashMap<String,
>> >>>> String>(configuration.getProperties());
>> >>>> defaultSequences = new HashMap<Class<?>, Class<?>[]>();
>> >>>> validAccesses = new ConcurrentHashMap<Class<?>,
>> >>>> List<AccessStrategy>>();
>> >>>> constraintMap = new ConcurrentHashMap<Class<?>,
>> >>>> List<MetaConstraint<?, ? extends Annotation>>>();
>> >>>> - configure(configurationState);
>> >>>> - }
>> >>>> -
>> >>>> - /**
>> >>>> - * Configure this {@link ApacheValidatorFactory} from a
>> >>>> - * {@link ConfigurationState}.
>> >>>> - *
>> >>>> - * @param configuration
>> >>>> - */
>> >>>> - protected void configure(final ConfigurationState configuration)
>> >>>> {
>> >>>> - getProperties().putAll(configuration.getProperties());
>> >>>>
>> >>>> parameterNameProvider =
>> >>> configuration.getParameterNameProvider();
>> >>>> messageResolver = configuration.getMessageInterpolator();
>> >>>> @@ -138,6 +192,8 @@ public class ApacheValidatorFactory impl
>> >>>> }
>> >>>>
>> >>>> new
>> >>>>
>> >>>
>> >>
>> >> ValidationMappingParser(this).processMappingConfig(configuration.getMappingStreams());
>> >>>> +
>> >>>> + defaultMetaBeanFinder = buildMetaBeanFinder();
>> >>>> }
>> >>>>
>> >>>> /**
>> >>>> @@ -165,7 +221,7 @@ public class ApacheValidatorFactory impl
>> >>>> * @return the validator factory's context
>> >>>> */
>> >>>> public ApacheFactoryContext usingContext() {
>> >>>> - return new ApacheFactoryContext(this);
>> >>>> + return new ApacheFactoryContext(this,
>> >>>> defaultMetaBeanFinder);
>> >>>> }
>> >>>>
>> >>>> /**
>> >>>> @@ -428,4 +484,73 @@ public class ApacheValidatorFactory impl
>> >>>> private static Class<?>[] safeArray(Class<?>... array) {
>> >>>> return ArrayUtils.isEmpty(array) ?
>> >> ArrayUtils.EMPTY_CLASS_ARRAY
>> >>> :
>> >>>> ArrayUtils.clone(array);
>> >>>> }
>> >>>> +
>> >>>> + /**
>> >>>> + * Create a {@link MetaBeanManager} using the specified
>> >>>> builders.
>> >>>> + *
>> >>>> + * @param builders
>> >>>> + * {@link MetaBeanFactory} {@link List}
>> >>>> + * @return {@link MetaBeanManager}
>> >>>> + */
>> >>>> + @SuppressWarnings("deprecation")
>> >>>> + protected MetaBeanFinder
>> >> createMetaBeanManager(List<MetaBeanFactory>
>> >>>> builders) {
>> >>>> + // as long as we support both: jsr (in the builders list)
>> >>>> and
>> >>>> xstream-xml metabeans:
>> >>>> + if (Boolean.parseBoolean(getProperties().get(
>> >>>> +
>> >>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
>> >>>> + return
>> >>>> XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
>> >>>> + }
>> >>>> + return new MetaBeanManager(new
>> >>>> MetaBeanBuilder(builders.toArray(new
>> >> MetaBeanFactory[builders.size()])));
>> >>>> + }
>> >>>> +
>> >>>> + @Privileged
>> >>>> + private <F extends MetaBeanFactory> F
>> >>>> createMetaBeanFactory(final
>> >>>> Class<F> cls) {
>> >>>> + try {
>> >>>> + Constructor<F> c =
>> >>>> ConstructorUtils.getMatchingAccessibleConstructor(cls,
>> >>>> ApacheValidatorFactory.this.getClass());
>> >>>> + if (c != null) {
>> >>>> + return c.newInstance(this);
>> >>>> + }
>> >>>> + c =
>> >>>> ConstructorUtils.getMatchingAccessibleConstructor(cls,
>> >>>> getClass());
>> >>>> + if (c != null) {
>> >>>> + return c.newInstance(this);
>> >>>> + }
>> >>>> + return cls.newInstance();
>> >>>> + } catch (Exception e) {
>> >>>> + throw new ValidationException(e);
>> >>>> + }
>> >>>> + }
>> >>>> +
>> >>>> + /**
>> >>>> + * separate class to prevent the classloader to immediately load
>> >>>> optional
>> >>>> + * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
>> >>>> XMLMetaBeanBuilder that
>> >>>> + * might not be available in the classpath
>> >>>> + */
>> >>>> + private static class XMLMetaBeanManagerCreator {
>> >>>> +
>> >>>> + static void addFactory(List<MetaBeanFactory> builders) {
>> >>>> + builders.add(new XMLMetaBeanFactory());
>> >>>> + }
>> >>>> +
>> >>>> + /**
>> >>>> + * Create the {@link MetaBeanManager} to process JSR303 XML.
>> >>>> Requires
>> >>>> + * bval-xstream at RT.
>> >>>> + *
>> >>>> + * @param builders meta bean builders
>> >>>> + * @return {@link MetaBeanManager}
>> >>>> + */
>> >>>> + // NOTE - We return MetaBeanManager instead of
>> >>> XMLMetaBeanManager
>> >>>> to
>> >>>> + // keep
>> >>>> + // bval-xstream an optional module.
>> >>>> + protected static MetaBeanManager
>> >>>> createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
>> >>>> + return new XMLMetaBeanManager(
>> >>>> + new XMLMetaBeanBuilder(builders.toArray(new
>> >>>> MetaBeanFactory[builders.size()])));
>> >>>> + }
>> >>>> + }
>> >>>> +
>> >>>> + private Class<?> loadClass(final String className) {
>> >>>> + try {
>> >>>> + return Class.forName(className, true,
>> >>>> Reflection.getClassLoader(ApacheValidatorFactory.class));
>> >>>> + } catch (ClassNotFoundException ex) {
>> >>>> + throw new ValidationException("Unable to load class: " +
>> >>>> className, ex);
>> >>>> + }
>> >>>> + }
>> >>>> }
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -51,7 +51,6 @@ import javax.validation.metadata.MethodT
>> >>>> import javax.validation.metadata.ParameterDescriptor;
>> >>>> import javax.validation.metadata.PropertyDescriptor;
>> >>>> import javax.validation.metadata.ReturnValueDescriptor;
>> >>>> -
>> >>>> import java.beans.Introspector;
>> >>>> import java.lang.annotation.Annotation;
>> >>>> import java.lang.reflect.AccessibleObject;
>> >>>> @@ -329,7 +328,7 @@ public class BeanDescriptorImpl extends
>> >>>> private ExecutableMeta(final ApacheFactoryContext
>> >>> factoryContext,
>> >>>> final MetaBean metaBean1, final Collection<ConstraintDescriptor<?>>
>> >>>> constraintDescriptors) {
>> >>>> this.metaBean = metaBean1;
>> >>>> this.factoryContext = factoryContext;
>> >>>> - this.annotationProcessor = new
>> >>>> AnnotationProcessor(factoryContext);
>> >>>> + this.annotationProcessor = new
>> >>>> AnnotationProcessor(factoryContext.getFactory());
>> >>>>
>> >>>> buildExecutableDescriptors();
>> >>>>
>> >>>> @@ -840,7 +839,9 @@ public class BeanDescriptorImpl extends
>> >>>> }
>> >>>> }
>> >>>> } else {
>> >>>> - annotationProcessor.processAnnotation(annotation,
>> >> null,
>> >>>> ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
>> >>>> access,
>> >>>> validations, true);
>> >>>> + annotationProcessor.processAnnotation(
>> >>>> + annotation, null,
>> >>>> ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
>> >>>> + access, validations, true);
>> >>>> }
>> >>>> }
>> >>>>
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -638,8 +638,9 @@ public class ClassValidator implements C
>> >>>> protected <T> GroupValidationContext<T> createContext(MetaBean
>> >>>> metaBean, T object, Class<T> objectClass, Class<?>... groups) {
>> >>>> final ConstraintValidationListener<T> listener = new
>> >>>> ConstraintValidationListener<T>(object, objectClass);
>> >>>> final GroupValidationContextImpl<T> context =
>> >>>> - new GroupValidationContextImpl<T>(listener,
>> >>>> this.factoryContext.getMessageInterpolator(),
>> >>>> - this.factoryContext.getTraversableResolver(),
>> >>>> factoryContext.getParameterNameProvider(), metaBean);
>> >>>> + new GroupValidationContextImpl<T>(listener,
>> >>>> factoryContext.getMessageInterpolator(),
>> >>>> + factoryContext.getTraversableResolver(),
>> >>>> factoryContext.getParameterNameProvider(),
>> >>>> + factoryContext.getConstraintValidatorFactory(),
>> >>> metaBean);
>> >>>> context.setBean(object, metaBean);
>> >>>> context.setGroups(groupsComputer.computeGroups(groups));
>> >>>> return context;
>> >>>> @@ -648,8 +649,9 @@ public class ClassValidator implements C
>> >>>> protected <T> GroupValidationContext<T>
>> >>>> createInvocableContext(MetaBean metaBean, T object, Class<T>
>> >> objectClass,
>> >>>> Class<?>... groups) {
>> >>>> final ConstraintValidationListener<T> listener = new
>> >>>> ConstraintValidationListener<T>(object, objectClass);
>> >>>> final GroupValidationContextImpl<T> context =
>> >>>> - new GroupValidationContextImpl<T>(listener,
>> >>>> this.factoryContext.getMessageInterpolator(),
>> >>>> -
>> >>>> this.factoryContext.getTraversableResolver(),
>> >>>> factoryContext.getParameterNameProvider(), metaBean);
>> >>>> + new GroupValidationContextImpl<T>(listener,
>> >>>> factoryContext.getMessageInterpolator(),
>> >>>> + factoryContext.getTraversableResolver(),
>> >>>> factoryContext.getParameterNameProvider(),
>> >>>> +
>> >> factoryContext.getConstraintValidatorFactory(),
>> >>>> metaBean);
>> >>>> context.setBean(object, metaBean);
>> >>>> final Groups computedGroup =
>> >>> groupsComputer.computeGroups(groups);
>> >>>> if
>> >>>>
>> >>>
>> >>
>> >> (Collections.singletonList(Group.DEFAULT).equals(computedGroup.getGroups())
>> >>>> && metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -39,7 +39,6 @@ import javax.validation.ValidationExcept
>> >>>> import
>> >> javax.validation.constraintvalidation.SupportedValidationTarget;
>> >>>> import javax.validation.constraintvalidation.ValidationTarget;
>> >>>> import javax.validation.metadata.ConstraintDescriptor;
>> >>>> -
>> >>>> import java.io.Serializable;
>> >>>> import java.lang.annotation.Annotation;
>> >>>> import java.lang.reflect.Array;
>> >>>> @@ -61,7 +60,6 @@ import java.util.Set;
>> >>>> * this instance is immutable!<br/>
>> >>>> */
>> >>>> public class ConstraintValidation<T extends Annotation> implements
>> >>>> Validation, ConstraintDescriptor<T> {
>> >>>> - private final ConstraintValidatorFactory factory;
>> >>>> private final AccessStrategy access;
>> >>>> private final boolean reportFromComposite;
>> >>>> private final Map<String, Object> attributes;
>> >>>> @@ -82,11 +80,9 @@ public class ConstraintValidation<T exte
>> >>>> private Class<? extends ConstraintValidator<T, ?>>[]
>> >>> validatorClasses;
>> >>>> private ConstraintTarget validationAppliesTo = null;
>> >>>>
>> >>>> - public ConstraintValidation(ConstraintValidatorFactory factory,
>> >>>> - Class<? extends
>> >>>> ConstraintValidator<T,
>> >>>> ?>>[] validatorClasses,
>> >>>> + public ConstraintValidation(Class<? extends
>> >>>> ConstraintValidator<T,
>> >>>> ?>>[] validatorClasses,
>> >>>> T annotation, Class<?> owner,
>> >>>> AccessStrategy access,
>> >>>> boolean reportFromComposite,
>> >>>> ConstraintTarget target) {
>> >>>> - this.factory = factory;
>> >>>> this.attributes = new HashMap<String, Object>();
>> >>>> this.validatorClasses = ArrayUtils.clone(validatorClasses);
>> >>>> this.annotation = annotation;
>> >>>> @@ -158,7 +154,8 @@ public class ConstraintValidation<T exte
>> >>>> synchronized (this) {
>> >>>> if (validator == null) {
>> >>>> try {
>> >>>> - validator =
>> >>>> getConstraintValidator(annotation,
>> >>>> validatorClasses, owner, access);
>> >>>> + validator = getConstraintValidator(
>> >>>> +
>> >> context.getConstraintValidatorFactory(),
>> >>>> annotation, validatorClasses, owner, access);
>> >>>> if (validator != null) {
>> >>>> validator.initialize(annotation);
>> >>>> }
>> >>>> @@ -235,7 +232,8 @@ public class ConstraintValidation<T exte
>> >>>> }
>> >>>> }
>> >>>>
>> >>>> - private <A extends Annotation> ConstraintValidator<A, ? super T>
>> >>>> getConstraintValidator(A annotation,
>> >>>> + private <A extends Annotation> ConstraintValidator<A, ? super T>
>> >>>> getConstraintValidator(
>> >>>> + ConstraintValidatorFactory factory, A annotation,
>> >>>> Class<? extends ConstraintValidator<A, ?>>[]
>> >> constraintClasses,
>> >>>> Class<?> owner, AccessStrategy access) {
>> >>>> if (ArrayUtils.isNotEmpty(constraintClasses)) {
>> >>>> final Type type = determineTargetedType(owner, access);
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -24,6 +24,7 @@ import org.apache.bval.model.MetaBean;
>> >>>> import org.apache.bval.model.ValidationContext;
>> >>>>
>> >>>> import javax.validation.ConstraintValidator;
>> >>>> +import javax.validation.ConstraintValidatorFactory;
>> >>>> import javax.validation.ElementKind;
>> >>>> import javax.validation.MessageInterpolator;
>> >>>> import javax.validation.ParameterNameProvider;
>> >>>> @@ -107,6 +108,12 @@ public interface GroupValidationContext<
>> >>>> TraversableResolver getTraversableResolver();
>> >>>>
>> >>>> /**
>> >>>> + * Get the {@link ConstraintValidatorFactory}.
>> >>>> + * @return {@link ConstraintValidatorFactory}
>> >>>> + */
>> >>>> + ConstraintValidatorFactory getConstraintValidatorFactory();
>> >>>> +
>> >>>> + /**
>> >>>> * Accumulate a validated constraint.
>> >>>> * @param constraint
>> >>>> * @return true when the constraint for the object in this path
>> >> was
>> >>>> not
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -27,6 +27,7 @@ import org.apache.bval.model.MetaPropert
>> >>>> import org.apache.bval.util.AccessStrategy;
>> >>>>
>> >>>> import javax.validation.ConstraintValidator;
>> >>>> +import javax.validation.ConstraintValidatorFactory;
>> >>>> import javax.validation.ElementKind;
>> >>>> import javax.validation.MessageInterpolator;
>> >>>> import javax.validation.ParameterNameProvider;
>> >>>> @@ -70,6 +71,7 @@ final class GroupValidationContextImpl<T
>> >>>>
>> >>>> private ConstraintValidation<?> constraintValidation;
>> >>>> private final TraversableResolver traversableResolver;
>> >>>> + private final ConstraintValidatorFactory
>> >> constraintValidatorFactory;
>> >>>>
>> >>>> private Object[] parameters;
>> >>>> private Object returnValue;
>> >>>> @@ -86,11 +88,14 @@ final class GroupValidationContextImpl<T
>> >>>> * @param rootMetaBean
>> >>>> */
>> >>>> public GroupValidationContextImpl(ConstraintValidationListener<T>
>> >>>> listener, MessageInterpolator aMessageResolver,
>> >>>> - TraversableResolver
>> >>>> traversableResolver, ParameterNameProvider parameterNameProvider,
>> >>> MetaBean
>> >>>> rootMetaBean) {
>> >>>> + TraversableResolver
>> >>>> traversableResolver, ParameterNameProvider parameterNameProvider,
>> >>>> + ConstraintValidatorFactory
>> >>>> constraintValidatorFactory,
>> >>>> + MetaBean rootMetaBean) {
>> >>>> // inherited variable 'validatedObjects' is of type:
>> >>>> // HashMap<GraphBeanIdentity, Set<PathImpl>> in this class
>> >>>> super(listener, new HashMap<GraphBeanIdentity,
>> >>> Set<PathImpl>>());
>> >>>> this.messageResolver = aMessageResolver;
>> >>>> + this.constraintValidatorFactory =
>> >>>> constraintValidatorFactory;
>> >>>> this.traversableResolver =
>> >>>> CachingTraversableResolver.cacheFor(traversableResolver);
>> >>>> this.parameterNameProvider = parameterNameProvider;
>> >>>> this.rootMetaBean = rootMetaBean;
>> >>>> @@ -313,6 +318,11 @@ final class GroupValidationContextImpl<T
>> >>>> return traversableResolver;
>> >>>> }
>> >>>>
>> >>>> + @Override
>> >>>> + public ConstraintValidatorFactory
>> >>>> getConstraintValidatorFactory()
>> >> {
>> >>>> + return constraintValidatorFactory;
>> >>>> + }
>> >>>> +
>> >>>> /**
>> >>>> * {@inheritDoc}
>> >>>> */
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>>
>> >>
>> >> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -63,8 +63,8 @@ public class JsrMetaBeanFactory implemen
>> >>>> // of dubious utility as it's static :/
>> >>>> protected static final Logger log =
>> >>>> Logger.getLogger(JsrMetaBeanFactory.class.getName());
>> >>>>
>> >>>> - /** {@link ApacheFactoryContext} used */
>> >>>> - protected final ApacheFactoryContext factoryContext;
>> >>>> + /** {@link javax.validation.ValidatorFactory} used */
>> >>>> + protected final ApacheValidatorFactory factory;
>> >>>>
>> >>>> /**
>> >>>> * {@link AnnotationProcessor} used.
>> >>>> @@ -74,11 +74,11 @@ public class JsrMetaBeanFactory implemen
>> >>>> /**
>> >>>> * Create a new Jsr303MetaBeanFactory instance.
>> >>>> *
>> >>>> - * @param factoryContext
>> >>>> + * @param factory the validator factory.
>> >>>> */
>> >>>> - public JsrMetaBeanFactory(ApacheFactoryContext factoryContext) {
>> >>>> - this.factoryContext = factoryContext;
>> >>>> - this.annotationProcessor = new
>> >>>> AnnotationProcessor(factoryContext);
>> >>>> + public JsrMetaBeanFactory(ApacheValidatorFactory factory) {
>> >>>> + this.factory = factory;
>> >>>> + this.annotationProcessor = new AnnotationProcessor(factory);
>> >>>> }
>> >>>>
>> >>>> /**
>> >>>> @@ -123,7 +123,7 @@ public class JsrMetaBeanFactory implemen
>> >>>> InvocationTargetException {
>> >>>>
>> >>>> // if NOT ignore class level annotations
>> >>>> - if
>> >>>>
>> >>>
>> >>
>> >> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(beanClass))
>> >>>> {
>> >>>> + if
>> >>>> (!factory.getAnnotationIgnores().isIgnoreAnnotations(beanClass)) {
>> >>>> annotationProcessor.processAnnotations(null, beanClass,
>> >>>> beanClass, null, new AppendValidationToMeta(metabean));
>> >>>> }
>> >>>>
>> >>>> @@ -134,7 +134,7 @@ public class JsrMetaBeanFactory implemen
>> >>>> MetaProperty metaProperty =
>> >>>> metabean.getProperty(field.getName());
>> >>>> // create a property for those fields for which there is
>> >> not
>> >>>> yet a
>> >>>> // MetaProperty
>> >>>> - if
>> >>>>
>> >>>
>> >>
>> >> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(field))
>> >>>> {
>> >>>> + if
>> >>>> (!factory.getAnnotationIgnores().isIgnoreAnnotations(field)) {
>> >>>> AccessStrategy access = new FieldAccess(field);
>> >>>> boolean create = metaProperty == null;
>> >>>> if (create) {
>> >>>> @@ -160,7 +160,7 @@ public class JsrMetaBeanFactory implemen
>> >>>> propName = MethodAccess.getPropertyName(method);
>> >>>> }
>> >>>> if (propName != null) {
>> >>>> - if
>> >>>>
>> >>>
>> >>
>> >> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(method))
>> >>>> {
>> >>>> + if
>> >>>> (!factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
>> >>>> AccessStrategy access = new
>> >>>> MethodAccess(propName,
>> >>>> method);
>> >>>> MetaProperty metaProperty =
>> >>>> metabean.getProperty(propName);
>> >>>> boolean create = metaProperty == null;
>> >>>> @@ -198,7 +198,7 @@ public class JsrMetaBeanFactory implemen
>> >>>> */
>> >>>> private void addXmlConstraints(Class<?> beanClass, MetaBean
>> >>> metabean)
>> >>>> throws IllegalAccessException,
>> >>>> InvocationTargetException {
>> >>>> - for (final MetaConstraint<?, ? extends Annotation>
>> >>> metaConstraint
>> >>>> : factoryContext.getFactory().getMetaConstraints(beanClass)) {
>> >>>> + for (final MetaConstraint<?, ? extends Annotation>
>> >>> metaConstraint
>> >>>> : factory.getMetaConstraints(beanClass)) {
>> >>>> Meta meta;
>> >>>> AccessStrategy access =
>> >> metaConstraint.getAccessStrategy();
>> >>>> boolean create = false;
>> >>>> @@ -263,7 +263,7 @@ public class JsrMetaBeanFactory implemen
>> >>>> metabean.putProperty(access.getPropertyName(), null);
>> >>>> }
>> >>>> }
>> >>>> - for (final AccessStrategy access :
>> >>>> factoryContext.getFactory().getValidAccesses(beanClass)) {
>> >>>> + for (final AccessStrategy access :
>> >>>> factory.getValidAccesses(beanClass)) {
>> >>>> if (access.getElementType() == ElementType.PARAMETER) {
>> >>>> continue;
>> >>>> }
>> >>>> @@ -289,7 +289,7 @@ public class JsrMetaBeanFactory implemen
>> >>>> if (groupSeq == null) {
>> >>>> groupSeq = metabean.initFeature(key, new
>> >>>> ArrayList<Group>(annotation == null ? 1 :
>> >>>> annotation.value().length));
>> >>>> }
>> >>>> - Class<?>[] groupClasses =
>> >>>> factoryContext.getFactory().getDefaultSequence(beanClass);
>> >>>> + Class<?>[] groupClasses =
>> >> factory.getDefaultSequence(beanClass);
>> >>>> if (groupClasses == null || groupClasses.length == 0) {
>> >>>> if (annotation == null) {
>> >>>> groupSeq.add(Group.DEFAULT);
>> >>>>
>> >>>> Modified:
>> >>>>
>> >>
>> >> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> ---
>> >>>>
>> >>
>> >> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
>> >>>> (original)
>> >>>> +++
>> >>>>
>> >>
>> >> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
>> >>>> Wed Dec 23 12:45:01 2015
>> >>>> @@ -89,6 +89,10 @@ public class ValidationTest extends Test
>> >>>> return factory.getValidator();
>> >>>> }
>> >>>>
>> >>>> + public void testCache() {
>> >>>> +
>> >>>>
>> >>>
>> >>
>> >> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
>> >>>> +
>> >>>>
>> >>>
>> >>
>> >> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
>> >>>> + }
>> >>>> public void testAccessStrategies_field_method() {
>> >>>> AccessTestBusinessObject o1 = new
>> >> AccessTestBusinessObject("1");
>> >>>> AccessTestBusinessObjectSub o2 = new
>> >>>> AccessTestBusinessObjectSub("3");
>> >>>>
>> >>>> Modified: bval/trunk/bval-tck/pom.xml
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/bval-tck/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> --- bval/trunk/bval-tck/pom.xml (original)
>> >>>> +++ bval/trunk/bval-tck/pom.xml Wed Dec 23 12:45:01 2015
>> >>>> @@ -169,6 +169,55 @@
>> >>>> <version>1.0.0</version>
>> >>>> </dependency>
>> >>>> </dependencies>
>> >>>> + <repositories>
>> >>>> + <repository>
>> >>>> + <!-- override outdated URLs for jboss repo ids
>> >>>> -->
>> >>>> + <id>repository.jboss.org</id>
>> >>>> + <name>JBoss Public Maven Repository Group</name>
>> >>>> + <url>
>> >>>> https://repository.jboss.org/nexus/content/groups/public/</url>
>> >>>> + <layout>default</layout>
>> >>>> + <releases>
>> >>>> + <enabled>true</enabled>
>> >>>> + <updatePolicy>never</updatePolicy>
>> >>>> + <checksumPolicy>fail</checksumPolicy>
>> >>>> + </releases>
>> >>>> + <snapshots>
>> >>>> + <enabled>false</enabled>
>> >>>> + <updatePolicy>never</updatePolicy>
>> >>>> + <checksumPolicy>warn</checksumPolicy>
>> >>>> + </snapshots>
>> >>>> + </repository>
>> >>>> + <repository>
>> >>>> + <id>jboss</id>
>> >>>> + <name>JBoss Public Maven Repository Group
>> >>>> (again)</name>
>> >>>> + <url>
>> >>>> https://repository.jboss.org/nexus/content/groups/public/</url>
>> >>>> + <layout>default</layout>
>> >>>> + <releases>
>> >>>> + <enabled>true</enabled>
>> >>>> + <updatePolicy>never</updatePolicy>
>> >>>> + <checksumPolicy>fail</checksumPolicy>
>> >>>> + </releases>
>> >>>> + <snapshots>
>> >>>> + <enabled>false</enabled>
>> >>>> + <updatePolicy>never</updatePolicy>
>> >>>> + <checksumPolicy>warn</checksumPolicy>
>> >>>> + </snapshots>
>> >>>> + </repository>
>> >>>> + <repository>
>> >>>> + <id>snapshots.jboss.org</id>
>> >>>> + <url>
>> >>>> https://repository.jboss.org/nexus/content/repositories/snapshots/
>> >> </url>
>> >>>> + <snapshots>
>> >>>> + <enabled>true</enabled>
>> >>>> + </snapshots>
>> >>>> + </repository>
>> >>>> + <repository>
>> >>>> + <id>jboss-snapshots</id>
>> >>>> + <url>
>> >>>> https://repository.jboss.org/nexus/content/repositories/snapshots/
>> >> </url>
>> >>>> + <snapshots>
>> >>>> + <enabled>true</enabled>
>> >>>> + </snapshots>
>> >>>> + </repository>
>> >>>> + </repositories>
>> >>>> <build>
>> >>>> <plugins>
>> >>>> <plugin>
>> >>>>
>> >>>> Modified: bval/trunk/pom.xml
>> >>>> URL:
>> >>>>
>> >>>
>> >>
>> >> http://svn.apache.org/viewvc/bval/trunk/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
>> >>>>
>> >>>>
>> >>>
>> >>
>> >> ==============================================================================
>> >>>> --- bval/trunk/pom.xml (original)
>> >>>> +++ bval/trunk/pom.xml Wed Dec 23 12:45:01 2015
>> >>>> @@ -571,6 +571,7 @@
>> >>>>
>> >> <artifactId>commons-weaver-maven-plugin</artifactId>
>> >>>> <version>${commons.weaver.version}</version>
>> >>>> <configuration>
>> >>>> + <verbose>true</verbose>
>> >>>> <weaverConfig>
>> >>>>
>> >>> <privilizer.policy>DYNAMIC</privilizer.policy>
>> >>>> </weaverConfig>
>> >>>>
>> >>>>
>> >>>>
>> >>>>
>> >>>
>> >>
>>
>
Re: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
bval-jsr/src/main/java/org/apache/bval/jsr/ bval-jsr/src/test/java/org/apache/bval/jsr/
bval-tck/
Posted by Romain Manni-Bucau <rm...@gmail.com>.
Think Matt is on it
Le 4 janv. 2016 09:44, "Mark Struberg" <st...@yahoo.de> a écrit :
> Means we should push for releasing commons-weaver first, right?
>
> LieGrue,
> strub
>
>
> > Am 23.12.2015 um 18:14 schrieb Romain Manni-Bucau <rmannibucau@gmail.com
> >:
> >
> > yep the loop with a constant index was not loved by the runtime ;)
> >
> > FYI this issue (the real one not the weaver one) was triggered by a user
> > which got very bad perfs upgrading to 1.1 so I'd like to get this out
> ASAP
> > and if anyone has time for a review it would be really welcomed.
> >
> >
> > Romain Manni-Bucau
> > @rmannibucau <https://twitter.com/rmannibucau> | Blog
> > <http://rmannibucau.wordpress.com> | Github <
> https://github.com/rmannibucau> |
> > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> > <http://www.tomitribe.com>
> >
> > 2015-12-23 18:11 GMT+01:00 Matt Benson <gu...@gmail.com>:
> >
> >> You got it. :-)
> >>
> >> Matt
> >> On Dec 23, 2015 9:48 AM, "Romain Manni-Bucau" <rm...@gmail.com>
> >> wrote:
> >>
> >>> seems a bug in 1.1 of [weaver], looks fixed in coming 1.2 so just
> >> deployed
> >>> the snapshot and upgraded in bval to the snapshot
> >>>
> >>>
> >>> Romain Manni-Bucau
> >>> @rmannibucau <https://twitter.com/rmannibucau> | Blog
> >>> <http://rmannibucau.wordpress.com> | Github <
> >>> https://github.com/rmannibucau> |
> >>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> >>> <http://www.tomitribe.com>
> >>>
> >>> 2015-12-23 13:47 GMT+01:00 Romain Manni-Bucau <rm...@gmail.com>:
> >>>
> >>>> Hi guys
> >>>>
> >>>> I would need some help for commons-weaver-maven-plugin setup, i
> >> commented
> >>>> it out cause it was just hanging. Any inputs/help on that?
> >>>>
> >>>> Romain Manni-Bucau
> >>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog
> >>>> <http://rmannibucau.wordpress.com> | Github
> >>>> <https://github.com/rmannibucau> | LinkedIn
> >>>> <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> >>>> <http://www.tomitribe.com>
> >>>>
> >>>> ---------- Forwarded message ----------
> >>>> From: <rm...@apache.org>
> >>>> Date: 2015-12-23 13:45 GMT+01:00
> >>>> Subject: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
> >>>> bval-jsr/src/main/java/org/apache/bval/jsr/
> >>>> bval-jsr/src/test/java/org/apache/bval/jsr/ bval-tck/
> >>>> To: commits@bval.apache.org
> >>>>
> >>>>
> >>>> Author: rmannibucau
> >>>> Date: Wed Dec 23 12:45:01 2015
> >>>> New Revision: 1721536
> >>>>
> >>>> URL: http://svn.apache.org/viewvc?rev=1721536&view=rev
> >>>> Log:
> >>>> BVAL-143 caching should be hold by the factory or shouldnt be for
> >>>> performance reason + reactivating jboss repo since tck (1.0) modules
> >> are
> >>>> not on central
> >>>>
> >>>> Modified:
> >>>> bval/trunk/bval-jsr/pom.xml
> >>>>
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> >>>>
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> >>>>
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> >>>>
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> >>>>
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> >>>>
> >>>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> >>>>
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> >>>>
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> >>>>
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> >>>>
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> >>>>
> >>>>
> >>
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> >>>> bval/trunk/bval-tck/pom.xml
> >>>> bval/trunk/pom.xml
> >>>>
> >>>> Modified: bval/trunk/bval-jsr/pom.xml
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> --- bval/trunk/bval-jsr/pom.xml (original)
> >>>> +++ bval/trunk/bval-jsr/pom.xml Wed Dec 23 12:45:01 2015
> >>>> @@ -297,10 +297,12 @@
> >>>> </includes>
> >>>> </configuration>
> >>>> </plugin>
> >>>> + <!-- TODO: activate but ATM it just doesnt build with it
> >>>> <plugin>
> >>>> <groupId>org.apache.commons</groupId>
> >>>> <artifactId>commons-weaver-maven-plugin</artifactId>
> >>>> </plugin>
> >>>> + -->
> >>>> </plugins>
> >>>> </build>
> >>>> </project>
> >>>>
> >>>> Modified:
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -18,6 +18,23 @@
> >>>> */
> >>>> package org.apache.bval.jsr;
> >>>>
> >>>> +import org.apache.bval.jsr.groups.GroupsComputer;
> >>>> +import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
> >>>> +import org.apache.bval.util.AccessStrategy;
> >>>> +import org.apache.commons.lang3.ArrayUtils;
> >>>> +import org.apache.commons.lang3.reflect.TypeUtils;
> >>>> +import org.apache.commons.weaver.privilizer.Privileged;
> >>>> +
> >>>> +import javax.validation.Constraint;
> >>>> +import javax.validation.ConstraintDeclarationException;
> >>>> +import javax.validation.ConstraintDefinitionException;
> >>>> +import javax.validation.ConstraintTarget;
> >>>> +import javax.validation.ConstraintValidator;
> >>>> +import javax.validation.OverridesAttribute;
> >>>> +import javax.validation.Payload;
> >>>> +import javax.validation.ReportAsSingleViolation;
> >>>> +import
> >> javax.validation.constraintvalidation.SupportedValidationTarget;
> >>>> +import javax.validation.constraintvalidation.ValidationTarget;
> >>>> import java.lang.annotation.Annotation;
> >>>> import java.lang.reflect.InvocationTargetException;
> >>>> import java.lang.reflect.Method;
> >>>> @@ -32,25 +49,6 @@ import java.util.Set;
> >>>> import java.util.logging.Level;
> >>>> import java.util.logging.Logger;
> >>>>
> >>>> -import javax.validation.Constraint;
> >>>> -import javax.validation.ConstraintDeclarationException;
> >>>> -import javax.validation.ConstraintDefinitionException;
> >>>> -import javax.validation.ConstraintTarget;
> >>>> -import javax.validation.ConstraintValidator;
> >>>> -import javax.validation.ConstraintValidatorFactory;
> >>>> -import javax.validation.OverridesAttribute;
> >>>> -import javax.validation.Payload;
> >>>> -import javax.validation.ReportAsSingleViolation;
> >>>> -import
> >> javax.validation.constraintvalidation.SupportedValidationTarget;
> >>>> -import javax.validation.constraintvalidation.ValidationTarget;
> >>>> -
> >>>> -import org.apache.bval.jsr.groups.GroupsComputer;
> >>>> -import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
> >>>> -import org.apache.bval.util.AccessStrategy;
> >>>> -import org.apache.commons.lang3.ArrayUtils;
> >>>> -import org.apache.commons.lang3.reflect.TypeUtils;
> >>>> -import org.apache.commons.weaver.privilizer.Privileged;
> >>>> -
> >>>> /**
> >>>> * Description: helper class that builds a {@link
> >> ConstraintValidation}
> >>>> or its
> >>>> * composite constraint validations by parsing the jsr-annotations and
> >>>> @@ -64,19 +62,19 @@ final class AnnotationConstraintBuilder<
> >>>>
> >>>> /**
> >>>> * Create a new AnnotationConstraintBuilder instance.
> >>>> - *
> >>>> + *
> >>>> * @param validatorClasses
> >>>> * @param annotation
> >>>> * @param owner
> >>>> * @param access
> >>>> */
> >>>> - public AnnotationConstraintBuilder(ConstraintValidatorFactory
> >>> factory,
> >>>> - Class<? extends ConstraintValidator<A, ?>>[]
> >> validatorClasses, A
> >>>> annotation, Class<?> owner,
> >>>> - AccessStrategy access, ConstraintTarget target) {
> >>>> + public AnnotationConstraintBuilder(
> >>>> + Class<? extends ConstraintValidator<A, ?>>[]
> >>>> validatorClasses, A annotation, Class<?> owner,
> >>>> + AccessStrategy access, ConstraintTarget target) {
> >>>> final boolean reportFromComposite =
> >>>> annotation != null &&
> >>>>
> >>>
> >>
> annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
> >>>> constraintValidation =
> >>>> - new ConstraintValidation<A>(factory, validatorClasses,
> >>>> annotation, owner, access, reportFromComposite,
> >>>> + new ConstraintValidation<A>(validatorClasses, annotation,
> >>>> owner, access, reportFromComposite,
> >>>> target);
> >>>> buildFromAnnotation();
> >>>> }
> >>>> @@ -259,7 +257,7 @@ final class AnnotationConstraintBuilder<
> >>>>
> >>>> /**
> >>>> * Get the configured {@link ConstraintValidation}.
> >>>> - *
> >>>> + *
> >>>> * @return {@link ConstraintValidation}
> >>>> */
> >>>> public ConstraintValidation<?> getConstraintValidation() {
> >>>> @@ -309,7 +307,7 @@ final class AnnotationConstraintBuilder<
> >>>> * Calculates the index of the composite constraint. The index
> >>>> represents
> >>>> * the order in which it is added in reference to other
> >> constraints
> >>>> of the
> >>>> * same type.
> >>>> - *
> >>>> + *
> >>>> * @param composite
> >>>> * The composite constraint (not yet added).
> >>>> * @return An integer index always >= 0
> >>>>
> >>>> Modified:
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -34,7 +34,6 @@ import javax.validation.constraintvalida
> >>>> import javax.validation.constraintvalidation.ValidationTarget;
> >>>> import javax.validation.groups.ConvertGroup;
> >>>> import javax.validation.groups.Default;
> >>>> -
> >>>> import java.lang.annotation.Annotation;
> >>>> import java.lang.reflect.AnnotatedElement;
> >>>> import java.lang.reflect.InvocationTargetException;
> >>>> @@ -50,15 +49,15 @@ import java.util.Set;
> >>>> @Privilizing(@CallTo(Reflection.class))
> >>>> public final class AnnotationProcessor {
> >>>> /** {@link ApacheFactoryContext} used */
> >>>> - private final ApacheFactoryContext factoryContext;
> >>>> + private final ApacheValidatorFactory factory;
> >>>>
> >>>> /**
> >>>> * Create a new {@link AnnotationProcessor} instance.
> >>>> *
> >>>> - * @param factoryContext
> >>>> + * @param factory the validator factory.
> >>>> */
> >>>> - public AnnotationProcessor(ApacheFactoryContext factoryContext) {
> >>>> - this.factoryContext = factoryContext;
> >>>> + public AnnotationProcessor(ApacheValidatorFactory factory) {
> >>>> + this.factory = factory;
> >>>> }
> >>>>
> >>>> /**
> >>>> @@ -112,7 +111,7 @@ public final class AnnotationProcessor {
> >>>> * @throws InvocationTargetException
> >>>> */
> >>>> public <A extends Annotation> boolean processAnnotation(A
> >>> annotation,
> >>>> Meta prop, Class<?> owner,
> >>>> - AccessStrategy access, AppendValidation appender, boolean
> >>>> reflection) throws IllegalAccessException,
> >>>> + AccessStrategy access, AppendValidation appender, boolean
> >>>> reflection) throws IllegalAccessException,
> >>>> InvocationTargetException {
> >>>> if (annotation instanceof Valid) {
> >>>> return addAccessStrategy(prop, access);
> >>>> @@ -204,12 +203,11 @@ public final class AnnotationProcessor {
> >>>> }
> >>>> final Class<A> annotationType = (Class<A>)
> >>>> annotation.annotationType();
> >>>> Class<? extends ConstraintValidator<A, ?>>[] validatorClasses
> >> =
> >>>> -
> >>>>
> >>>
> >>
> factoryContext.getFactory().getConstraintsCache().getConstraintValidators(annotationType);
> >>>> +
> >>>> factory.getConstraintsCache().getConstraintValidators(annotationType);
> >>>> if (validatorClasses == null) {
> >>>> validatorClasses = (Class<? extends ConstraintValidator<A,
> >>>> ?>>[]) vcAnno.validatedBy();
> >>>> if (validatorClasses.length == 0) {
> >>>> - validatorClasses =
> >>>> -
> >>>>
> >>>
> >>
> factoryContext.getFactory().getDefaultConstraints().getValidatorClasses(annotationType);
> >>>> + validatorClasses =
> >>>> factory.getDefaultConstraints().getValidatorClasses(annotationType);
> >>>> }
> >>>> }
> >>>> return validatorClasses;
> >>>> @@ -234,7 +232,8 @@ public final class AnnotationProcessor {
> >>>> * @throws IllegalAccessException
> >>>> * @throws InvocationTargetException
> >>>> */
> >>>> - private <A extends Annotation> boolean applyConstraint(A
> >> annotation,
> >>>> + private <A extends Annotation> boolean applyConstraint(
> >>>> + A annotation,
> >>>> Class<? extends ConstraintValidator<A, ?>>[]
> >>>> rawConstraintClasses, Meta prop, Class<?> owner,
> >>>> AccessStrategy access, AppendValidation appender) throws
> >>>> IllegalAccessException, InvocationTargetException {
> >>>>
> >>>> @@ -244,7 +243,8 @@ public final class AnnotationProcessor {
> >>>> }
> >>>>
> >>>> final AnnotationConstraintBuilder<A> builder =
> >>>> - new
> >>>>
> >>>
> >>
> AnnotationConstraintBuilder<A>(factoryContext.getConstraintValidatorFactory(),
> >>>> constraintClasses,
> >>>> + new AnnotationConstraintBuilder<A>(
> >>>> + constraintClasses,
> >>>> annotation, owner, access, null);
> >>>>
> >>>> // JSR-303 3.4.4: Add implicit groups
> >>>>
> >>>> Modified:
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -18,33 +18,18 @@
> >>>> */
> >>>> package org.apache.bval.jsr;
> >>>>
> >>>> -import java.lang.reflect.Constructor;
> >>>> -import java.util.ArrayList;
> >>>> -import java.util.List;
> >>>> +import org.apache.bval.MetaBeanFinder;
> >>>> +import org.apache.bval.util.reflection.Reflection;
> >>>> +import org.apache.commons.weaver.privilizer.Privilizing;
> >>>> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> >>>>
> >>>> import javax.validation.ConstraintValidatorFactory;
> >>>> import javax.validation.MessageInterpolator;
> >>>> import javax.validation.ParameterNameProvider;
> >>>> import javax.validation.TraversableResolver;
> >>>> -import javax.validation.ValidationException;
> >>>> import javax.validation.Validator;
> >>>> import javax.validation.ValidatorContext;
> >>>>
> >>>> -import org.apache.bval.IntrospectorMetaBeanFactory;
> >>>> -import org.apache.bval.MetaBeanBuilder;
> >>>> -import org.apache.bval.MetaBeanFactory;
> >>>> -import org.apache.bval.MetaBeanFinder;
> >>>> -import org.apache.bval.MetaBeanManager;
> >>>> -import org.apache.bval.util.reflection.Reflection;
> >>>> -import org.apache.bval.xml.XMLMetaBeanBuilder;
> >>>> -import org.apache.bval.xml.XMLMetaBeanFactory;
> >>>> -import org.apache.bval.xml.XMLMetaBeanManager;
> >>>> -import org.apache.commons.lang3.StringUtils;
> >>>> -import org.apache.commons.lang3.reflect.ConstructorUtils;
> >>>> -import org.apache.commons.weaver.privilizer.Privileged;
> >>>> -import org.apache.commons.weaver.privilizer.Privilizing;
> >>>> -import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> >>>> -
> >>>> /**
> >>>> * Description: Represents the context that is used to create
> >>>> * <code>ClassValidator</code> instances.<br/>
> >>>> @@ -52,7 +37,7 @@ import org.apache.commons.weaver.privili
> >>>> @Privilizing(@CallTo(Reflection.class))
> >>>> public class ApacheFactoryContext implements ValidatorContext {
> >>>> private final ApacheValidatorFactory factory;
> >>>> - private final MetaBeanFinder metaBeanFinder;
> >>>> + private volatile MetaBeanFinder metaBeanFinder;
> >>>>
> >>>> private MessageInterpolator messageInterpolator;
> >>>> private TraversableResolver traversableResolver;
> >>>> @@ -63,19 +48,9 @@ public class ApacheFactoryContext implem
> >>>> * Create a new ApacheFactoryContext instance.
> >>>> *
> >>>> * @param factory validator factory
> >>>> - */
> >>>> - public ApacheFactoryContext(ApacheValidatorFactory factory) {
> >>>> - this.factory = factory;
> >>>> - this.metaBeanFinder = buildMetaBeanFinder();
> >>>> - }
> >>>> -
> >>>> - /**
> >>>> - * Create a new ApacheFactoryContext instance.
> >>>> - *
> >>>> - * @param factory validator factory
> >>>> * @param metaBeanFinder meta finder
> >>>> */
> >>>> - protected ApacheFactoryContext(ApacheValidatorFactory factory,
> >>>> MetaBeanFinder metaBeanFinder) {
> >>>> + public ApacheFactoryContext(ApacheValidatorFactory factory,
> >>>> MetaBeanFinder metaBeanFinder) {
> >>>> this.factory = factory;
> >>>> this.metaBeanFinder = metaBeanFinder;
> >>>> }
> >>>> @@ -99,11 +74,16 @@ public class ApacheFactoryContext implem
> >>>> return metaBeanFinder;
> >>>> }
> >>>>
> >>>> + private synchronized void resetMeta() { // ensure to ingnore the
> >>>> cache and rebuild constraint with new model
> >>>> + metaBeanFinder = factory.buildMetaBeanFinder();
> >>>> + }
> >>>> +
> >>>> /**
> >>>> * {@inheritDoc}
> >>>> */
> >>>> public ValidatorContext messageInterpolator(MessageInterpolator
> >>>> messageInterpolator) {
> >>>> this.messageInterpolator = messageInterpolator;
> >>>> + resetMeta();
> >>>> return this;
> >>>> }
> >>>>
> >>>> @@ -112,6 +92,7 @@ public class ApacheFactoryContext implem
> >>>> */
> >>>> public ValidatorContext traversableResolver(TraversableResolver
> >>>> traversableResolver) {
> >>>> this.traversableResolver = traversableResolver;
> >>>> + resetMeta();
> >>>> return this;
> >>>> }
> >>>>
> >>>> @@ -120,11 +101,13 @@ public class ApacheFactoryContext implem
> >>>> */
> >>>> public ValidatorContext
> >>>> constraintValidatorFactory(ConstraintValidatorFactory
> >>>> constraintValidatorFactory) {
> >>>> this.constraintValidatorFactory = constraintValidatorFactory;
> >>>> + resetMeta();
> >>>> return this;
> >>>> }
> >>>>
> >>>> public ValidatorContext
> >> parameterNameProvider(ParameterNameProvider
> >>>> parameterNameProvider) {
> >>>> this.parameterNameProvider = parameterNameProvider;
> >>>> + resetMeta();
> >>>> return this;
> >>>> }
> >>>>
> >>>> @@ -171,126 +154,4 @@ public class ApacheFactoryContext implem
> >>>> return Boolean.parseBoolean(factory.getProperties().get(
> >>>>
> >>>> ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS));
> >>>> }
> >>>> -
> >>>> - /**
> >>>> - * Create MetaBeanManager that uses factories:
> >>>> - * <ol>
> >>>> - * <li>if enabled by
> >>>> - * {@link
> >>>> ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
> >>>> - * {@link IntrospectorMetaBeanFactory}</li>
> >>>> - * <li>{@link MetaBeanFactory} types (if any) specified by
> >>>> - * {@link
> >>>> ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
> >>>> - * </li>
> >>>> - * <li>if no {@link JsrMetaBeanFactory} has yet been specified
> >> (this
> >>>> - * allows factory order customization), a {@link
> >> JsrMetaBeanFactory}
> >>>> - * which handles both JSR303-XML and JSR303-Annotations</li>
> >>>> - * <li>if enabled by
> >>>> - * {@link
> >>>> ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
> >>>> - * {@link XMLMetaBeanFactory}</li>
> >>>> - * </ol>
> >>>> - *
> >>>> - * @return a new instance of MetaBeanManager with adequate
> >>>> MetaBeanFactories
> >>>> - */
> >>>> - protected MetaBeanFinder buildMetaBeanFinder() {
> >>>> - final List<MetaBeanFactory> builders = new
> >>>> ArrayList<MetaBeanFactory>();
> >>>> - if (Boolean.parseBoolean(factory.getProperties().get(
> >>>> -
> >>>> ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
> >>>> - builders.add(new IntrospectorMetaBeanFactory());
> >>>> - }
> >>>> - final String[] factoryClassNames =
> >>>> - StringUtils.split(factory.getProperties().get(
> >>>> -
> >>>> ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
> >>>> - if (factoryClassNames != null) {
> >>>> - for (String clsName : factoryClassNames) {
> >>>> - // cast, relying on #createMetaBeanFactory to throw
> >> the
> >>>> exception if incompatible:
> >>>> - @SuppressWarnings("unchecked")
> >>>> - final Class<? extends MetaBeanFactory> factoryClass =
> >>>> (Class<? extends MetaBeanFactory>) loadClass(clsName);
> >>>> - builders.add(createMetaBeanFactory(factoryClass));
> >>>> - }
> >>>> - }
> >>>> - boolean jsrFound = false;
> >>>> - for (MetaBeanFactory builder : builders) {
> >>>> - jsrFound |= builder instanceof JsrMetaBeanFactory;
> >>>> - }
> >>>> - if (!jsrFound) {
> >>>> - builders.add(new JsrMetaBeanFactory(this));
> >>>> - }
> >>>> - @SuppressWarnings("deprecation")
> >>>> - final boolean enableMetaBeansXml =
> >>>> - Boolean.parseBoolean(factory.getProperties().get(
> >>>> -
> >>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
> >>>> - if (enableMetaBeansXml) {
> >>>> - XMLMetaBeanManagerCreator.addFactory(builders);
> >>>> - }
> >>>> - return createMetaBeanManager(builders);
> >>>> - }
> >>>> -
> >>>> - /**
> >>>> - * Create a {@link MetaBeanManager} using the specified builders.
> >>>> - *
> >>>> - * @param builders
> >>>> - * {@link MetaBeanFactory} {@link List}
> >>>> - * @return {@link MetaBeanManager}
> >>>> - */
> >>>> - @SuppressWarnings("deprecation")
> >>>> - protected MetaBeanFinder
> >> createMetaBeanManager(List<MetaBeanFactory>
> >>>> builders) {
> >>>> - // as long as we support both: jsr (in the builders list) and
> >>>> xstream-xml metabeans:
> >>>> - if (Boolean.parseBoolean(factory.getProperties().get(
> >>>> -
> >>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
> >>>> - return
> >>>> XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
> >>>> - }
> >>>> - return new MetaBeanManager(new
> >>>> MetaBeanBuilder(builders.toArray(new
> >> MetaBeanFactory[builders.size()])));
> >>>> - }
> >>>> -
> >>>> - @Privileged
> >>>> - private <F extends MetaBeanFactory> F createMetaBeanFactory(final
> >>>> Class<F> cls) {
> >>>> - try {
> >>>> - Constructor<F> c =
> >>>> ConstructorUtils.getMatchingAccessibleConstructor(cls,
> >>>> ApacheFactoryContext.this.getClass());
> >>>> - if (c != null) {
> >>>> - return c.newInstance(ApacheFactoryContext.this);
> >>>> - }
> >>>> - c =
> ConstructorUtils.getMatchingAccessibleConstructor(cls,
> >>>> getFactory().getClass());
> >>>> - if (c != null) {
> >>>> - return c.newInstance(getFactory());
> >>>> - }
> >>>> - return cls.newInstance();
> >>>> - } catch (Exception e) {
> >>>> - throw new ValidationException(e);
> >>>> - }
> >>>> - }
> >>>> -
> >>>> - /**
> >>>> - * separate class to prevent the classloader to immediately load
> >>>> optional
> >>>> - * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
> >>>> XMLMetaBeanBuilder that
> >>>> - * might not be available in the classpath
> >>>> - */
> >>>> - private static class XMLMetaBeanManagerCreator {
> >>>> -
> >>>> - static void addFactory(List<MetaBeanFactory> builders) {
> >>>> - builders.add(new XMLMetaBeanFactory());
> >>>> - }
> >>>> -
> >>>> - /**
> >>>> - * Create the {@link MetaBeanManager} to process JSR303 XML.
> >>>> Requires
> >>>> - * bval-xstream at RT.
> >>>> - *
> >>>> - * @param builders meta bean builders
> >>>> - * @return {@link MetaBeanManager}
> >>>> - */
> >>>> - // NOTE - We return MetaBeanManager instead of
> >>> XMLMetaBeanManager
> >>>> to
> >>>> - // keep
> >>>> - // bval-xstream an optional module.
> >>>> - protected static MetaBeanManager
> >>>> createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
> >>>> - return new XMLMetaBeanManager(
> >>>> - new XMLMetaBeanBuilder(builders.toArray(new
> >>>> MetaBeanFactory[builders.size()])));
> >>>> - }
> >>>> - }
> >>>> -
> >>>> - private Class<?> loadClass(final String className) {
> >>>> - try {
> >>>> - return Class.forName(className, true,
> >>>> Reflection.getClassLoader(ApacheFactoryContext.class));
> >>>> - } catch (ClassNotFoundException ex) {
> >>>> - throw new ValidationException("Unable to load class: " +
> >>>> className, ex);
> >>>> - }
> >>>> - }
> >>>> }
> >>>>
> >>>> Modified:
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -18,13 +18,24 @@
> >>>> */
> >>>> package org.apache.bval.jsr;
> >>>>
> >>>> +import org.apache.bval.IntrospectorMetaBeanFactory;
> >>>> +import org.apache.bval.MetaBeanBuilder;
> >>>> +import org.apache.bval.MetaBeanFactory;
> >>>> +import org.apache.bval.MetaBeanFinder;
> >>>> +import org.apache.bval.MetaBeanManager;
> >>>> import org.apache.bval.jsr.xml.AnnotationIgnores;
> >>>> import org.apache.bval.jsr.xml.MetaConstraint;
> >>>> import org.apache.bval.jsr.xml.ValidationMappingParser;
> >>>> import org.apache.bval.util.AccessStrategy;
> >>>> import org.apache.bval.util.reflection.Reflection;
> >>>> +import org.apache.bval.xml.XMLMetaBeanBuilder;
> >>>> +import org.apache.bval.xml.XMLMetaBeanFactory;
> >>>> +import org.apache.bval.xml.XMLMetaBeanManager;
> >>>> import org.apache.commons.lang3.ArrayUtils;
> >>>> import org.apache.commons.lang3.ClassUtils;
> >>>> +import org.apache.commons.lang3.StringUtils;
> >>>> +import org.apache.commons.lang3.reflect.ConstructorUtils;
> >>>> +import org.apache.commons.weaver.privilizer.Privileged;
> >>>> import org.apache.commons.weaver.privilizer.Privilizing;
> >>>> import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> >>>>
> >>>> @@ -37,9 +48,9 @@ import javax.validation.ValidationExcept
> >>>> import javax.validation.Validator;
> >>>> import javax.validation.ValidatorFactory;
> >>>> import javax.validation.spi.ConfigurationState;
> >>>> -
> >>>> import java.io.Closeable;
> >>>> import java.lang.annotation.Annotation;
> >>>> +import java.lang.reflect.Constructor;
> >>>> import java.lang.reflect.Modifier;
> >>>> import java.util.ArrayList;
> >>>> import java.util.Collection;
> >>>> @@ -80,6 +91,60 @@ public class ApacheValidatorFactory impl
> >>>> private final ConcurrentMap<Class<?>, List<MetaConstraint<?, ?
> >>>> extends Annotation>>> constraintMap;
> >>>>
> >>>> private final Collection<Closeable> toClose = new
> >>>> ArrayList<Closeable>();
> >>>> + private final MetaBeanFinder defaultMetaBeanFinder;
> >>>> +
> >>>> + /**
> >>>> + * Create MetaBeanManager that uses factories:
> >>>> + * <ol>
> >>>> + * <li>if enabled by
> >>>> + * {@link
> >>>> ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
> >>>> + * {@link IntrospectorMetaBeanFactory}</li>
> >>>> + * <li>{@link MetaBeanFactory} types (if any) specified by
> >>>> + * {@link
> >>>> ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
> >>>> + * </li>
> >>>> + * <li>if no {@link JsrMetaBeanFactory} has yet been specified
> >> (this
> >>>> + * allows factory order customization), a {@link
> >> JsrMetaBeanFactory}
> >>>> + * which handles both JSR303-XML and JSR303-Annotations</li>
> >>>> + * <li>if enabled by
> >>>> + * {@link
> >>>> ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
> >>>> + * {@link XMLMetaBeanFactory}</li>
> >>>> + * </ol>
> >>>> + *
> >>>> + * @return a new instance of MetaBeanManager with adequate
> >>>> MetaBeanFactories
> >>>> + */
> >>>> + protected MetaBeanFinder buildMetaBeanFinder() {
> >>>> + final List<MetaBeanFactory> builders = new
> >>>> ArrayList<MetaBeanFactory>();
> >>>> + if (Boolean.parseBoolean(getProperties().get(
> >>>> +
> >>>> ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
> >>>> + builders.add(new IntrospectorMetaBeanFactory());
> >>>> + }
> >>>> + final String[] factoryClassNames =
> >>>> + StringUtils.split(getProperties().get(
> >>>> +
> >>>> ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
> >>>> + if (factoryClassNames != null) {
> >>>> + for (String clsName : factoryClassNames) {
> >>>> + // cast, relying on #createMetaBeanFactory to throw
> >> the
> >>>> exception if incompatible:
> >>>> + @SuppressWarnings("unchecked")
> >>>> + final Class<? extends MetaBeanFactory> factoryClass =
> >>>> (Class<? extends MetaBeanFactory>) loadClass(clsName);
> >>>> + builders.add(createMetaBeanFactory(factoryClass));
> >>>> + }
> >>>> + }
> >>>> + boolean jsrFound = false;
> >>>> + for (MetaBeanFactory builder : builders) {
> >>>> + jsrFound |= builder instanceof JsrMetaBeanFactory;
> >>>> + }
> >>>> + if (!jsrFound) {
> >>>> + builders.add(new JsrMetaBeanFactory(this));
> >>>> + }
> >>>> + @SuppressWarnings("deprecation")
> >>>> + final boolean enableMetaBeansXml =
> >>>> + Boolean.parseBoolean(getProperties().get(
> >>>> +
> >>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
> >>>> + if (enableMetaBeansXml) {
> >>>> + XMLMetaBeanManagerCreator.addFactory(builders);
> >>>> + }
> >>>> + return createMetaBeanManager(builders);
> >>>> + }
> >>>>
> >>>> /**
> >>>> * Convenience method to retrieve a default global
> >>>> ApacheValidatorFactory
> >>>> @@ -110,22 +175,11 @@ public class ApacheValidatorFactory impl
> >>>> /**
> >>>> * Create a new ApacheValidatorFactory instance.
> >>>> */
> >>>> - public ApacheValidatorFactory(ConfigurationState
> >>> configurationState) {
> >>>> - properties = new HashMap<String, String>();
> >>>> + public ApacheValidatorFactory(ConfigurationState configuration) {
> >>>> + properties = new HashMap<String,
> >>>> String>(configuration.getProperties());
> >>>> defaultSequences = new HashMap<Class<?>, Class<?>[]>();
> >>>> validAccesses = new ConcurrentHashMap<Class<?>,
> >>>> List<AccessStrategy>>();
> >>>> constraintMap = new ConcurrentHashMap<Class<?>,
> >>>> List<MetaConstraint<?, ? extends Annotation>>>();
> >>>> - configure(configurationState);
> >>>> - }
> >>>> -
> >>>> - /**
> >>>> - * Configure this {@link ApacheValidatorFactory} from a
> >>>> - * {@link ConfigurationState}.
> >>>> - *
> >>>> - * @param configuration
> >>>> - */
> >>>> - protected void configure(final ConfigurationState configuration)
> {
> >>>> - getProperties().putAll(configuration.getProperties());
> >>>>
> >>>> parameterNameProvider =
> >>> configuration.getParameterNameProvider();
> >>>> messageResolver = configuration.getMessageInterpolator();
> >>>> @@ -138,6 +192,8 @@ public class ApacheValidatorFactory impl
> >>>> }
> >>>>
> >>>> new
> >>>>
> >>>
> >>
> ValidationMappingParser(this).processMappingConfig(configuration.getMappingStreams());
> >>>> +
> >>>> + defaultMetaBeanFinder = buildMetaBeanFinder();
> >>>> }
> >>>>
> >>>> /**
> >>>> @@ -165,7 +221,7 @@ public class ApacheValidatorFactory impl
> >>>> * @return the validator factory's context
> >>>> */
> >>>> public ApacheFactoryContext usingContext() {
> >>>> - return new ApacheFactoryContext(this);
> >>>> + return new ApacheFactoryContext(this, defaultMetaBeanFinder);
> >>>> }
> >>>>
> >>>> /**
> >>>> @@ -428,4 +484,73 @@ public class ApacheValidatorFactory impl
> >>>> private static Class<?>[] safeArray(Class<?>... array) {
> >>>> return ArrayUtils.isEmpty(array) ?
> >> ArrayUtils.EMPTY_CLASS_ARRAY
> >>> :
> >>>> ArrayUtils.clone(array);
> >>>> }
> >>>> +
> >>>> + /**
> >>>> + * Create a {@link MetaBeanManager} using the specified builders.
> >>>> + *
> >>>> + * @param builders
> >>>> + * {@link MetaBeanFactory} {@link List}
> >>>> + * @return {@link MetaBeanManager}
> >>>> + */
> >>>> + @SuppressWarnings("deprecation")
> >>>> + protected MetaBeanFinder
> >> createMetaBeanManager(List<MetaBeanFactory>
> >>>> builders) {
> >>>> + // as long as we support both: jsr (in the builders list) and
> >>>> xstream-xml metabeans:
> >>>> + if (Boolean.parseBoolean(getProperties().get(
> >>>> +
> >>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
> >>>> + return
> >>>> XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
> >>>> + }
> >>>> + return new MetaBeanManager(new
> >>>> MetaBeanBuilder(builders.toArray(new
> >> MetaBeanFactory[builders.size()])));
> >>>> + }
> >>>> +
> >>>> + @Privileged
> >>>> + private <F extends MetaBeanFactory> F createMetaBeanFactory(final
> >>>> Class<F> cls) {
> >>>> + try {
> >>>> + Constructor<F> c =
> >>>> ConstructorUtils.getMatchingAccessibleConstructor(cls,
> >>>> ApacheValidatorFactory.this.getClass());
> >>>> + if (c != null) {
> >>>> + return c.newInstance(this);
> >>>> + }
> >>>> + c =
> ConstructorUtils.getMatchingAccessibleConstructor(cls,
> >>>> getClass());
> >>>> + if (c != null) {
> >>>> + return c.newInstance(this);
> >>>> + }
> >>>> + return cls.newInstance();
> >>>> + } catch (Exception e) {
> >>>> + throw new ValidationException(e);
> >>>> + }
> >>>> + }
> >>>> +
> >>>> + /**
> >>>> + * separate class to prevent the classloader to immediately load
> >>>> optional
> >>>> + * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
> >>>> XMLMetaBeanBuilder that
> >>>> + * might not be available in the classpath
> >>>> + */
> >>>> + private static class XMLMetaBeanManagerCreator {
> >>>> +
> >>>> + static void addFactory(List<MetaBeanFactory> builders) {
> >>>> + builders.add(new XMLMetaBeanFactory());
> >>>> + }
> >>>> +
> >>>> + /**
> >>>> + * Create the {@link MetaBeanManager} to process JSR303 XML.
> >>>> Requires
> >>>> + * bval-xstream at RT.
> >>>> + *
> >>>> + * @param builders meta bean builders
> >>>> + * @return {@link MetaBeanManager}
> >>>> + */
> >>>> + // NOTE - We return MetaBeanManager instead of
> >>> XMLMetaBeanManager
> >>>> to
> >>>> + // keep
> >>>> + // bval-xstream an optional module.
> >>>> + protected static MetaBeanManager
> >>>> createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
> >>>> + return new XMLMetaBeanManager(
> >>>> + new XMLMetaBeanBuilder(builders.toArray(new
> >>>> MetaBeanFactory[builders.size()])));
> >>>> + }
> >>>> + }
> >>>> +
> >>>> + private Class<?> loadClass(final String className) {
> >>>> + try {
> >>>> + return Class.forName(className, true,
> >>>> Reflection.getClassLoader(ApacheValidatorFactory.class));
> >>>> + } catch (ClassNotFoundException ex) {
> >>>> + throw new ValidationException("Unable to load class: " +
> >>>> className, ex);
> >>>> + }
> >>>> + }
> >>>> }
> >>>>
> >>>> Modified:
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -51,7 +51,6 @@ import javax.validation.metadata.MethodT
> >>>> import javax.validation.metadata.ParameterDescriptor;
> >>>> import javax.validation.metadata.PropertyDescriptor;
> >>>> import javax.validation.metadata.ReturnValueDescriptor;
> >>>> -
> >>>> import java.beans.Introspector;
> >>>> import java.lang.annotation.Annotation;
> >>>> import java.lang.reflect.AccessibleObject;
> >>>> @@ -329,7 +328,7 @@ public class BeanDescriptorImpl extends
> >>>> private ExecutableMeta(final ApacheFactoryContext
> >>> factoryContext,
> >>>> final MetaBean metaBean1, final Collection<ConstraintDescriptor<?>>
> >>>> constraintDescriptors) {
> >>>> this.metaBean = metaBean1;
> >>>> this.factoryContext = factoryContext;
> >>>> - this.annotationProcessor = new
> >>>> AnnotationProcessor(factoryContext);
> >>>> + this.annotationProcessor = new
> >>>> AnnotationProcessor(factoryContext.getFactory());
> >>>>
> >>>> buildExecutableDescriptors();
> >>>>
> >>>> @@ -840,7 +839,9 @@ public class BeanDescriptorImpl extends
> >>>> }
> >>>> }
> >>>> } else {
> >>>> - annotationProcessor.processAnnotation(annotation,
> >> null,
> >>>> ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
> access,
> >>>> validations, true);
> >>>> + annotationProcessor.processAnnotation(
> >>>> + annotation, null,
> >>>> ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
> >>>> + access, validations, true);
> >>>> }
> >>>> }
> >>>>
> >>>>
> >>>> Modified:
> >>>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> >>>> (original)
> >>>> +++
> >>>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -638,8 +638,9 @@ public class ClassValidator implements C
> >>>> protected <T> GroupValidationContext<T> createContext(MetaBean
> >>>> metaBean, T object, Class<T> objectClass, Class<?>... groups) {
> >>>> final ConstraintValidationListener<T> listener = new
> >>>> ConstraintValidationListener<T>(object, objectClass);
> >>>> final GroupValidationContextImpl<T> context =
> >>>> - new GroupValidationContextImpl<T>(listener,
> >>>> this.factoryContext.getMessageInterpolator(),
> >>>> - this.factoryContext.getTraversableResolver(),
> >>>> factoryContext.getParameterNameProvider(), metaBean);
> >>>> + new GroupValidationContextImpl<T>(listener,
> >>>> factoryContext.getMessageInterpolator(),
> >>>> + factoryContext.getTraversableResolver(),
> >>>> factoryContext.getParameterNameProvider(),
> >>>> + factoryContext.getConstraintValidatorFactory(),
> >>> metaBean);
> >>>> context.setBean(object, metaBean);
> >>>> context.setGroups(groupsComputer.computeGroups(groups));
> >>>> return context;
> >>>> @@ -648,8 +649,9 @@ public class ClassValidator implements C
> >>>> protected <T> GroupValidationContext<T>
> >>>> createInvocableContext(MetaBean metaBean, T object, Class<T>
> >> objectClass,
> >>>> Class<?>... groups) {
> >>>> final ConstraintValidationListener<T> listener = new
> >>>> ConstraintValidationListener<T>(object, objectClass);
> >>>> final GroupValidationContextImpl<T> context =
> >>>> - new GroupValidationContextImpl<T>(listener,
> >>>> this.factoryContext.getMessageInterpolator(),
> >>>> - this.factoryContext.getTraversableResolver(),
> >>>> factoryContext.getParameterNameProvider(), metaBean);
> >>>> + new GroupValidationContextImpl<T>(listener,
> >>>> factoryContext.getMessageInterpolator(),
> >>>> + factoryContext.getTraversableResolver(),
> >>>> factoryContext.getParameterNameProvider(),
> >>>> +
> >> factoryContext.getConstraintValidatorFactory(),
> >>>> metaBean);
> >>>> context.setBean(object, metaBean);
> >>>> final Groups computedGroup =
> >>> groupsComputer.computeGroups(groups);
> >>>> if
> >>>>
> >>>
> >>
> (Collections.singletonList(Group.DEFAULT).equals(computedGroup.getGroups())
> >>>> && metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
> >>>>
> >>>> Modified:
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -39,7 +39,6 @@ import javax.validation.ValidationExcept
> >>>> import
> >> javax.validation.constraintvalidation.SupportedValidationTarget;
> >>>> import javax.validation.constraintvalidation.ValidationTarget;
> >>>> import javax.validation.metadata.ConstraintDescriptor;
> >>>> -
> >>>> import java.io.Serializable;
> >>>> import java.lang.annotation.Annotation;
> >>>> import java.lang.reflect.Array;
> >>>> @@ -61,7 +60,6 @@ import java.util.Set;
> >>>> * this instance is immutable!<br/>
> >>>> */
> >>>> public class ConstraintValidation<T extends Annotation> implements
> >>>> Validation, ConstraintDescriptor<T> {
> >>>> - private final ConstraintValidatorFactory factory;
> >>>> private final AccessStrategy access;
> >>>> private final boolean reportFromComposite;
> >>>> private final Map<String, Object> attributes;
> >>>> @@ -82,11 +80,9 @@ public class ConstraintValidation<T exte
> >>>> private Class<? extends ConstraintValidator<T, ?>>[]
> >>> validatorClasses;
> >>>> private ConstraintTarget validationAppliesTo = null;
> >>>>
> >>>> - public ConstraintValidation(ConstraintValidatorFactory factory,
> >>>> - Class<? extends
> ConstraintValidator<T,
> >>>> ?>>[] validatorClasses,
> >>>> + public ConstraintValidation(Class<? extends
> ConstraintValidator<T,
> >>>> ?>>[] validatorClasses,
> >>>> T annotation, Class<?> owner,
> >>>> AccessStrategy access,
> >>>> boolean reportFromComposite,
> >>>> ConstraintTarget target) {
> >>>> - this.factory = factory;
> >>>> this.attributes = new HashMap<String, Object>();
> >>>> this.validatorClasses = ArrayUtils.clone(validatorClasses);
> >>>> this.annotation = annotation;
> >>>> @@ -158,7 +154,8 @@ public class ConstraintValidation<T exte
> >>>> synchronized (this) {
> >>>> if (validator == null) {
> >>>> try {
> >>>> - validator =
> getConstraintValidator(annotation,
> >>>> validatorClasses, owner, access);
> >>>> + validator = getConstraintValidator(
> >>>> +
> >> context.getConstraintValidatorFactory(),
> >>>> annotation, validatorClasses, owner, access);
> >>>> if (validator != null) {
> >>>> validator.initialize(annotation);
> >>>> }
> >>>> @@ -235,7 +232,8 @@ public class ConstraintValidation<T exte
> >>>> }
> >>>> }
> >>>>
> >>>> - private <A extends Annotation> ConstraintValidator<A, ? super T>
> >>>> getConstraintValidator(A annotation,
> >>>> + private <A extends Annotation> ConstraintValidator<A, ? super T>
> >>>> getConstraintValidator(
> >>>> + ConstraintValidatorFactory factory, A annotation,
> >>>> Class<? extends ConstraintValidator<A, ?>>[]
> >> constraintClasses,
> >>>> Class<?> owner, AccessStrategy access) {
> >>>> if (ArrayUtils.isNotEmpty(constraintClasses)) {
> >>>> final Type type = determineTargetedType(owner, access);
> >>>>
> >>>> Modified:
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -24,6 +24,7 @@ import org.apache.bval.model.MetaBean;
> >>>> import org.apache.bval.model.ValidationContext;
> >>>>
> >>>> import javax.validation.ConstraintValidator;
> >>>> +import javax.validation.ConstraintValidatorFactory;
> >>>> import javax.validation.ElementKind;
> >>>> import javax.validation.MessageInterpolator;
> >>>> import javax.validation.ParameterNameProvider;
> >>>> @@ -107,6 +108,12 @@ public interface GroupValidationContext<
> >>>> TraversableResolver getTraversableResolver();
> >>>>
> >>>> /**
> >>>> + * Get the {@link ConstraintValidatorFactory}.
> >>>> + * @return {@link ConstraintValidatorFactory}
> >>>> + */
> >>>> + ConstraintValidatorFactory getConstraintValidatorFactory();
> >>>> +
> >>>> + /**
> >>>> * Accumulate a validated constraint.
> >>>> * @param constraint
> >>>> * @return true when the constraint for the object in this path
> >> was
> >>>> not
> >>>>
> >>>> Modified:
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -27,6 +27,7 @@ import org.apache.bval.model.MetaPropert
> >>>> import org.apache.bval.util.AccessStrategy;
> >>>>
> >>>> import javax.validation.ConstraintValidator;
> >>>> +import javax.validation.ConstraintValidatorFactory;
> >>>> import javax.validation.ElementKind;
> >>>> import javax.validation.MessageInterpolator;
> >>>> import javax.validation.ParameterNameProvider;
> >>>> @@ -70,6 +71,7 @@ final class GroupValidationContextImpl<T
> >>>>
> >>>> private ConstraintValidation<?> constraintValidation;
> >>>> private final TraversableResolver traversableResolver;
> >>>> + private final ConstraintValidatorFactory
> >> constraintValidatorFactory;
> >>>>
> >>>> private Object[] parameters;
> >>>> private Object returnValue;
> >>>> @@ -86,11 +88,14 @@ final class GroupValidationContextImpl<T
> >>>> * @param rootMetaBean
> >>>> */
> >>>> public GroupValidationContextImpl(ConstraintValidationListener<T>
> >>>> listener, MessageInterpolator aMessageResolver,
> >>>> - TraversableResolver
> >>>> traversableResolver, ParameterNameProvider parameterNameProvider,
> >>> MetaBean
> >>>> rootMetaBean) {
> >>>> + TraversableResolver
> >>>> traversableResolver, ParameterNameProvider parameterNameProvider,
> >>>> + ConstraintValidatorFactory
> >>>> constraintValidatorFactory,
> >>>> + MetaBean rootMetaBean) {
> >>>> // inherited variable 'validatedObjects' is of type:
> >>>> // HashMap<GraphBeanIdentity, Set<PathImpl>> in this class
> >>>> super(listener, new HashMap<GraphBeanIdentity,
> >>> Set<PathImpl>>());
> >>>> this.messageResolver = aMessageResolver;
> >>>> + this.constraintValidatorFactory = constraintValidatorFactory;
> >>>> this.traversableResolver =
> >>>> CachingTraversableResolver.cacheFor(traversableResolver);
> >>>> this.parameterNameProvider = parameterNameProvider;
> >>>> this.rootMetaBean = rootMetaBean;
> >>>> @@ -313,6 +318,11 @@ final class GroupValidationContextImpl<T
> >>>> return traversableResolver;
> >>>> }
> >>>>
> >>>> + @Override
> >>>> + public ConstraintValidatorFactory getConstraintValidatorFactory()
> >> {
> >>>> + return constraintValidatorFactory;
> >>>> + }
> >>>> +
> >>>> /**
> >>>> * {@inheritDoc}
> >>>> */
> >>>>
> >>>> Modified:
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> >>>> (original)
> >>>> +++
> >>>>
> >>>
> >>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -63,8 +63,8 @@ public class JsrMetaBeanFactory implemen
> >>>> // of dubious utility as it's static :/
> >>>> protected static final Logger log =
> >>>> Logger.getLogger(JsrMetaBeanFactory.class.getName());
> >>>>
> >>>> - /** {@link ApacheFactoryContext} used */
> >>>> - protected final ApacheFactoryContext factoryContext;
> >>>> + /** {@link javax.validation.ValidatorFactory} used */
> >>>> + protected final ApacheValidatorFactory factory;
> >>>>
> >>>> /**
> >>>> * {@link AnnotationProcessor} used.
> >>>> @@ -74,11 +74,11 @@ public class JsrMetaBeanFactory implemen
> >>>> /**
> >>>> * Create a new Jsr303MetaBeanFactory instance.
> >>>> *
> >>>> - * @param factoryContext
> >>>> + * @param factory the validator factory.
> >>>> */
> >>>> - public JsrMetaBeanFactory(ApacheFactoryContext factoryContext) {
> >>>> - this.factoryContext = factoryContext;
> >>>> - this.annotationProcessor = new
> >>>> AnnotationProcessor(factoryContext);
> >>>> + public JsrMetaBeanFactory(ApacheValidatorFactory factory) {
> >>>> + this.factory = factory;
> >>>> + this.annotationProcessor = new AnnotationProcessor(factory);
> >>>> }
> >>>>
> >>>> /**
> >>>> @@ -123,7 +123,7 @@ public class JsrMetaBeanFactory implemen
> >>>> InvocationTargetException {
> >>>>
> >>>> // if NOT ignore class level annotations
> >>>> - if
> >>>>
> >>>
> >>
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(beanClass))
> >>>> {
> >>>> + if
> >>>> (!factory.getAnnotationIgnores().isIgnoreAnnotations(beanClass)) {
> >>>> annotationProcessor.processAnnotations(null, beanClass,
> >>>> beanClass, null, new AppendValidationToMeta(metabean));
> >>>> }
> >>>>
> >>>> @@ -134,7 +134,7 @@ public class JsrMetaBeanFactory implemen
> >>>> MetaProperty metaProperty =
> >>>> metabean.getProperty(field.getName());
> >>>> // create a property for those fields for which there is
> >> not
> >>>> yet a
> >>>> // MetaProperty
> >>>> - if
> >>>>
> >>>
> >>
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(field))
> >>>> {
> >>>> + if
> >>>> (!factory.getAnnotationIgnores().isIgnoreAnnotations(field)) {
> >>>> AccessStrategy access = new FieldAccess(field);
> >>>> boolean create = metaProperty == null;
> >>>> if (create) {
> >>>> @@ -160,7 +160,7 @@ public class JsrMetaBeanFactory implemen
> >>>> propName = MethodAccess.getPropertyName(method);
> >>>> }
> >>>> if (propName != null) {
> >>>> - if
> >>>>
> >>>
> >>
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(method))
> >>>> {
> >>>> + if
> >>>> (!factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
> >>>> AccessStrategy access = new MethodAccess(propName,
> >>>> method);
> >>>> MetaProperty metaProperty =
> >>>> metabean.getProperty(propName);
> >>>> boolean create = metaProperty == null;
> >>>> @@ -198,7 +198,7 @@ public class JsrMetaBeanFactory implemen
> >>>> */
> >>>> private void addXmlConstraints(Class<?> beanClass, MetaBean
> >>> metabean)
> >>>> throws IllegalAccessException,
> >>>> InvocationTargetException {
> >>>> - for (final MetaConstraint<?, ? extends Annotation>
> >>> metaConstraint
> >>>> : factoryContext.getFactory().getMetaConstraints(beanClass)) {
> >>>> + for (final MetaConstraint<?, ? extends Annotation>
> >>> metaConstraint
> >>>> : factory.getMetaConstraints(beanClass)) {
> >>>> Meta meta;
> >>>> AccessStrategy access =
> >> metaConstraint.getAccessStrategy();
> >>>> boolean create = false;
> >>>> @@ -263,7 +263,7 @@ public class JsrMetaBeanFactory implemen
> >>>> metabean.putProperty(access.getPropertyName(), null);
> >>>> }
> >>>> }
> >>>> - for (final AccessStrategy access :
> >>>> factoryContext.getFactory().getValidAccesses(beanClass)) {
> >>>> + for (final AccessStrategy access :
> >>>> factory.getValidAccesses(beanClass)) {
> >>>> if (access.getElementType() == ElementType.PARAMETER) {
> >>>> continue;
> >>>> }
> >>>> @@ -289,7 +289,7 @@ public class JsrMetaBeanFactory implemen
> >>>> if (groupSeq == null) {
> >>>> groupSeq = metabean.initFeature(key, new
> >>>> ArrayList<Group>(annotation == null ? 1 : annotation.value().length));
> >>>> }
> >>>> - Class<?>[] groupClasses =
> >>>> factoryContext.getFactory().getDefaultSequence(beanClass);
> >>>> + Class<?>[] groupClasses =
> >> factory.getDefaultSequence(beanClass);
> >>>> if (groupClasses == null || groupClasses.length == 0) {
> >>>> if (annotation == null) {
> >>>> groupSeq.add(Group.DEFAULT);
> >>>>
> >>>> Modified:
> >>>>
> >>
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> ---
> >>>>
> >>
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> >>>> (original)
> >>>> +++
> >>>>
> >>
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> >>>> Wed Dec 23 12:45:01 2015
> >>>> @@ -89,6 +89,10 @@ public class ValidationTest extends Test
> >>>> return factory.getValidator();
> >>>> }
> >>>>
> >>>> + public void testCache() {
> >>>> +
> >>>>
> >>>
> >>
> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
> >>>> +
> >>>>
> >>>
> >>
> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
> >>>> + }
> >>>> public void testAccessStrategies_field_method() {
> >>>> AccessTestBusinessObject o1 = new
> >> AccessTestBusinessObject("1");
> >>>> AccessTestBusinessObjectSub o2 = new
> >>>> AccessTestBusinessObjectSub("3");
> >>>>
> >>>> Modified: bval/trunk/bval-tck/pom.xml
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/bval-tck/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> --- bval/trunk/bval-tck/pom.xml (original)
> >>>> +++ bval/trunk/bval-tck/pom.xml Wed Dec 23 12:45:01 2015
> >>>> @@ -169,6 +169,55 @@
> >>>> <version>1.0.0</version>
> >>>> </dependency>
> >>>> </dependencies>
> >>>> + <repositories>
> >>>> + <repository>
> >>>> + <!-- override outdated URLs for jboss repo ids
> -->
> >>>> + <id>repository.jboss.org</id>
> >>>> + <name>JBoss Public Maven Repository Group</name>
> >>>> + <url>
> >>>> https://repository.jboss.org/nexus/content/groups/public/</url>
> >>>> + <layout>default</layout>
> >>>> + <releases>
> >>>> + <enabled>true</enabled>
> >>>> + <updatePolicy>never</updatePolicy>
> >>>> + <checksumPolicy>fail</checksumPolicy>
> >>>> + </releases>
> >>>> + <snapshots>
> >>>> + <enabled>false</enabled>
> >>>> + <updatePolicy>never</updatePolicy>
> >>>> + <checksumPolicy>warn</checksumPolicy>
> >>>> + </snapshots>
> >>>> + </repository>
> >>>> + <repository>
> >>>> + <id>jboss</id>
> >>>> + <name>JBoss Public Maven Repository Group
> >>>> (again)</name>
> >>>> + <url>
> >>>> https://repository.jboss.org/nexus/content/groups/public/</url>
> >>>> + <layout>default</layout>
> >>>> + <releases>
> >>>> + <enabled>true</enabled>
> >>>> + <updatePolicy>never</updatePolicy>
> >>>> + <checksumPolicy>fail</checksumPolicy>
> >>>> + </releases>
> >>>> + <snapshots>
> >>>> + <enabled>false</enabled>
> >>>> + <updatePolicy>never</updatePolicy>
> >>>> + <checksumPolicy>warn</checksumPolicy>
> >>>> + </snapshots>
> >>>> + </repository>
> >>>> + <repository>
> >>>> + <id>snapshots.jboss.org</id>
> >>>> + <url>
> >>>> https://repository.jboss.org/nexus/content/repositories/snapshots/
> >> </url>
> >>>> + <snapshots>
> >>>> + <enabled>true</enabled>
> >>>> + </snapshots>
> >>>> + </repository>
> >>>> + <repository>
> >>>> + <id>jboss-snapshots</id>
> >>>> + <url>
> >>>> https://repository.jboss.org/nexus/content/repositories/snapshots/
> >> </url>
> >>>> + <snapshots>
> >>>> + <enabled>true</enabled>
> >>>> + </snapshots>
> >>>> + </repository>
> >>>> + </repositories>
> >>>> <build>
> >>>> <plugins>
> >>>> <plugin>
> >>>>
> >>>> Modified: bval/trunk/pom.xml
> >>>> URL:
> >>>>
> >>>
> >>
> http://svn.apache.org/viewvc/bval/trunk/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
> >>>>
> >>>>
> >>>
> >>
> ==============================================================================
> >>>> --- bval/trunk/pom.xml (original)
> >>>> +++ bval/trunk/pom.xml Wed Dec 23 12:45:01 2015
> >>>> @@ -571,6 +571,7 @@
> >>>>
> >> <artifactId>commons-weaver-maven-plugin</artifactId>
> >>>> <version>${commons.weaver.version}</version>
> >>>> <configuration>
> >>>> + <verbose>true</verbose>
> >>>> <weaverConfig>
> >>>>
> >>> <privilizer.policy>DYNAMIC</privilizer.policy>
> >>>> </weaverConfig>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>
> >>
>
>
Re: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/ bval-jsr/src/main/java/org/apache/bval/jsr/ bval-jsr/src/test/java/org/apache/bval/jsr/ bval-tck/
Posted by Mark Struberg <st...@yahoo.de>.
Means we should push for releasing commons-weaver first, right?
LieGrue,
strub
> Am 23.12.2015 um 18:14 schrieb Romain Manni-Bucau <rm...@gmail.com>:
>
> yep the loop with a constant index was not loved by the runtime ;)
>
> FYI this issue (the real one not the weaver one) was triggered by a user
> which got very bad perfs upgrading to 1.1 so I'd like to get this out ASAP
> and if anyone has time for a review it would be really welcomed.
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> | Blog
> <http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> <http://www.tomitribe.com>
>
> 2015-12-23 18:11 GMT+01:00 Matt Benson <gu...@gmail.com>:
>
>> You got it. :-)
>>
>> Matt
>> On Dec 23, 2015 9:48 AM, "Romain Manni-Bucau" <rm...@gmail.com>
>> wrote:
>>
>>> seems a bug in 1.1 of [weaver], looks fixed in coming 1.2 so just
>> deployed
>>> the snapshot and upgraded in bval to the snapshot
>>>
>>>
>>> Romain Manni-Bucau
>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>>> <http://rmannibucau.wordpress.com> | Github <
>>> https://github.com/rmannibucau> |
>>> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>>> <http://www.tomitribe.com>
>>>
>>> 2015-12-23 13:47 GMT+01:00 Romain Manni-Bucau <rm...@gmail.com>:
>>>
>>>> Hi guys
>>>>
>>>> I would need some help for commons-weaver-maven-plugin setup, i
>> commented
>>>> it out cause it was just hanging. Any inputs/help on that?
>>>>
>>>> Romain Manni-Bucau
>>>> @rmannibucau <https://twitter.com/rmannibucau> | Blog
>>>> <http://rmannibucau.wordpress.com> | Github
>>>> <https://github.com/rmannibucau> | LinkedIn
>>>> <https://www.linkedin.com/in/rmannibucau> | Tomitriber
>>>> <http://www.tomitribe.com>
>>>>
>>>> ---------- Forwarded message ----------
>>>> From: <rm...@apache.org>
>>>> Date: 2015-12-23 13:45 GMT+01:00
>>>> Subject: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
>>>> bval-jsr/src/main/java/org/apache/bval/jsr/
>>>> bval-jsr/src/test/java/org/apache/bval/jsr/ bval-tck/
>>>> To: commits@bval.apache.org
>>>>
>>>>
>>>> Author: rmannibucau
>>>> Date: Wed Dec 23 12:45:01 2015
>>>> New Revision: 1721536
>>>>
>>>> URL: http://svn.apache.org/viewvc?rev=1721536&view=rev
>>>> Log:
>>>> BVAL-143 caching should be hold by the factory or shouldnt be for
>>>> performance reason + reactivating jboss repo since tck (1.0) modules
>> are
>>>> not on central
>>>>
>>>> Modified:
>>>> bval/trunk/bval-jsr/pom.xml
>>>>
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
>>>>
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
>>>>
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
>>>>
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
>>>>
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
>>>>
>>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
>>>>
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
>>>>
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
>>>>
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
>>>>
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
>>>>
>>>>
>> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
>>>> bval/trunk/bval-tck/pom.xml
>>>> bval/trunk/pom.xml
>>>>
>>>> Modified: bval/trunk/bval-jsr/pom.xml
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> --- bval/trunk/bval-jsr/pom.xml (original)
>>>> +++ bval/trunk/bval-jsr/pom.xml Wed Dec 23 12:45:01 2015
>>>> @@ -297,10 +297,12 @@
>>>> </includes>
>>>> </configuration>
>>>> </plugin>
>>>> + <!-- TODO: activate but ATM it just doesnt build with it
>>>> <plugin>
>>>> <groupId>org.apache.commons</groupId>
>>>> <artifactId>commons-weaver-maven-plugin</artifactId>
>>>> </plugin>
>>>> + -->
>>>> </plugins>
>>>> </build>
>>>> </project>
>>>>
>>>> Modified:
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
>>>> (original)
>>>> +++
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -18,6 +18,23 @@
>>>> */
>>>> package org.apache.bval.jsr;
>>>>
>>>> +import org.apache.bval.jsr.groups.GroupsComputer;
>>>> +import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
>>>> +import org.apache.bval.util.AccessStrategy;
>>>> +import org.apache.commons.lang3.ArrayUtils;
>>>> +import org.apache.commons.lang3.reflect.TypeUtils;
>>>> +import org.apache.commons.weaver.privilizer.Privileged;
>>>> +
>>>> +import javax.validation.Constraint;
>>>> +import javax.validation.ConstraintDeclarationException;
>>>> +import javax.validation.ConstraintDefinitionException;
>>>> +import javax.validation.ConstraintTarget;
>>>> +import javax.validation.ConstraintValidator;
>>>> +import javax.validation.OverridesAttribute;
>>>> +import javax.validation.Payload;
>>>> +import javax.validation.ReportAsSingleViolation;
>>>> +import
>> javax.validation.constraintvalidation.SupportedValidationTarget;
>>>> +import javax.validation.constraintvalidation.ValidationTarget;
>>>> import java.lang.annotation.Annotation;
>>>> import java.lang.reflect.InvocationTargetException;
>>>> import java.lang.reflect.Method;
>>>> @@ -32,25 +49,6 @@ import java.util.Set;
>>>> import java.util.logging.Level;
>>>> import java.util.logging.Logger;
>>>>
>>>> -import javax.validation.Constraint;
>>>> -import javax.validation.ConstraintDeclarationException;
>>>> -import javax.validation.ConstraintDefinitionException;
>>>> -import javax.validation.ConstraintTarget;
>>>> -import javax.validation.ConstraintValidator;
>>>> -import javax.validation.ConstraintValidatorFactory;
>>>> -import javax.validation.OverridesAttribute;
>>>> -import javax.validation.Payload;
>>>> -import javax.validation.ReportAsSingleViolation;
>>>> -import
>> javax.validation.constraintvalidation.SupportedValidationTarget;
>>>> -import javax.validation.constraintvalidation.ValidationTarget;
>>>> -
>>>> -import org.apache.bval.jsr.groups.GroupsComputer;
>>>> -import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
>>>> -import org.apache.bval.util.AccessStrategy;
>>>> -import org.apache.commons.lang3.ArrayUtils;
>>>> -import org.apache.commons.lang3.reflect.TypeUtils;
>>>> -import org.apache.commons.weaver.privilizer.Privileged;
>>>> -
>>>> /**
>>>> * Description: helper class that builds a {@link
>> ConstraintValidation}
>>>> or its
>>>> * composite constraint validations by parsing the jsr-annotations and
>>>> @@ -64,19 +62,19 @@ final class AnnotationConstraintBuilder<
>>>>
>>>> /**
>>>> * Create a new AnnotationConstraintBuilder instance.
>>>> - *
>>>> + *
>>>> * @param validatorClasses
>>>> * @param annotation
>>>> * @param owner
>>>> * @param access
>>>> */
>>>> - public AnnotationConstraintBuilder(ConstraintValidatorFactory
>>> factory,
>>>> - Class<? extends ConstraintValidator<A, ?>>[]
>> validatorClasses, A
>>>> annotation, Class<?> owner,
>>>> - AccessStrategy access, ConstraintTarget target) {
>>>> + public AnnotationConstraintBuilder(
>>>> + Class<? extends ConstraintValidator<A, ?>>[]
>>>> validatorClasses, A annotation, Class<?> owner,
>>>> + AccessStrategy access, ConstraintTarget target) {
>>>> final boolean reportFromComposite =
>>>> annotation != null &&
>>>>
>>>
>> annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
>>>> constraintValidation =
>>>> - new ConstraintValidation<A>(factory, validatorClasses,
>>>> annotation, owner, access, reportFromComposite,
>>>> + new ConstraintValidation<A>(validatorClasses, annotation,
>>>> owner, access, reportFromComposite,
>>>> target);
>>>> buildFromAnnotation();
>>>> }
>>>> @@ -259,7 +257,7 @@ final class AnnotationConstraintBuilder<
>>>>
>>>> /**
>>>> * Get the configured {@link ConstraintValidation}.
>>>> - *
>>>> + *
>>>> * @return {@link ConstraintValidation}
>>>> */
>>>> public ConstraintValidation<?> getConstraintValidation() {
>>>> @@ -309,7 +307,7 @@ final class AnnotationConstraintBuilder<
>>>> * Calculates the index of the composite constraint. The index
>>>> represents
>>>> * the order in which it is added in reference to other
>> constraints
>>>> of the
>>>> * same type.
>>>> - *
>>>> + *
>>>> * @param composite
>>>> * The composite constraint (not yet added).
>>>> * @return An integer index always >= 0
>>>>
>>>> Modified:
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
>>>> (original)
>>>> +++
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -34,7 +34,6 @@ import javax.validation.constraintvalida
>>>> import javax.validation.constraintvalidation.ValidationTarget;
>>>> import javax.validation.groups.ConvertGroup;
>>>> import javax.validation.groups.Default;
>>>> -
>>>> import java.lang.annotation.Annotation;
>>>> import java.lang.reflect.AnnotatedElement;
>>>> import java.lang.reflect.InvocationTargetException;
>>>> @@ -50,15 +49,15 @@ import java.util.Set;
>>>> @Privilizing(@CallTo(Reflection.class))
>>>> public final class AnnotationProcessor {
>>>> /** {@link ApacheFactoryContext} used */
>>>> - private final ApacheFactoryContext factoryContext;
>>>> + private final ApacheValidatorFactory factory;
>>>>
>>>> /**
>>>> * Create a new {@link AnnotationProcessor} instance.
>>>> *
>>>> - * @param factoryContext
>>>> + * @param factory the validator factory.
>>>> */
>>>> - public AnnotationProcessor(ApacheFactoryContext factoryContext) {
>>>> - this.factoryContext = factoryContext;
>>>> + public AnnotationProcessor(ApacheValidatorFactory factory) {
>>>> + this.factory = factory;
>>>> }
>>>>
>>>> /**
>>>> @@ -112,7 +111,7 @@ public final class AnnotationProcessor {
>>>> * @throws InvocationTargetException
>>>> */
>>>> public <A extends Annotation> boolean processAnnotation(A
>>> annotation,
>>>> Meta prop, Class<?> owner,
>>>> - AccessStrategy access, AppendValidation appender, boolean
>>>> reflection) throws IllegalAccessException,
>>>> + AccessStrategy access, AppendValidation appender, boolean
>>>> reflection) throws IllegalAccessException,
>>>> InvocationTargetException {
>>>> if (annotation instanceof Valid) {
>>>> return addAccessStrategy(prop, access);
>>>> @@ -204,12 +203,11 @@ public final class AnnotationProcessor {
>>>> }
>>>> final Class<A> annotationType = (Class<A>)
>>>> annotation.annotationType();
>>>> Class<? extends ConstraintValidator<A, ?>>[] validatorClasses
>> =
>>>> -
>>>>
>>>
>> factoryContext.getFactory().getConstraintsCache().getConstraintValidators(annotationType);
>>>> +
>>>> factory.getConstraintsCache().getConstraintValidators(annotationType);
>>>> if (validatorClasses == null) {
>>>> validatorClasses = (Class<? extends ConstraintValidator<A,
>>>> ?>>[]) vcAnno.validatedBy();
>>>> if (validatorClasses.length == 0) {
>>>> - validatorClasses =
>>>> -
>>>>
>>>
>> factoryContext.getFactory().getDefaultConstraints().getValidatorClasses(annotationType);
>>>> + validatorClasses =
>>>> factory.getDefaultConstraints().getValidatorClasses(annotationType);
>>>> }
>>>> }
>>>> return validatorClasses;
>>>> @@ -234,7 +232,8 @@ public final class AnnotationProcessor {
>>>> * @throws IllegalAccessException
>>>> * @throws InvocationTargetException
>>>> */
>>>> - private <A extends Annotation> boolean applyConstraint(A
>> annotation,
>>>> + private <A extends Annotation> boolean applyConstraint(
>>>> + A annotation,
>>>> Class<? extends ConstraintValidator<A, ?>>[]
>>>> rawConstraintClasses, Meta prop, Class<?> owner,
>>>> AccessStrategy access, AppendValidation appender) throws
>>>> IllegalAccessException, InvocationTargetException {
>>>>
>>>> @@ -244,7 +243,8 @@ public final class AnnotationProcessor {
>>>> }
>>>>
>>>> final AnnotationConstraintBuilder<A> builder =
>>>> - new
>>>>
>>>
>> AnnotationConstraintBuilder<A>(factoryContext.getConstraintValidatorFactory(),
>>>> constraintClasses,
>>>> + new AnnotationConstraintBuilder<A>(
>>>> + constraintClasses,
>>>> annotation, owner, access, null);
>>>>
>>>> // JSR-303 3.4.4: Add implicit groups
>>>>
>>>> Modified:
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
>>>> (original)
>>>> +++
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -18,33 +18,18 @@
>>>> */
>>>> package org.apache.bval.jsr;
>>>>
>>>> -import java.lang.reflect.Constructor;
>>>> -import java.util.ArrayList;
>>>> -import java.util.List;
>>>> +import org.apache.bval.MetaBeanFinder;
>>>> +import org.apache.bval.util.reflection.Reflection;
>>>> +import org.apache.commons.weaver.privilizer.Privilizing;
>>>> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
>>>>
>>>> import javax.validation.ConstraintValidatorFactory;
>>>> import javax.validation.MessageInterpolator;
>>>> import javax.validation.ParameterNameProvider;
>>>> import javax.validation.TraversableResolver;
>>>> -import javax.validation.ValidationException;
>>>> import javax.validation.Validator;
>>>> import javax.validation.ValidatorContext;
>>>>
>>>> -import org.apache.bval.IntrospectorMetaBeanFactory;
>>>> -import org.apache.bval.MetaBeanBuilder;
>>>> -import org.apache.bval.MetaBeanFactory;
>>>> -import org.apache.bval.MetaBeanFinder;
>>>> -import org.apache.bval.MetaBeanManager;
>>>> -import org.apache.bval.util.reflection.Reflection;
>>>> -import org.apache.bval.xml.XMLMetaBeanBuilder;
>>>> -import org.apache.bval.xml.XMLMetaBeanFactory;
>>>> -import org.apache.bval.xml.XMLMetaBeanManager;
>>>> -import org.apache.commons.lang3.StringUtils;
>>>> -import org.apache.commons.lang3.reflect.ConstructorUtils;
>>>> -import org.apache.commons.weaver.privilizer.Privileged;
>>>> -import org.apache.commons.weaver.privilizer.Privilizing;
>>>> -import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
>>>> -
>>>> /**
>>>> * Description: Represents the context that is used to create
>>>> * <code>ClassValidator</code> instances.<br/>
>>>> @@ -52,7 +37,7 @@ import org.apache.commons.weaver.privili
>>>> @Privilizing(@CallTo(Reflection.class))
>>>> public class ApacheFactoryContext implements ValidatorContext {
>>>> private final ApacheValidatorFactory factory;
>>>> - private final MetaBeanFinder metaBeanFinder;
>>>> + private volatile MetaBeanFinder metaBeanFinder;
>>>>
>>>> private MessageInterpolator messageInterpolator;
>>>> private TraversableResolver traversableResolver;
>>>> @@ -63,19 +48,9 @@ public class ApacheFactoryContext implem
>>>> * Create a new ApacheFactoryContext instance.
>>>> *
>>>> * @param factory validator factory
>>>> - */
>>>> - public ApacheFactoryContext(ApacheValidatorFactory factory) {
>>>> - this.factory = factory;
>>>> - this.metaBeanFinder = buildMetaBeanFinder();
>>>> - }
>>>> -
>>>> - /**
>>>> - * Create a new ApacheFactoryContext instance.
>>>> - *
>>>> - * @param factory validator factory
>>>> * @param metaBeanFinder meta finder
>>>> */
>>>> - protected ApacheFactoryContext(ApacheValidatorFactory factory,
>>>> MetaBeanFinder metaBeanFinder) {
>>>> + public ApacheFactoryContext(ApacheValidatorFactory factory,
>>>> MetaBeanFinder metaBeanFinder) {
>>>> this.factory = factory;
>>>> this.metaBeanFinder = metaBeanFinder;
>>>> }
>>>> @@ -99,11 +74,16 @@ public class ApacheFactoryContext implem
>>>> return metaBeanFinder;
>>>> }
>>>>
>>>> + private synchronized void resetMeta() { // ensure to ingnore the
>>>> cache and rebuild constraint with new model
>>>> + metaBeanFinder = factory.buildMetaBeanFinder();
>>>> + }
>>>> +
>>>> /**
>>>> * {@inheritDoc}
>>>> */
>>>> public ValidatorContext messageInterpolator(MessageInterpolator
>>>> messageInterpolator) {
>>>> this.messageInterpolator = messageInterpolator;
>>>> + resetMeta();
>>>> return this;
>>>> }
>>>>
>>>> @@ -112,6 +92,7 @@ public class ApacheFactoryContext implem
>>>> */
>>>> public ValidatorContext traversableResolver(TraversableResolver
>>>> traversableResolver) {
>>>> this.traversableResolver = traversableResolver;
>>>> + resetMeta();
>>>> return this;
>>>> }
>>>>
>>>> @@ -120,11 +101,13 @@ public class ApacheFactoryContext implem
>>>> */
>>>> public ValidatorContext
>>>> constraintValidatorFactory(ConstraintValidatorFactory
>>>> constraintValidatorFactory) {
>>>> this.constraintValidatorFactory = constraintValidatorFactory;
>>>> + resetMeta();
>>>> return this;
>>>> }
>>>>
>>>> public ValidatorContext
>> parameterNameProvider(ParameterNameProvider
>>>> parameterNameProvider) {
>>>> this.parameterNameProvider = parameterNameProvider;
>>>> + resetMeta();
>>>> return this;
>>>> }
>>>>
>>>> @@ -171,126 +154,4 @@ public class ApacheFactoryContext implem
>>>> return Boolean.parseBoolean(factory.getProperties().get(
>>>>
>>>> ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS));
>>>> }
>>>> -
>>>> - /**
>>>> - * Create MetaBeanManager that uses factories:
>>>> - * <ol>
>>>> - * <li>if enabled by
>>>> - * {@link
>>>> ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
>>>> - * {@link IntrospectorMetaBeanFactory}</li>
>>>> - * <li>{@link MetaBeanFactory} types (if any) specified by
>>>> - * {@link
>>>> ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
>>>> - * </li>
>>>> - * <li>if no {@link JsrMetaBeanFactory} has yet been specified
>> (this
>>>> - * allows factory order customization), a {@link
>> JsrMetaBeanFactory}
>>>> - * which handles both JSR303-XML and JSR303-Annotations</li>
>>>> - * <li>if enabled by
>>>> - * {@link
>>>> ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
>>>> - * {@link XMLMetaBeanFactory}</li>
>>>> - * </ol>
>>>> - *
>>>> - * @return a new instance of MetaBeanManager with adequate
>>>> MetaBeanFactories
>>>> - */
>>>> - protected MetaBeanFinder buildMetaBeanFinder() {
>>>> - final List<MetaBeanFactory> builders = new
>>>> ArrayList<MetaBeanFactory>();
>>>> - if (Boolean.parseBoolean(factory.getProperties().get(
>>>> -
>>>> ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
>>>> - builders.add(new IntrospectorMetaBeanFactory());
>>>> - }
>>>> - final String[] factoryClassNames =
>>>> - StringUtils.split(factory.getProperties().get(
>>>> -
>>>> ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
>>>> - if (factoryClassNames != null) {
>>>> - for (String clsName : factoryClassNames) {
>>>> - // cast, relying on #createMetaBeanFactory to throw
>> the
>>>> exception if incompatible:
>>>> - @SuppressWarnings("unchecked")
>>>> - final Class<? extends MetaBeanFactory> factoryClass =
>>>> (Class<? extends MetaBeanFactory>) loadClass(clsName);
>>>> - builders.add(createMetaBeanFactory(factoryClass));
>>>> - }
>>>> - }
>>>> - boolean jsrFound = false;
>>>> - for (MetaBeanFactory builder : builders) {
>>>> - jsrFound |= builder instanceof JsrMetaBeanFactory;
>>>> - }
>>>> - if (!jsrFound) {
>>>> - builders.add(new JsrMetaBeanFactory(this));
>>>> - }
>>>> - @SuppressWarnings("deprecation")
>>>> - final boolean enableMetaBeansXml =
>>>> - Boolean.parseBoolean(factory.getProperties().get(
>>>> -
>>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
>>>> - if (enableMetaBeansXml) {
>>>> - XMLMetaBeanManagerCreator.addFactory(builders);
>>>> - }
>>>> - return createMetaBeanManager(builders);
>>>> - }
>>>> -
>>>> - /**
>>>> - * Create a {@link MetaBeanManager} using the specified builders.
>>>> - *
>>>> - * @param builders
>>>> - * {@link MetaBeanFactory} {@link List}
>>>> - * @return {@link MetaBeanManager}
>>>> - */
>>>> - @SuppressWarnings("deprecation")
>>>> - protected MetaBeanFinder
>> createMetaBeanManager(List<MetaBeanFactory>
>>>> builders) {
>>>> - // as long as we support both: jsr (in the builders list) and
>>>> xstream-xml metabeans:
>>>> - if (Boolean.parseBoolean(factory.getProperties().get(
>>>> -
>>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
>>>> - return
>>>> XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
>>>> - }
>>>> - return new MetaBeanManager(new
>>>> MetaBeanBuilder(builders.toArray(new
>> MetaBeanFactory[builders.size()])));
>>>> - }
>>>> -
>>>> - @Privileged
>>>> - private <F extends MetaBeanFactory> F createMetaBeanFactory(final
>>>> Class<F> cls) {
>>>> - try {
>>>> - Constructor<F> c =
>>>> ConstructorUtils.getMatchingAccessibleConstructor(cls,
>>>> ApacheFactoryContext.this.getClass());
>>>> - if (c != null) {
>>>> - return c.newInstance(ApacheFactoryContext.this);
>>>> - }
>>>> - c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
>>>> getFactory().getClass());
>>>> - if (c != null) {
>>>> - return c.newInstance(getFactory());
>>>> - }
>>>> - return cls.newInstance();
>>>> - } catch (Exception e) {
>>>> - throw new ValidationException(e);
>>>> - }
>>>> - }
>>>> -
>>>> - /**
>>>> - * separate class to prevent the classloader to immediately load
>>>> optional
>>>> - * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
>>>> XMLMetaBeanBuilder that
>>>> - * might not be available in the classpath
>>>> - */
>>>> - private static class XMLMetaBeanManagerCreator {
>>>> -
>>>> - static void addFactory(List<MetaBeanFactory> builders) {
>>>> - builders.add(new XMLMetaBeanFactory());
>>>> - }
>>>> -
>>>> - /**
>>>> - * Create the {@link MetaBeanManager} to process JSR303 XML.
>>>> Requires
>>>> - * bval-xstream at RT.
>>>> - *
>>>> - * @param builders meta bean builders
>>>> - * @return {@link MetaBeanManager}
>>>> - */
>>>> - // NOTE - We return MetaBeanManager instead of
>>> XMLMetaBeanManager
>>>> to
>>>> - // keep
>>>> - // bval-xstream an optional module.
>>>> - protected static MetaBeanManager
>>>> createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
>>>> - return new XMLMetaBeanManager(
>>>> - new XMLMetaBeanBuilder(builders.toArray(new
>>>> MetaBeanFactory[builders.size()])));
>>>> - }
>>>> - }
>>>> -
>>>> - private Class<?> loadClass(final String className) {
>>>> - try {
>>>> - return Class.forName(className, true,
>>>> Reflection.getClassLoader(ApacheFactoryContext.class));
>>>> - } catch (ClassNotFoundException ex) {
>>>> - throw new ValidationException("Unable to load class: " +
>>>> className, ex);
>>>> - }
>>>> - }
>>>> }
>>>>
>>>> Modified:
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
>>>> (original)
>>>> +++
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -18,13 +18,24 @@
>>>> */
>>>> package org.apache.bval.jsr;
>>>>
>>>> +import org.apache.bval.IntrospectorMetaBeanFactory;
>>>> +import org.apache.bval.MetaBeanBuilder;
>>>> +import org.apache.bval.MetaBeanFactory;
>>>> +import org.apache.bval.MetaBeanFinder;
>>>> +import org.apache.bval.MetaBeanManager;
>>>> import org.apache.bval.jsr.xml.AnnotationIgnores;
>>>> import org.apache.bval.jsr.xml.MetaConstraint;
>>>> import org.apache.bval.jsr.xml.ValidationMappingParser;
>>>> import org.apache.bval.util.AccessStrategy;
>>>> import org.apache.bval.util.reflection.Reflection;
>>>> +import org.apache.bval.xml.XMLMetaBeanBuilder;
>>>> +import org.apache.bval.xml.XMLMetaBeanFactory;
>>>> +import org.apache.bval.xml.XMLMetaBeanManager;
>>>> import org.apache.commons.lang3.ArrayUtils;
>>>> import org.apache.commons.lang3.ClassUtils;
>>>> +import org.apache.commons.lang3.StringUtils;
>>>> +import org.apache.commons.lang3.reflect.ConstructorUtils;
>>>> +import org.apache.commons.weaver.privilizer.Privileged;
>>>> import org.apache.commons.weaver.privilizer.Privilizing;
>>>> import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
>>>>
>>>> @@ -37,9 +48,9 @@ import javax.validation.ValidationExcept
>>>> import javax.validation.Validator;
>>>> import javax.validation.ValidatorFactory;
>>>> import javax.validation.spi.ConfigurationState;
>>>> -
>>>> import java.io.Closeable;
>>>> import java.lang.annotation.Annotation;
>>>> +import java.lang.reflect.Constructor;
>>>> import java.lang.reflect.Modifier;
>>>> import java.util.ArrayList;
>>>> import java.util.Collection;
>>>> @@ -80,6 +91,60 @@ public class ApacheValidatorFactory impl
>>>> private final ConcurrentMap<Class<?>, List<MetaConstraint<?, ?
>>>> extends Annotation>>> constraintMap;
>>>>
>>>> private final Collection<Closeable> toClose = new
>>>> ArrayList<Closeable>();
>>>> + private final MetaBeanFinder defaultMetaBeanFinder;
>>>> +
>>>> + /**
>>>> + * Create MetaBeanManager that uses factories:
>>>> + * <ol>
>>>> + * <li>if enabled by
>>>> + * {@link
>>>> ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
>>>> + * {@link IntrospectorMetaBeanFactory}</li>
>>>> + * <li>{@link MetaBeanFactory} types (if any) specified by
>>>> + * {@link
>>>> ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
>>>> + * </li>
>>>> + * <li>if no {@link JsrMetaBeanFactory} has yet been specified
>> (this
>>>> + * allows factory order customization), a {@link
>> JsrMetaBeanFactory}
>>>> + * which handles both JSR303-XML and JSR303-Annotations</li>
>>>> + * <li>if enabled by
>>>> + * {@link
>>>> ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
>>>> + * {@link XMLMetaBeanFactory}</li>
>>>> + * </ol>
>>>> + *
>>>> + * @return a new instance of MetaBeanManager with adequate
>>>> MetaBeanFactories
>>>> + */
>>>> + protected MetaBeanFinder buildMetaBeanFinder() {
>>>> + final List<MetaBeanFactory> builders = new
>>>> ArrayList<MetaBeanFactory>();
>>>> + if (Boolean.parseBoolean(getProperties().get(
>>>> +
>>>> ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
>>>> + builders.add(new IntrospectorMetaBeanFactory());
>>>> + }
>>>> + final String[] factoryClassNames =
>>>> + StringUtils.split(getProperties().get(
>>>> +
>>>> ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
>>>> + if (factoryClassNames != null) {
>>>> + for (String clsName : factoryClassNames) {
>>>> + // cast, relying on #createMetaBeanFactory to throw
>> the
>>>> exception if incompatible:
>>>> + @SuppressWarnings("unchecked")
>>>> + final Class<? extends MetaBeanFactory> factoryClass =
>>>> (Class<? extends MetaBeanFactory>) loadClass(clsName);
>>>> + builders.add(createMetaBeanFactory(factoryClass));
>>>> + }
>>>> + }
>>>> + boolean jsrFound = false;
>>>> + for (MetaBeanFactory builder : builders) {
>>>> + jsrFound |= builder instanceof JsrMetaBeanFactory;
>>>> + }
>>>> + if (!jsrFound) {
>>>> + builders.add(new JsrMetaBeanFactory(this));
>>>> + }
>>>> + @SuppressWarnings("deprecation")
>>>> + final boolean enableMetaBeansXml =
>>>> + Boolean.parseBoolean(getProperties().get(
>>>> +
>>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
>>>> + if (enableMetaBeansXml) {
>>>> + XMLMetaBeanManagerCreator.addFactory(builders);
>>>> + }
>>>> + return createMetaBeanManager(builders);
>>>> + }
>>>>
>>>> /**
>>>> * Convenience method to retrieve a default global
>>>> ApacheValidatorFactory
>>>> @@ -110,22 +175,11 @@ public class ApacheValidatorFactory impl
>>>> /**
>>>> * Create a new ApacheValidatorFactory instance.
>>>> */
>>>> - public ApacheValidatorFactory(ConfigurationState
>>> configurationState) {
>>>> - properties = new HashMap<String, String>();
>>>> + public ApacheValidatorFactory(ConfigurationState configuration) {
>>>> + properties = new HashMap<String,
>>>> String>(configuration.getProperties());
>>>> defaultSequences = new HashMap<Class<?>, Class<?>[]>();
>>>> validAccesses = new ConcurrentHashMap<Class<?>,
>>>> List<AccessStrategy>>();
>>>> constraintMap = new ConcurrentHashMap<Class<?>,
>>>> List<MetaConstraint<?, ? extends Annotation>>>();
>>>> - configure(configurationState);
>>>> - }
>>>> -
>>>> - /**
>>>> - * Configure this {@link ApacheValidatorFactory} from a
>>>> - * {@link ConfigurationState}.
>>>> - *
>>>> - * @param configuration
>>>> - */
>>>> - protected void configure(final ConfigurationState configuration) {
>>>> - getProperties().putAll(configuration.getProperties());
>>>>
>>>> parameterNameProvider =
>>> configuration.getParameterNameProvider();
>>>> messageResolver = configuration.getMessageInterpolator();
>>>> @@ -138,6 +192,8 @@ public class ApacheValidatorFactory impl
>>>> }
>>>>
>>>> new
>>>>
>>>
>> ValidationMappingParser(this).processMappingConfig(configuration.getMappingStreams());
>>>> +
>>>> + defaultMetaBeanFinder = buildMetaBeanFinder();
>>>> }
>>>>
>>>> /**
>>>> @@ -165,7 +221,7 @@ public class ApacheValidatorFactory impl
>>>> * @return the validator factory's context
>>>> */
>>>> public ApacheFactoryContext usingContext() {
>>>> - return new ApacheFactoryContext(this);
>>>> + return new ApacheFactoryContext(this, defaultMetaBeanFinder);
>>>> }
>>>>
>>>> /**
>>>> @@ -428,4 +484,73 @@ public class ApacheValidatorFactory impl
>>>> private static Class<?>[] safeArray(Class<?>... array) {
>>>> return ArrayUtils.isEmpty(array) ?
>> ArrayUtils.EMPTY_CLASS_ARRAY
>>> :
>>>> ArrayUtils.clone(array);
>>>> }
>>>> +
>>>> + /**
>>>> + * Create a {@link MetaBeanManager} using the specified builders.
>>>> + *
>>>> + * @param builders
>>>> + * {@link MetaBeanFactory} {@link List}
>>>> + * @return {@link MetaBeanManager}
>>>> + */
>>>> + @SuppressWarnings("deprecation")
>>>> + protected MetaBeanFinder
>> createMetaBeanManager(List<MetaBeanFactory>
>>>> builders) {
>>>> + // as long as we support both: jsr (in the builders list) and
>>>> xstream-xml metabeans:
>>>> + if (Boolean.parseBoolean(getProperties().get(
>>>> +
>>>> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
>>>> + return
>>>> XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
>>>> + }
>>>> + return new MetaBeanManager(new
>>>> MetaBeanBuilder(builders.toArray(new
>> MetaBeanFactory[builders.size()])));
>>>> + }
>>>> +
>>>> + @Privileged
>>>> + private <F extends MetaBeanFactory> F createMetaBeanFactory(final
>>>> Class<F> cls) {
>>>> + try {
>>>> + Constructor<F> c =
>>>> ConstructorUtils.getMatchingAccessibleConstructor(cls,
>>>> ApacheValidatorFactory.this.getClass());
>>>> + if (c != null) {
>>>> + return c.newInstance(this);
>>>> + }
>>>> + c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
>>>> getClass());
>>>> + if (c != null) {
>>>> + return c.newInstance(this);
>>>> + }
>>>> + return cls.newInstance();
>>>> + } catch (Exception e) {
>>>> + throw new ValidationException(e);
>>>> + }
>>>> + }
>>>> +
>>>> + /**
>>>> + * separate class to prevent the classloader to immediately load
>>>> optional
>>>> + * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
>>>> XMLMetaBeanBuilder that
>>>> + * might not be available in the classpath
>>>> + */
>>>> + private static class XMLMetaBeanManagerCreator {
>>>> +
>>>> + static void addFactory(List<MetaBeanFactory> builders) {
>>>> + builders.add(new XMLMetaBeanFactory());
>>>> + }
>>>> +
>>>> + /**
>>>> + * Create the {@link MetaBeanManager} to process JSR303 XML.
>>>> Requires
>>>> + * bval-xstream at RT.
>>>> + *
>>>> + * @param builders meta bean builders
>>>> + * @return {@link MetaBeanManager}
>>>> + */
>>>> + // NOTE - We return MetaBeanManager instead of
>>> XMLMetaBeanManager
>>>> to
>>>> + // keep
>>>> + // bval-xstream an optional module.
>>>> + protected static MetaBeanManager
>>>> createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
>>>> + return new XMLMetaBeanManager(
>>>> + new XMLMetaBeanBuilder(builders.toArray(new
>>>> MetaBeanFactory[builders.size()])));
>>>> + }
>>>> + }
>>>> +
>>>> + private Class<?> loadClass(final String className) {
>>>> + try {
>>>> + return Class.forName(className, true,
>>>> Reflection.getClassLoader(ApacheValidatorFactory.class));
>>>> + } catch (ClassNotFoundException ex) {
>>>> + throw new ValidationException("Unable to load class: " +
>>>> className, ex);
>>>> + }
>>>> + }
>>>> }
>>>>
>>>> Modified:
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
>>>> (original)
>>>> +++
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -51,7 +51,6 @@ import javax.validation.metadata.MethodT
>>>> import javax.validation.metadata.ParameterDescriptor;
>>>> import javax.validation.metadata.PropertyDescriptor;
>>>> import javax.validation.metadata.ReturnValueDescriptor;
>>>> -
>>>> import java.beans.Introspector;
>>>> import java.lang.annotation.Annotation;
>>>> import java.lang.reflect.AccessibleObject;
>>>> @@ -329,7 +328,7 @@ public class BeanDescriptorImpl extends
>>>> private ExecutableMeta(final ApacheFactoryContext
>>> factoryContext,
>>>> final MetaBean metaBean1, final Collection<ConstraintDescriptor<?>>
>>>> constraintDescriptors) {
>>>> this.metaBean = metaBean1;
>>>> this.factoryContext = factoryContext;
>>>> - this.annotationProcessor = new
>>>> AnnotationProcessor(factoryContext);
>>>> + this.annotationProcessor = new
>>>> AnnotationProcessor(factoryContext.getFactory());
>>>>
>>>> buildExecutableDescriptors();
>>>>
>>>> @@ -840,7 +839,9 @@ public class BeanDescriptorImpl extends
>>>> }
>>>> }
>>>> } else {
>>>> - annotationProcessor.processAnnotation(annotation,
>> null,
>>>> ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()), access,
>>>> validations, true);
>>>> + annotationProcessor.processAnnotation(
>>>> + annotation, null,
>>>> ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
>>>> + access, validations, true);
>>>> }
>>>> }
>>>>
>>>>
>>>> Modified:
>>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
>>>> (original)
>>>> +++
>>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -638,8 +638,9 @@ public class ClassValidator implements C
>>>> protected <T> GroupValidationContext<T> createContext(MetaBean
>>>> metaBean, T object, Class<T> objectClass, Class<?>... groups) {
>>>> final ConstraintValidationListener<T> listener = new
>>>> ConstraintValidationListener<T>(object, objectClass);
>>>> final GroupValidationContextImpl<T> context =
>>>> - new GroupValidationContextImpl<T>(listener,
>>>> this.factoryContext.getMessageInterpolator(),
>>>> - this.factoryContext.getTraversableResolver(),
>>>> factoryContext.getParameterNameProvider(), metaBean);
>>>> + new GroupValidationContextImpl<T>(listener,
>>>> factoryContext.getMessageInterpolator(),
>>>> + factoryContext.getTraversableResolver(),
>>>> factoryContext.getParameterNameProvider(),
>>>> + factoryContext.getConstraintValidatorFactory(),
>>> metaBean);
>>>> context.setBean(object, metaBean);
>>>> context.setGroups(groupsComputer.computeGroups(groups));
>>>> return context;
>>>> @@ -648,8 +649,9 @@ public class ClassValidator implements C
>>>> protected <T> GroupValidationContext<T>
>>>> createInvocableContext(MetaBean metaBean, T object, Class<T>
>> objectClass,
>>>> Class<?>... groups) {
>>>> final ConstraintValidationListener<T> listener = new
>>>> ConstraintValidationListener<T>(object, objectClass);
>>>> final GroupValidationContextImpl<T> context =
>>>> - new GroupValidationContextImpl<T>(listener,
>>>> this.factoryContext.getMessageInterpolator(),
>>>> - this.factoryContext.getTraversableResolver(),
>>>> factoryContext.getParameterNameProvider(), metaBean);
>>>> + new GroupValidationContextImpl<T>(listener,
>>>> factoryContext.getMessageInterpolator(),
>>>> + factoryContext.getTraversableResolver(),
>>>> factoryContext.getParameterNameProvider(),
>>>> +
>> factoryContext.getConstraintValidatorFactory(),
>>>> metaBean);
>>>> context.setBean(object, metaBean);
>>>> final Groups computedGroup =
>>> groupsComputer.computeGroups(groups);
>>>> if
>>>>
>>>
>> (Collections.singletonList(Group.DEFAULT).equals(computedGroup.getGroups())
>>>> && metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
>>>>
>>>> Modified:
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
>>>> (original)
>>>> +++
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -39,7 +39,6 @@ import javax.validation.ValidationExcept
>>>> import
>> javax.validation.constraintvalidation.SupportedValidationTarget;
>>>> import javax.validation.constraintvalidation.ValidationTarget;
>>>> import javax.validation.metadata.ConstraintDescriptor;
>>>> -
>>>> import java.io.Serializable;
>>>> import java.lang.annotation.Annotation;
>>>> import java.lang.reflect.Array;
>>>> @@ -61,7 +60,6 @@ import java.util.Set;
>>>> * this instance is immutable!<br/>
>>>> */
>>>> public class ConstraintValidation<T extends Annotation> implements
>>>> Validation, ConstraintDescriptor<T> {
>>>> - private final ConstraintValidatorFactory factory;
>>>> private final AccessStrategy access;
>>>> private final boolean reportFromComposite;
>>>> private final Map<String, Object> attributes;
>>>> @@ -82,11 +80,9 @@ public class ConstraintValidation<T exte
>>>> private Class<? extends ConstraintValidator<T, ?>>[]
>>> validatorClasses;
>>>> private ConstraintTarget validationAppliesTo = null;
>>>>
>>>> - public ConstraintValidation(ConstraintValidatorFactory factory,
>>>> - Class<? extends ConstraintValidator<T,
>>>> ?>>[] validatorClasses,
>>>> + public ConstraintValidation(Class<? extends ConstraintValidator<T,
>>>> ?>>[] validatorClasses,
>>>> T annotation, Class<?> owner,
>>>> AccessStrategy access,
>>>> boolean reportFromComposite,
>>>> ConstraintTarget target) {
>>>> - this.factory = factory;
>>>> this.attributes = new HashMap<String, Object>();
>>>> this.validatorClasses = ArrayUtils.clone(validatorClasses);
>>>> this.annotation = annotation;
>>>> @@ -158,7 +154,8 @@ public class ConstraintValidation<T exte
>>>> synchronized (this) {
>>>> if (validator == null) {
>>>> try {
>>>> - validator = getConstraintValidator(annotation,
>>>> validatorClasses, owner, access);
>>>> + validator = getConstraintValidator(
>>>> +
>> context.getConstraintValidatorFactory(),
>>>> annotation, validatorClasses, owner, access);
>>>> if (validator != null) {
>>>> validator.initialize(annotation);
>>>> }
>>>> @@ -235,7 +232,8 @@ public class ConstraintValidation<T exte
>>>> }
>>>> }
>>>>
>>>> - private <A extends Annotation> ConstraintValidator<A, ? super T>
>>>> getConstraintValidator(A annotation,
>>>> + private <A extends Annotation> ConstraintValidator<A, ? super T>
>>>> getConstraintValidator(
>>>> + ConstraintValidatorFactory factory, A annotation,
>>>> Class<? extends ConstraintValidator<A, ?>>[]
>> constraintClasses,
>>>> Class<?> owner, AccessStrategy access) {
>>>> if (ArrayUtils.isNotEmpty(constraintClasses)) {
>>>> final Type type = determineTargetedType(owner, access);
>>>>
>>>> Modified:
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
>>>> (original)
>>>> +++
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -24,6 +24,7 @@ import org.apache.bval.model.MetaBean;
>>>> import org.apache.bval.model.ValidationContext;
>>>>
>>>> import javax.validation.ConstraintValidator;
>>>> +import javax.validation.ConstraintValidatorFactory;
>>>> import javax.validation.ElementKind;
>>>> import javax.validation.MessageInterpolator;
>>>> import javax.validation.ParameterNameProvider;
>>>> @@ -107,6 +108,12 @@ public interface GroupValidationContext<
>>>> TraversableResolver getTraversableResolver();
>>>>
>>>> /**
>>>> + * Get the {@link ConstraintValidatorFactory}.
>>>> + * @return {@link ConstraintValidatorFactory}
>>>> + */
>>>> + ConstraintValidatorFactory getConstraintValidatorFactory();
>>>> +
>>>> + /**
>>>> * Accumulate a validated constraint.
>>>> * @param constraint
>>>> * @return true when the constraint for the object in this path
>> was
>>>> not
>>>>
>>>> Modified:
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
>>>> (original)
>>>> +++
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -27,6 +27,7 @@ import org.apache.bval.model.MetaPropert
>>>> import org.apache.bval.util.AccessStrategy;
>>>>
>>>> import javax.validation.ConstraintValidator;
>>>> +import javax.validation.ConstraintValidatorFactory;
>>>> import javax.validation.ElementKind;
>>>> import javax.validation.MessageInterpolator;
>>>> import javax.validation.ParameterNameProvider;
>>>> @@ -70,6 +71,7 @@ final class GroupValidationContextImpl<T
>>>>
>>>> private ConstraintValidation<?> constraintValidation;
>>>> private final TraversableResolver traversableResolver;
>>>> + private final ConstraintValidatorFactory
>> constraintValidatorFactory;
>>>>
>>>> private Object[] parameters;
>>>> private Object returnValue;
>>>> @@ -86,11 +88,14 @@ final class GroupValidationContextImpl<T
>>>> * @param rootMetaBean
>>>> */
>>>> public GroupValidationContextImpl(ConstraintValidationListener<T>
>>>> listener, MessageInterpolator aMessageResolver,
>>>> - TraversableResolver
>>>> traversableResolver, ParameterNameProvider parameterNameProvider,
>>> MetaBean
>>>> rootMetaBean) {
>>>> + TraversableResolver
>>>> traversableResolver, ParameterNameProvider parameterNameProvider,
>>>> + ConstraintValidatorFactory
>>>> constraintValidatorFactory,
>>>> + MetaBean rootMetaBean) {
>>>> // inherited variable 'validatedObjects' is of type:
>>>> // HashMap<GraphBeanIdentity, Set<PathImpl>> in this class
>>>> super(listener, new HashMap<GraphBeanIdentity,
>>> Set<PathImpl>>());
>>>> this.messageResolver = aMessageResolver;
>>>> + this.constraintValidatorFactory = constraintValidatorFactory;
>>>> this.traversableResolver =
>>>> CachingTraversableResolver.cacheFor(traversableResolver);
>>>> this.parameterNameProvider = parameterNameProvider;
>>>> this.rootMetaBean = rootMetaBean;
>>>> @@ -313,6 +318,11 @@ final class GroupValidationContextImpl<T
>>>> return traversableResolver;
>>>> }
>>>>
>>>> + @Override
>>>> + public ConstraintValidatorFactory getConstraintValidatorFactory()
>> {
>>>> + return constraintValidatorFactory;
>>>> + }
>>>> +
>>>> /**
>>>> * {@inheritDoc}
>>>> */
>>>>
>>>> Modified:
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
>>>> (original)
>>>> +++
>>>>
>>>
>> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -63,8 +63,8 @@ public class JsrMetaBeanFactory implemen
>>>> // of dubious utility as it's static :/
>>>> protected static final Logger log =
>>>> Logger.getLogger(JsrMetaBeanFactory.class.getName());
>>>>
>>>> - /** {@link ApacheFactoryContext} used */
>>>> - protected final ApacheFactoryContext factoryContext;
>>>> + /** {@link javax.validation.ValidatorFactory} used */
>>>> + protected final ApacheValidatorFactory factory;
>>>>
>>>> /**
>>>> * {@link AnnotationProcessor} used.
>>>> @@ -74,11 +74,11 @@ public class JsrMetaBeanFactory implemen
>>>> /**
>>>> * Create a new Jsr303MetaBeanFactory instance.
>>>> *
>>>> - * @param factoryContext
>>>> + * @param factory the validator factory.
>>>> */
>>>> - public JsrMetaBeanFactory(ApacheFactoryContext factoryContext) {
>>>> - this.factoryContext = factoryContext;
>>>> - this.annotationProcessor = new
>>>> AnnotationProcessor(factoryContext);
>>>> + public JsrMetaBeanFactory(ApacheValidatorFactory factory) {
>>>> + this.factory = factory;
>>>> + this.annotationProcessor = new AnnotationProcessor(factory);
>>>> }
>>>>
>>>> /**
>>>> @@ -123,7 +123,7 @@ public class JsrMetaBeanFactory implemen
>>>> InvocationTargetException {
>>>>
>>>> // if NOT ignore class level annotations
>>>> - if
>>>>
>>>
>> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(beanClass))
>>>> {
>>>> + if
>>>> (!factory.getAnnotationIgnores().isIgnoreAnnotations(beanClass)) {
>>>> annotationProcessor.processAnnotations(null, beanClass,
>>>> beanClass, null, new AppendValidationToMeta(metabean));
>>>> }
>>>>
>>>> @@ -134,7 +134,7 @@ public class JsrMetaBeanFactory implemen
>>>> MetaProperty metaProperty =
>>>> metabean.getProperty(field.getName());
>>>> // create a property for those fields for which there is
>> not
>>>> yet a
>>>> // MetaProperty
>>>> - if
>>>>
>>>
>> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(field))
>>>> {
>>>> + if
>>>> (!factory.getAnnotationIgnores().isIgnoreAnnotations(field)) {
>>>> AccessStrategy access = new FieldAccess(field);
>>>> boolean create = metaProperty == null;
>>>> if (create) {
>>>> @@ -160,7 +160,7 @@ public class JsrMetaBeanFactory implemen
>>>> propName = MethodAccess.getPropertyName(method);
>>>> }
>>>> if (propName != null) {
>>>> - if
>>>>
>>>
>> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(method))
>>>> {
>>>> + if
>>>> (!factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
>>>> AccessStrategy access = new MethodAccess(propName,
>>>> method);
>>>> MetaProperty metaProperty =
>>>> metabean.getProperty(propName);
>>>> boolean create = metaProperty == null;
>>>> @@ -198,7 +198,7 @@ public class JsrMetaBeanFactory implemen
>>>> */
>>>> private void addXmlConstraints(Class<?> beanClass, MetaBean
>>> metabean)
>>>> throws IllegalAccessException,
>>>> InvocationTargetException {
>>>> - for (final MetaConstraint<?, ? extends Annotation>
>>> metaConstraint
>>>> : factoryContext.getFactory().getMetaConstraints(beanClass)) {
>>>> + for (final MetaConstraint<?, ? extends Annotation>
>>> metaConstraint
>>>> : factory.getMetaConstraints(beanClass)) {
>>>> Meta meta;
>>>> AccessStrategy access =
>> metaConstraint.getAccessStrategy();
>>>> boolean create = false;
>>>> @@ -263,7 +263,7 @@ public class JsrMetaBeanFactory implemen
>>>> metabean.putProperty(access.getPropertyName(), null);
>>>> }
>>>> }
>>>> - for (final AccessStrategy access :
>>>> factoryContext.getFactory().getValidAccesses(beanClass)) {
>>>> + for (final AccessStrategy access :
>>>> factory.getValidAccesses(beanClass)) {
>>>> if (access.getElementType() == ElementType.PARAMETER) {
>>>> continue;
>>>> }
>>>> @@ -289,7 +289,7 @@ public class JsrMetaBeanFactory implemen
>>>> if (groupSeq == null) {
>>>> groupSeq = metabean.initFeature(key, new
>>>> ArrayList<Group>(annotation == null ? 1 : annotation.value().length));
>>>> }
>>>> - Class<?>[] groupClasses =
>>>> factoryContext.getFactory().getDefaultSequence(beanClass);
>>>> + Class<?>[] groupClasses =
>> factory.getDefaultSequence(beanClass);
>>>> if (groupClasses == null || groupClasses.length == 0) {
>>>> if (annotation == null) {
>>>> groupSeq.add(Group.DEFAULT);
>>>>
>>>> Modified:
>>>>
>> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> ---
>>>>
>> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
>>>> (original)
>>>> +++
>>>>
>> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
>>>> Wed Dec 23 12:45:01 2015
>>>> @@ -89,6 +89,10 @@ public class ValidationTest extends Test
>>>> return factory.getValidator();
>>>> }
>>>>
>>>> + public void testCache() {
>>>> +
>>>>
>>>
>> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
>>>> +
>>>>
>>>
>> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
>>>> + }
>>>> public void testAccessStrategies_field_method() {
>>>> AccessTestBusinessObject o1 = new
>> AccessTestBusinessObject("1");
>>>> AccessTestBusinessObjectSub o2 = new
>>>> AccessTestBusinessObjectSub("3");
>>>>
>>>> Modified: bval/trunk/bval-tck/pom.xml
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/bval-tck/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> --- bval/trunk/bval-tck/pom.xml (original)
>>>> +++ bval/trunk/bval-tck/pom.xml Wed Dec 23 12:45:01 2015
>>>> @@ -169,6 +169,55 @@
>>>> <version>1.0.0</version>
>>>> </dependency>
>>>> </dependencies>
>>>> + <repositories>
>>>> + <repository>
>>>> + <!-- override outdated URLs for jboss repo ids -->
>>>> + <id>repository.jboss.org</id>
>>>> + <name>JBoss Public Maven Repository Group</name>
>>>> + <url>
>>>> https://repository.jboss.org/nexus/content/groups/public/</url>
>>>> + <layout>default</layout>
>>>> + <releases>
>>>> + <enabled>true</enabled>
>>>> + <updatePolicy>never</updatePolicy>
>>>> + <checksumPolicy>fail</checksumPolicy>
>>>> + </releases>
>>>> + <snapshots>
>>>> + <enabled>false</enabled>
>>>> + <updatePolicy>never</updatePolicy>
>>>> + <checksumPolicy>warn</checksumPolicy>
>>>> + </snapshots>
>>>> + </repository>
>>>> + <repository>
>>>> + <id>jboss</id>
>>>> + <name>JBoss Public Maven Repository Group
>>>> (again)</name>
>>>> + <url>
>>>> https://repository.jboss.org/nexus/content/groups/public/</url>
>>>> + <layout>default</layout>
>>>> + <releases>
>>>> + <enabled>true</enabled>
>>>> + <updatePolicy>never</updatePolicy>
>>>> + <checksumPolicy>fail</checksumPolicy>
>>>> + </releases>
>>>> + <snapshots>
>>>> + <enabled>false</enabled>
>>>> + <updatePolicy>never</updatePolicy>
>>>> + <checksumPolicy>warn</checksumPolicy>
>>>> + </snapshots>
>>>> + </repository>
>>>> + <repository>
>>>> + <id>snapshots.jboss.org</id>
>>>> + <url>
>>>> https://repository.jboss.org/nexus/content/repositories/snapshots/
>> </url>
>>>> + <snapshots>
>>>> + <enabled>true</enabled>
>>>> + </snapshots>
>>>> + </repository>
>>>> + <repository>
>>>> + <id>jboss-snapshots</id>
>>>> + <url>
>>>> https://repository.jboss.org/nexus/content/repositories/snapshots/
>> </url>
>>>> + <snapshots>
>>>> + <enabled>true</enabled>
>>>> + </snapshots>
>>>> + </repository>
>>>> + </repositories>
>>>> <build>
>>>> <plugins>
>>>> <plugin>
>>>>
>>>> Modified: bval/trunk/pom.xml
>>>> URL:
>>>>
>>>
>> http://svn.apache.org/viewvc/bval/trunk/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
>>>>
>>>>
>>>
>> ==============================================================================
>>>> --- bval/trunk/pom.xml (original)
>>>> +++ bval/trunk/pom.xml Wed Dec 23 12:45:01 2015
>>>> @@ -571,6 +571,7 @@
>>>>
>> <artifactId>commons-weaver-maven-plugin</artifactId>
>>>> <version>${commons.weaver.version}</version>
>>>> <configuration>
>>>> + <verbose>true</verbose>
>>>> <weaverConfig>
>>>>
>>> <privilizer.policy>DYNAMIC</privilizer.policy>
>>>> </weaverConfig>
>>>>
>>>>
>>>>
>>>>
>>>
>>
Re: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
bval-jsr/src/main/java/org/apache/bval/jsr/ bval-jsr/src/test/java/org/apache/bval/jsr/
bval-tck/
Posted by Romain Manni-Bucau <rm...@gmail.com>.
yep the loop with a constant index was not loved by the runtime ;)
FYI this issue (the real one not the weaver one) was triggered by a user
which got very bad perfs upgrading to 1.1 so I'd like to get this out ASAP
and if anyone has time for a review it would be really welcomed.
Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> | Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
<http://www.tomitribe.com>
2015-12-23 18:11 GMT+01:00 Matt Benson <gu...@gmail.com>:
> You got it. :-)
>
> Matt
> On Dec 23, 2015 9:48 AM, "Romain Manni-Bucau" <rm...@gmail.com>
> wrote:
>
> > seems a bug in 1.1 of [weaver], looks fixed in coming 1.2 so just
> deployed
> > the snapshot and upgraded in bval to the snapshot
> >
> >
> > Romain Manni-Bucau
> > @rmannibucau <https://twitter.com/rmannibucau> | Blog
> > <http://rmannibucau.wordpress.com> | Github <
> > https://github.com/rmannibucau> |
> > LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> > <http://www.tomitribe.com>
> >
> > 2015-12-23 13:47 GMT+01:00 Romain Manni-Bucau <rm...@gmail.com>:
> >
> > > Hi guys
> > >
> > > I would need some help for commons-weaver-maven-plugin setup, i
> commented
> > > it out cause it was just hanging. Any inputs/help on that?
> > >
> > > Romain Manni-Bucau
> > > @rmannibucau <https://twitter.com/rmannibucau> | Blog
> > > <http://rmannibucau.wordpress.com> | Github
> > > <https://github.com/rmannibucau> | LinkedIn
> > > <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> > > <http://www.tomitribe.com>
> > >
> > > ---------- Forwarded message ----------
> > > From: <rm...@apache.org>
> > > Date: 2015-12-23 13:45 GMT+01:00
> > > Subject: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
> > > bval-jsr/src/main/java/org/apache/bval/jsr/
> > > bval-jsr/src/test/java/org/apache/bval/jsr/ bval-tck/
> > > To: commits@bval.apache.org
> > >
> > >
> > > Author: rmannibucau
> > > Date: Wed Dec 23 12:45:01 2015
> > > New Revision: 1721536
> > >
> > > URL: http://svn.apache.org/viewvc?rev=1721536&view=rev
> > > Log:
> > > BVAL-143 caching should be hold by the factory or shouldnt be for
> > > performance reason + reactivating jboss repo since tck (1.0) modules
> are
> > > not on central
> > >
> > > Modified:
> > > bval/trunk/bval-jsr/pom.xml
> > >
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> > >
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> > >
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> > >
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> > >
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> > >
> > >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> > >
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> > >
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> > >
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> > >
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> > >
> > >
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> > > bval/trunk/bval-tck/pom.xml
> > > bval/trunk/pom.xml
> > >
> > > Modified: bval/trunk/bval-jsr/pom.xml
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > --- bval/trunk/bval-jsr/pom.xml (original)
> > > +++ bval/trunk/bval-jsr/pom.xml Wed Dec 23 12:45:01 2015
> > > @@ -297,10 +297,12 @@
> > > </includes>
> > > </configuration>
> > > </plugin>
> > > + <!-- TODO: activate but ATM it just doesnt build with it
> > > <plugin>
> > > <groupId>org.apache.commons</groupId>
> > > <artifactId>commons-weaver-maven-plugin</artifactId>
> > > </plugin>
> > > + -->
> > > </plugins>
> > > </build>
> > > </project>
> > >
> > > Modified:
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> > > (original)
> > > +++
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -18,6 +18,23 @@
> > > */
> > > package org.apache.bval.jsr;
> > >
> > > +import org.apache.bval.jsr.groups.GroupsComputer;
> > > +import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
> > > +import org.apache.bval.util.AccessStrategy;
> > > +import org.apache.commons.lang3.ArrayUtils;
> > > +import org.apache.commons.lang3.reflect.TypeUtils;
> > > +import org.apache.commons.weaver.privilizer.Privileged;
> > > +
> > > +import javax.validation.Constraint;
> > > +import javax.validation.ConstraintDeclarationException;
> > > +import javax.validation.ConstraintDefinitionException;
> > > +import javax.validation.ConstraintTarget;
> > > +import javax.validation.ConstraintValidator;
> > > +import javax.validation.OverridesAttribute;
> > > +import javax.validation.Payload;
> > > +import javax.validation.ReportAsSingleViolation;
> > > +import
> javax.validation.constraintvalidation.SupportedValidationTarget;
> > > +import javax.validation.constraintvalidation.ValidationTarget;
> > > import java.lang.annotation.Annotation;
> > > import java.lang.reflect.InvocationTargetException;
> > > import java.lang.reflect.Method;
> > > @@ -32,25 +49,6 @@ import java.util.Set;
> > > import java.util.logging.Level;
> > > import java.util.logging.Logger;
> > >
> > > -import javax.validation.Constraint;
> > > -import javax.validation.ConstraintDeclarationException;
> > > -import javax.validation.ConstraintDefinitionException;
> > > -import javax.validation.ConstraintTarget;
> > > -import javax.validation.ConstraintValidator;
> > > -import javax.validation.ConstraintValidatorFactory;
> > > -import javax.validation.OverridesAttribute;
> > > -import javax.validation.Payload;
> > > -import javax.validation.ReportAsSingleViolation;
> > > -import
> javax.validation.constraintvalidation.SupportedValidationTarget;
> > > -import javax.validation.constraintvalidation.ValidationTarget;
> > > -
> > > -import org.apache.bval.jsr.groups.GroupsComputer;
> > > -import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
> > > -import org.apache.bval.util.AccessStrategy;
> > > -import org.apache.commons.lang3.ArrayUtils;
> > > -import org.apache.commons.lang3.reflect.TypeUtils;
> > > -import org.apache.commons.weaver.privilizer.Privileged;
> > > -
> > > /**
> > > * Description: helper class that builds a {@link
> ConstraintValidation}
> > > or its
> > > * composite constraint validations by parsing the jsr-annotations and
> > > @@ -64,19 +62,19 @@ final class AnnotationConstraintBuilder<
> > >
> > > /**
> > > * Create a new AnnotationConstraintBuilder instance.
> > > - *
> > > + *
> > > * @param validatorClasses
> > > * @param annotation
> > > * @param owner
> > > * @param access
> > > */
> > > - public AnnotationConstraintBuilder(ConstraintValidatorFactory
> > factory,
> > > - Class<? extends ConstraintValidator<A, ?>>[]
> validatorClasses, A
> > > annotation, Class<?> owner,
> > > - AccessStrategy access, ConstraintTarget target) {
> > > + public AnnotationConstraintBuilder(
> > > + Class<? extends ConstraintValidator<A, ?>>[]
> > > validatorClasses, A annotation, Class<?> owner,
> > > + AccessStrategy access, ConstraintTarget target) {
> > > final boolean reportFromComposite =
> > > annotation != null &&
> > >
> >
> annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
> > > constraintValidation =
> > > - new ConstraintValidation<A>(factory, validatorClasses,
> > > annotation, owner, access, reportFromComposite,
> > > + new ConstraintValidation<A>(validatorClasses, annotation,
> > > owner, access, reportFromComposite,
> > > target);
> > > buildFromAnnotation();
> > > }
> > > @@ -259,7 +257,7 @@ final class AnnotationConstraintBuilder<
> > >
> > > /**
> > > * Get the configured {@link ConstraintValidation}.
> > > - *
> > > + *
> > > * @return {@link ConstraintValidation}
> > > */
> > > public ConstraintValidation<?> getConstraintValidation() {
> > > @@ -309,7 +307,7 @@ final class AnnotationConstraintBuilder<
> > > * Calculates the index of the composite constraint. The index
> > > represents
> > > * the order in which it is added in reference to other
> constraints
> > > of the
> > > * same type.
> > > - *
> > > + *
> > > * @param composite
> > > * The composite constraint (not yet added).
> > > * @return An integer index always >= 0
> > >
> > > Modified:
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> > > (original)
> > > +++
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -34,7 +34,6 @@ import javax.validation.constraintvalida
> > > import javax.validation.constraintvalidation.ValidationTarget;
> > > import javax.validation.groups.ConvertGroup;
> > > import javax.validation.groups.Default;
> > > -
> > > import java.lang.annotation.Annotation;
> > > import java.lang.reflect.AnnotatedElement;
> > > import java.lang.reflect.InvocationTargetException;
> > > @@ -50,15 +49,15 @@ import java.util.Set;
> > > @Privilizing(@CallTo(Reflection.class))
> > > public final class AnnotationProcessor {
> > > /** {@link ApacheFactoryContext} used */
> > > - private final ApacheFactoryContext factoryContext;
> > > + private final ApacheValidatorFactory factory;
> > >
> > > /**
> > > * Create a new {@link AnnotationProcessor} instance.
> > > *
> > > - * @param factoryContext
> > > + * @param factory the validator factory.
> > > */
> > > - public AnnotationProcessor(ApacheFactoryContext factoryContext) {
> > > - this.factoryContext = factoryContext;
> > > + public AnnotationProcessor(ApacheValidatorFactory factory) {
> > > + this.factory = factory;
> > > }
> > >
> > > /**
> > > @@ -112,7 +111,7 @@ public final class AnnotationProcessor {
> > > * @throws InvocationTargetException
> > > */
> > > public <A extends Annotation> boolean processAnnotation(A
> > annotation,
> > > Meta prop, Class<?> owner,
> > > - AccessStrategy access, AppendValidation appender, boolean
> > > reflection) throws IllegalAccessException,
> > > + AccessStrategy access, AppendValidation appender, boolean
> > > reflection) throws IllegalAccessException,
> > > InvocationTargetException {
> > > if (annotation instanceof Valid) {
> > > return addAccessStrategy(prop, access);
> > > @@ -204,12 +203,11 @@ public final class AnnotationProcessor {
> > > }
> > > final Class<A> annotationType = (Class<A>)
> > > annotation.annotationType();
> > > Class<? extends ConstraintValidator<A, ?>>[] validatorClasses
> =
> > > -
> > >
> >
> factoryContext.getFactory().getConstraintsCache().getConstraintValidators(annotationType);
> > > +
> > > factory.getConstraintsCache().getConstraintValidators(annotationType);
> > > if (validatorClasses == null) {
> > > validatorClasses = (Class<? extends ConstraintValidator<A,
> > > ?>>[]) vcAnno.validatedBy();
> > > if (validatorClasses.length == 0) {
> > > - validatorClasses =
> > > -
> > >
> >
> factoryContext.getFactory().getDefaultConstraints().getValidatorClasses(annotationType);
> > > + validatorClasses =
> > > factory.getDefaultConstraints().getValidatorClasses(annotationType);
> > > }
> > > }
> > > return validatorClasses;
> > > @@ -234,7 +232,8 @@ public final class AnnotationProcessor {
> > > * @throws IllegalAccessException
> > > * @throws InvocationTargetException
> > > */
> > > - private <A extends Annotation> boolean applyConstraint(A
> annotation,
> > > + private <A extends Annotation> boolean applyConstraint(
> > > + A annotation,
> > > Class<? extends ConstraintValidator<A, ?>>[]
> > > rawConstraintClasses, Meta prop, Class<?> owner,
> > > AccessStrategy access, AppendValidation appender) throws
> > > IllegalAccessException, InvocationTargetException {
> > >
> > > @@ -244,7 +243,8 @@ public final class AnnotationProcessor {
> > > }
> > >
> > > final AnnotationConstraintBuilder<A> builder =
> > > - new
> > >
> >
> AnnotationConstraintBuilder<A>(factoryContext.getConstraintValidatorFactory(),
> > > constraintClasses,
> > > + new AnnotationConstraintBuilder<A>(
> > > + constraintClasses,
> > > annotation, owner, access, null);
> > >
> > > // JSR-303 3.4.4: Add implicit groups
> > >
> > > Modified:
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> > > (original)
> > > +++
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -18,33 +18,18 @@
> > > */
> > > package org.apache.bval.jsr;
> > >
> > > -import java.lang.reflect.Constructor;
> > > -import java.util.ArrayList;
> > > -import java.util.List;
> > > +import org.apache.bval.MetaBeanFinder;
> > > +import org.apache.bval.util.reflection.Reflection;
> > > +import org.apache.commons.weaver.privilizer.Privilizing;
> > > +import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> > >
> > > import javax.validation.ConstraintValidatorFactory;
> > > import javax.validation.MessageInterpolator;
> > > import javax.validation.ParameterNameProvider;
> > > import javax.validation.TraversableResolver;
> > > -import javax.validation.ValidationException;
> > > import javax.validation.Validator;
> > > import javax.validation.ValidatorContext;
> > >
> > > -import org.apache.bval.IntrospectorMetaBeanFactory;
> > > -import org.apache.bval.MetaBeanBuilder;
> > > -import org.apache.bval.MetaBeanFactory;
> > > -import org.apache.bval.MetaBeanFinder;
> > > -import org.apache.bval.MetaBeanManager;
> > > -import org.apache.bval.util.reflection.Reflection;
> > > -import org.apache.bval.xml.XMLMetaBeanBuilder;
> > > -import org.apache.bval.xml.XMLMetaBeanFactory;
> > > -import org.apache.bval.xml.XMLMetaBeanManager;
> > > -import org.apache.commons.lang3.StringUtils;
> > > -import org.apache.commons.lang3.reflect.ConstructorUtils;
> > > -import org.apache.commons.weaver.privilizer.Privileged;
> > > -import org.apache.commons.weaver.privilizer.Privilizing;
> > > -import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> > > -
> > > /**
> > > * Description: Represents the context that is used to create
> > > * <code>ClassValidator</code> instances.<br/>
> > > @@ -52,7 +37,7 @@ import org.apache.commons.weaver.privili
> > > @Privilizing(@CallTo(Reflection.class))
> > > public class ApacheFactoryContext implements ValidatorContext {
> > > private final ApacheValidatorFactory factory;
> > > - private final MetaBeanFinder metaBeanFinder;
> > > + private volatile MetaBeanFinder metaBeanFinder;
> > >
> > > private MessageInterpolator messageInterpolator;
> > > private TraversableResolver traversableResolver;
> > > @@ -63,19 +48,9 @@ public class ApacheFactoryContext implem
> > > * Create a new ApacheFactoryContext instance.
> > > *
> > > * @param factory validator factory
> > > - */
> > > - public ApacheFactoryContext(ApacheValidatorFactory factory) {
> > > - this.factory = factory;
> > > - this.metaBeanFinder = buildMetaBeanFinder();
> > > - }
> > > -
> > > - /**
> > > - * Create a new ApacheFactoryContext instance.
> > > - *
> > > - * @param factory validator factory
> > > * @param metaBeanFinder meta finder
> > > */
> > > - protected ApacheFactoryContext(ApacheValidatorFactory factory,
> > > MetaBeanFinder metaBeanFinder) {
> > > + public ApacheFactoryContext(ApacheValidatorFactory factory,
> > > MetaBeanFinder metaBeanFinder) {
> > > this.factory = factory;
> > > this.metaBeanFinder = metaBeanFinder;
> > > }
> > > @@ -99,11 +74,16 @@ public class ApacheFactoryContext implem
> > > return metaBeanFinder;
> > > }
> > >
> > > + private synchronized void resetMeta() { // ensure to ingnore the
> > > cache and rebuild constraint with new model
> > > + metaBeanFinder = factory.buildMetaBeanFinder();
> > > + }
> > > +
> > > /**
> > > * {@inheritDoc}
> > > */
> > > public ValidatorContext messageInterpolator(MessageInterpolator
> > > messageInterpolator) {
> > > this.messageInterpolator = messageInterpolator;
> > > + resetMeta();
> > > return this;
> > > }
> > >
> > > @@ -112,6 +92,7 @@ public class ApacheFactoryContext implem
> > > */
> > > public ValidatorContext traversableResolver(TraversableResolver
> > > traversableResolver) {
> > > this.traversableResolver = traversableResolver;
> > > + resetMeta();
> > > return this;
> > > }
> > >
> > > @@ -120,11 +101,13 @@ public class ApacheFactoryContext implem
> > > */
> > > public ValidatorContext
> > > constraintValidatorFactory(ConstraintValidatorFactory
> > > constraintValidatorFactory) {
> > > this.constraintValidatorFactory = constraintValidatorFactory;
> > > + resetMeta();
> > > return this;
> > > }
> > >
> > > public ValidatorContext
> parameterNameProvider(ParameterNameProvider
> > > parameterNameProvider) {
> > > this.parameterNameProvider = parameterNameProvider;
> > > + resetMeta();
> > > return this;
> > > }
> > >
> > > @@ -171,126 +154,4 @@ public class ApacheFactoryContext implem
> > > return Boolean.parseBoolean(factory.getProperties().get(
> > >
> > > ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS));
> > > }
> > > -
> > > - /**
> > > - * Create MetaBeanManager that uses factories:
> > > - * <ol>
> > > - * <li>if enabled by
> > > - * {@link
> > > ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
> > > - * {@link IntrospectorMetaBeanFactory}</li>
> > > - * <li>{@link MetaBeanFactory} types (if any) specified by
> > > - * {@link
> > > ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
> > > - * </li>
> > > - * <li>if no {@link JsrMetaBeanFactory} has yet been specified
> (this
> > > - * allows factory order customization), a {@link
> JsrMetaBeanFactory}
> > > - * which handles both JSR303-XML and JSR303-Annotations</li>
> > > - * <li>if enabled by
> > > - * {@link
> > > ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
> > > - * {@link XMLMetaBeanFactory}</li>
> > > - * </ol>
> > > - *
> > > - * @return a new instance of MetaBeanManager with adequate
> > > MetaBeanFactories
> > > - */
> > > - protected MetaBeanFinder buildMetaBeanFinder() {
> > > - final List<MetaBeanFactory> builders = new
> > > ArrayList<MetaBeanFactory>();
> > > - if (Boolean.parseBoolean(factory.getProperties().get(
> > > -
> > > ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
> > > - builders.add(new IntrospectorMetaBeanFactory());
> > > - }
> > > - final String[] factoryClassNames =
> > > - StringUtils.split(factory.getProperties().get(
> > > -
> > > ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
> > > - if (factoryClassNames != null) {
> > > - for (String clsName : factoryClassNames) {
> > > - // cast, relying on #createMetaBeanFactory to throw
> the
> > > exception if incompatible:
> > > - @SuppressWarnings("unchecked")
> > > - final Class<? extends MetaBeanFactory> factoryClass =
> > > (Class<? extends MetaBeanFactory>) loadClass(clsName);
> > > - builders.add(createMetaBeanFactory(factoryClass));
> > > - }
> > > - }
> > > - boolean jsrFound = false;
> > > - for (MetaBeanFactory builder : builders) {
> > > - jsrFound |= builder instanceof JsrMetaBeanFactory;
> > > - }
> > > - if (!jsrFound) {
> > > - builders.add(new JsrMetaBeanFactory(this));
> > > - }
> > > - @SuppressWarnings("deprecation")
> > > - final boolean enableMetaBeansXml =
> > > - Boolean.parseBoolean(factory.getProperties().get(
> > > -
> > > ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
> > > - if (enableMetaBeansXml) {
> > > - XMLMetaBeanManagerCreator.addFactory(builders);
> > > - }
> > > - return createMetaBeanManager(builders);
> > > - }
> > > -
> > > - /**
> > > - * Create a {@link MetaBeanManager} using the specified builders.
> > > - *
> > > - * @param builders
> > > - * {@link MetaBeanFactory} {@link List}
> > > - * @return {@link MetaBeanManager}
> > > - */
> > > - @SuppressWarnings("deprecation")
> > > - protected MetaBeanFinder
> createMetaBeanManager(List<MetaBeanFactory>
> > > builders) {
> > > - // as long as we support both: jsr (in the builders list) and
> > > xstream-xml metabeans:
> > > - if (Boolean.parseBoolean(factory.getProperties().get(
> > > -
> > > ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
> > > - return
> > > XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
> > > - }
> > > - return new MetaBeanManager(new
> > > MetaBeanBuilder(builders.toArray(new
> MetaBeanFactory[builders.size()])));
> > > - }
> > > -
> > > - @Privileged
> > > - private <F extends MetaBeanFactory> F createMetaBeanFactory(final
> > > Class<F> cls) {
> > > - try {
> > > - Constructor<F> c =
> > > ConstructorUtils.getMatchingAccessibleConstructor(cls,
> > > ApacheFactoryContext.this.getClass());
> > > - if (c != null) {
> > > - return c.newInstance(ApacheFactoryContext.this);
> > > - }
> > > - c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
> > > getFactory().getClass());
> > > - if (c != null) {
> > > - return c.newInstance(getFactory());
> > > - }
> > > - return cls.newInstance();
> > > - } catch (Exception e) {
> > > - throw new ValidationException(e);
> > > - }
> > > - }
> > > -
> > > - /**
> > > - * separate class to prevent the classloader to immediately load
> > > optional
> > > - * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
> > > XMLMetaBeanBuilder that
> > > - * might not be available in the classpath
> > > - */
> > > - private static class XMLMetaBeanManagerCreator {
> > > -
> > > - static void addFactory(List<MetaBeanFactory> builders) {
> > > - builders.add(new XMLMetaBeanFactory());
> > > - }
> > > -
> > > - /**
> > > - * Create the {@link MetaBeanManager} to process JSR303 XML.
> > > Requires
> > > - * bval-xstream at RT.
> > > - *
> > > - * @param builders meta bean builders
> > > - * @return {@link MetaBeanManager}
> > > - */
> > > - // NOTE - We return MetaBeanManager instead of
> > XMLMetaBeanManager
> > > to
> > > - // keep
> > > - // bval-xstream an optional module.
> > > - protected static MetaBeanManager
> > > createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
> > > - return new XMLMetaBeanManager(
> > > - new XMLMetaBeanBuilder(builders.toArray(new
> > > MetaBeanFactory[builders.size()])));
> > > - }
> > > - }
> > > -
> > > - private Class<?> loadClass(final String className) {
> > > - try {
> > > - return Class.forName(className, true,
> > > Reflection.getClassLoader(ApacheFactoryContext.class));
> > > - } catch (ClassNotFoundException ex) {
> > > - throw new ValidationException("Unable to load class: " +
> > > className, ex);
> > > - }
> > > - }
> > > }
> > >
> > > Modified:
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> > > (original)
> > > +++
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -18,13 +18,24 @@
> > > */
> > > package org.apache.bval.jsr;
> > >
> > > +import org.apache.bval.IntrospectorMetaBeanFactory;
> > > +import org.apache.bval.MetaBeanBuilder;
> > > +import org.apache.bval.MetaBeanFactory;
> > > +import org.apache.bval.MetaBeanFinder;
> > > +import org.apache.bval.MetaBeanManager;
> > > import org.apache.bval.jsr.xml.AnnotationIgnores;
> > > import org.apache.bval.jsr.xml.MetaConstraint;
> > > import org.apache.bval.jsr.xml.ValidationMappingParser;
> > > import org.apache.bval.util.AccessStrategy;
> > > import org.apache.bval.util.reflection.Reflection;
> > > +import org.apache.bval.xml.XMLMetaBeanBuilder;
> > > +import org.apache.bval.xml.XMLMetaBeanFactory;
> > > +import org.apache.bval.xml.XMLMetaBeanManager;
> > > import org.apache.commons.lang3.ArrayUtils;
> > > import org.apache.commons.lang3.ClassUtils;
> > > +import org.apache.commons.lang3.StringUtils;
> > > +import org.apache.commons.lang3.reflect.ConstructorUtils;
> > > +import org.apache.commons.weaver.privilizer.Privileged;
> > > import org.apache.commons.weaver.privilizer.Privilizing;
> > > import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> > >
> > > @@ -37,9 +48,9 @@ import javax.validation.ValidationExcept
> > > import javax.validation.Validator;
> > > import javax.validation.ValidatorFactory;
> > > import javax.validation.spi.ConfigurationState;
> > > -
> > > import java.io.Closeable;
> > > import java.lang.annotation.Annotation;
> > > +import java.lang.reflect.Constructor;
> > > import java.lang.reflect.Modifier;
> > > import java.util.ArrayList;
> > > import java.util.Collection;
> > > @@ -80,6 +91,60 @@ public class ApacheValidatorFactory impl
> > > private final ConcurrentMap<Class<?>, List<MetaConstraint<?, ?
> > > extends Annotation>>> constraintMap;
> > >
> > > private final Collection<Closeable> toClose = new
> > > ArrayList<Closeable>();
> > > + private final MetaBeanFinder defaultMetaBeanFinder;
> > > +
> > > + /**
> > > + * Create MetaBeanManager that uses factories:
> > > + * <ol>
> > > + * <li>if enabled by
> > > + * {@link
> > > ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
> > > + * {@link IntrospectorMetaBeanFactory}</li>
> > > + * <li>{@link MetaBeanFactory} types (if any) specified by
> > > + * {@link
> > > ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
> > > + * </li>
> > > + * <li>if no {@link JsrMetaBeanFactory} has yet been specified
> (this
> > > + * allows factory order customization), a {@link
> JsrMetaBeanFactory}
> > > + * which handles both JSR303-XML and JSR303-Annotations</li>
> > > + * <li>if enabled by
> > > + * {@link
> > > ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
> > > + * {@link XMLMetaBeanFactory}</li>
> > > + * </ol>
> > > + *
> > > + * @return a new instance of MetaBeanManager with adequate
> > > MetaBeanFactories
> > > + */
> > > + protected MetaBeanFinder buildMetaBeanFinder() {
> > > + final List<MetaBeanFactory> builders = new
> > > ArrayList<MetaBeanFactory>();
> > > + if (Boolean.parseBoolean(getProperties().get(
> > > +
> > > ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
> > > + builders.add(new IntrospectorMetaBeanFactory());
> > > + }
> > > + final String[] factoryClassNames =
> > > + StringUtils.split(getProperties().get(
> > > +
> > > ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
> > > + if (factoryClassNames != null) {
> > > + for (String clsName : factoryClassNames) {
> > > + // cast, relying on #createMetaBeanFactory to throw
> the
> > > exception if incompatible:
> > > + @SuppressWarnings("unchecked")
> > > + final Class<? extends MetaBeanFactory> factoryClass =
> > > (Class<? extends MetaBeanFactory>) loadClass(clsName);
> > > + builders.add(createMetaBeanFactory(factoryClass));
> > > + }
> > > + }
> > > + boolean jsrFound = false;
> > > + for (MetaBeanFactory builder : builders) {
> > > + jsrFound |= builder instanceof JsrMetaBeanFactory;
> > > + }
> > > + if (!jsrFound) {
> > > + builders.add(new JsrMetaBeanFactory(this));
> > > + }
> > > + @SuppressWarnings("deprecation")
> > > + final boolean enableMetaBeansXml =
> > > + Boolean.parseBoolean(getProperties().get(
> > > +
> > > ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
> > > + if (enableMetaBeansXml) {
> > > + XMLMetaBeanManagerCreator.addFactory(builders);
> > > + }
> > > + return createMetaBeanManager(builders);
> > > + }
> > >
> > > /**
> > > * Convenience method to retrieve a default global
> > > ApacheValidatorFactory
> > > @@ -110,22 +175,11 @@ public class ApacheValidatorFactory impl
> > > /**
> > > * Create a new ApacheValidatorFactory instance.
> > > */
> > > - public ApacheValidatorFactory(ConfigurationState
> > configurationState) {
> > > - properties = new HashMap<String, String>();
> > > + public ApacheValidatorFactory(ConfigurationState configuration) {
> > > + properties = new HashMap<String,
> > > String>(configuration.getProperties());
> > > defaultSequences = new HashMap<Class<?>, Class<?>[]>();
> > > validAccesses = new ConcurrentHashMap<Class<?>,
> > > List<AccessStrategy>>();
> > > constraintMap = new ConcurrentHashMap<Class<?>,
> > > List<MetaConstraint<?, ? extends Annotation>>>();
> > > - configure(configurationState);
> > > - }
> > > -
> > > - /**
> > > - * Configure this {@link ApacheValidatorFactory} from a
> > > - * {@link ConfigurationState}.
> > > - *
> > > - * @param configuration
> > > - */
> > > - protected void configure(final ConfigurationState configuration) {
> > > - getProperties().putAll(configuration.getProperties());
> > >
> > > parameterNameProvider =
> > configuration.getParameterNameProvider();
> > > messageResolver = configuration.getMessageInterpolator();
> > > @@ -138,6 +192,8 @@ public class ApacheValidatorFactory impl
> > > }
> > >
> > > new
> > >
> >
> ValidationMappingParser(this).processMappingConfig(configuration.getMappingStreams());
> > > +
> > > + defaultMetaBeanFinder = buildMetaBeanFinder();
> > > }
> > >
> > > /**
> > > @@ -165,7 +221,7 @@ public class ApacheValidatorFactory impl
> > > * @return the validator factory's context
> > > */
> > > public ApacheFactoryContext usingContext() {
> > > - return new ApacheFactoryContext(this);
> > > + return new ApacheFactoryContext(this, defaultMetaBeanFinder);
> > > }
> > >
> > > /**
> > > @@ -428,4 +484,73 @@ public class ApacheValidatorFactory impl
> > > private static Class<?>[] safeArray(Class<?>... array) {
> > > return ArrayUtils.isEmpty(array) ?
> ArrayUtils.EMPTY_CLASS_ARRAY
> > :
> > > ArrayUtils.clone(array);
> > > }
> > > +
> > > + /**
> > > + * Create a {@link MetaBeanManager} using the specified builders.
> > > + *
> > > + * @param builders
> > > + * {@link MetaBeanFactory} {@link List}
> > > + * @return {@link MetaBeanManager}
> > > + */
> > > + @SuppressWarnings("deprecation")
> > > + protected MetaBeanFinder
> createMetaBeanManager(List<MetaBeanFactory>
> > > builders) {
> > > + // as long as we support both: jsr (in the builders list) and
> > > xstream-xml metabeans:
> > > + if (Boolean.parseBoolean(getProperties().get(
> > > +
> > > ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
> > > + return
> > > XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
> > > + }
> > > + return new MetaBeanManager(new
> > > MetaBeanBuilder(builders.toArray(new
> MetaBeanFactory[builders.size()])));
> > > + }
> > > +
> > > + @Privileged
> > > + private <F extends MetaBeanFactory> F createMetaBeanFactory(final
> > > Class<F> cls) {
> > > + try {
> > > + Constructor<F> c =
> > > ConstructorUtils.getMatchingAccessibleConstructor(cls,
> > > ApacheValidatorFactory.this.getClass());
> > > + if (c != null) {
> > > + return c.newInstance(this);
> > > + }
> > > + c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
> > > getClass());
> > > + if (c != null) {
> > > + return c.newInstance(this);
> > > + }
> > > + return cls.newInstance();
> > > + } catch (Exception e) {
> > > + throw new ValidationException(e);
> > > + }
> > > + }
> > > +
> > > + /**
> > > + * separate class to prevent the classloader to immediately load
> > > optional
> > > + * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
> > > XMLMetaBeanBuilder that
> > > + * might not be available in the classpath
> > > + */
> > > + private static class XMLMetaBeanManagerCreator {
> > > +
> > > + static void addFactory(List<MetaBeanFactory> builders) {
> > > + builders.add(new XMLMetaBeanFactory());
> > > + }
> > > +
> > > + /**
> > > + * Create the {@link MetaBeanManager} to process JSR303 XML.
> > > Requires
> > > + * bval-xstream at RT.
> > > + *
> > > + * @param builders meta bean builders
> > > + * @return {@link MetaBeanManager}
> > > + */
> > > + // NOTE - We return MetaBeanManager instead of
> > XMLMetaBeanManager
> > > to
> > > + // keep
> > > + // bval-xstream an optional module.
> > > + protected static MetaBeanManager
> > > createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
> > > + return new XMLMetaBeanManager(
> > > + new XMLMetaBeanBuilder(builders.toArray(new
> > > MetaBeanFactory[builders.size()])));
> > > + }
> > > + }
> > > +
> > > + private Class<?> loadClass(final String className) {
> > > + try {
> > > + return Class.forName(className, true,
> > > Reflection.getClassLoader(ApacheValidatorFactory.class));
> > > + } catch (ClassNotFoundException ex) {
> > > + throw new ValidationException("Unable to load class: " +
> > > className, ex);
> > > + }
> > > + }
> > > }
> > >
> > > Modified:
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> > > (original)
> > > +++
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -51,7 +51,6 @@ import javax.validation.metadata.MethodT
> > > import javax.validation.metadata.ParameterDescriptor;
> > > import javax.validation.metadata.PropertyDescriptor;
> > > import javax.validation.metadata.ReturnValueDescriptor;
> > > -
> > > import java.beans.Introspector;
> > > import java.lang.annotation.Annotation;
> > > import java.lang.reflect.AccessibleObject;
> > > @@ -329,7 +328,7 @@ public class BeanDescriptorImpl extends
> > > private ExecutableMeta(final ApacheFactoryContext
> > factoryContext,
> > > final MetaBean metaBean1, final Collection<ConstraintDescriptor<?>>
> > > constraintDescriptors) {
> > > this.metaBean = metaBean1;
> > > this.factoryContext = factoryContext;
> > > - this.annotationProcessor = new
> > > AnnotationProcessor(factoryContext);
> > > + this.annotationProcessor = new
> > > AnnotationProcessor(factoryContext.getFactory());
> > >
> > > buildExecutableDescriptors();
> > >
> > > @@ -840,7 +839,9 @@ public class BeanDescriptorImpl extends
> > > }
> > > }
> > > } else {
> > > - annotationProcessor.processAnnotation(annotation,
> null,
> > > ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()), access,
> > > validations, true);
> > > + annotationProcessor.processAnnotation(
> > > + annotation, null,
> > > ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
> > > + access, validations, true);
> > > }
> > > }
> > >
> > >
> > > Modified:
> > >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> > > (original)
> > > +++
> > >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -638,8 +638,9 @@ public class ClassValidator implements C
> > > protected <T> GroupValidationContext<T> createContext(MetaBean
> > > metaBean, T object, Class<T> objectClass, Class<?>... groups) {
> > > final ConstraintValidationListener<T> listener = new
> > > ConstraintValidationListener<T>(object, objectClass);
> > > final GroupValidationContextImpl<T> context =
> > > - new GroupValidationContextImpl<T>(listener,
> > > this.factoryContext.getMessageInterpolator(),
> > > - this.factoryContext.getTraversableResolver(),
> > > factoryContext.getParameterNameProvider(), metaBean);
> > > + new GroupValidationContextImpl<T>(listener,
> > > factoryContext.getMessageInterpolator(),
> > > + factoryContext.getTraversableResolver(),
> > > factoryContext.getParameterNameProvider(),
> > > + factoryContext.getConstraintValidatorFactory(),
> > metaBean);
> > > context.setBean(object, metaBean);
> > > context.setGroups(groupsComputer.computeGroups(groups));
> > > return context;
> > > @@ -648,8 +649,9 @@ public class ClassValidator implements C
> > > protected <T> GroupValidationContext<T>
> > > createInvocableContext(MetaBean metaBean, T object, Class<T>
> objectClass,
> > > Class<?>... groups) {
> > > final ConstraintValidationListener<T> listener = new
> > > ConstraintValidationListener<T>(object, objectClass);
> > > final GroupValidationContextImpl<T> context =
> > > - new GroupValidationContextImpl<T>(listener,
> > > this.factoryContext.getMessageInterpolator(),
> > > - this.factoryContext.getTraversableResolver(),
> > > factoryContext.getParameterNameProvider(), metaBean);
> > > + new GroupValidationContextImpl<T>(listener,
> > > factoryContext.getMessageInterpolator(),
> > > + factoryContext.getTraversableResolver(),
> > > factoryContext.getParameterNameProvider(),
> > > +
> factoryContext.getConstraintValidatorFactory(),
> > > metaBean);
> > > context.setBean(object, metaBean);
> > > final Groups computedGroup =
> > groupsComputer.computeGroups(groups);
> > > if
> > >
> >
> (Collections.singletonList(Group.DEFAULT).equals(computedGroup.getGroups())
> > > && metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
> > >
> > > Modified:
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> > > (original)
> > > +++
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -39,7 +39,6 @@ import javax.validation.ValidationExcept
> > > import
> javax.validation.constraintvalidation.SupportedValidationTarget;
> > > import javax.validation.constraintvalidation.ValidationTarget;
> > > import javax.validation.metadata.ConstraintDescriptor;
> > > -
> > > import java.io.Serializable;
> > > import java.lang.annotation.Annotation;
> > > import java.lang.reflect.Array;
> > > @@ -61,7 +60,6 @@ import java.util.Set;
> > > * this instance is immutable!<br/>
> > > */
> > > public class ConstraintValidation<T extends Annotation> implements
> > > Validation, ConstraintDescriptor<T> {
> > > - private final ConstraintValidatorFactory factory;
> > > private final AccessStrategy access;
> > > private final boolean reportFromComposite;
> > > private final Map<String, Object> attributes;
> > > @@ -82,11 +80,9 @@ public class ConstraintValidation<T exte
> > > private Class<? extends ConstraintValidator<T, ?>>[]
> > validatorClasses;
> > > private ConstraintTarget validationAppliesTo = null;
> > >
> > > - public ConstraintValidation(ConstraintValidatorFactory factory,
> > > - Class<? extends ConstraintValidator<T,
> > > ?>>[] validatorClasses,
> > > + public ConstraintValidation(Class<? extends ConstraintValidator<T,
> > > ?>>[] validatorClasses,
> > > T annotation, Class<?> owner,
> > > AccessStrategy access,
> > > boolean reportFromComposite,
> > > ConstraintTarget target) {
> > > - this.factory = factory;
> > > this.attributes = new HashMap<String, Object>();
> > > this.validatorClasses = ArrayUtils.clone(validatorClasses);
> > > this.annotation = annotation;
> > > @@ -158,7 +154,8 @@ public class ConstraintValidation<T exte
> > > synchronized (this) {
> > > if (validator == null) {
> > > try {
> > > - validator = getConstraintValidator(annotation,
> > > validatorClasses, owner, access);
> > > + validator = getConstraintValidator(
> > > +
> context.getConstraintValidatorFactory(),
> > > annotation, validatorClasses, owner, access);
> > > if (validator != null) {
> > > validator.initialize(annotation);
> > > }
> > > @@ -235,7 +232,8 @@ public class ConstraintValidation<T exte
> > > }
> > > }
> > >
> > > - private <A extends Annotation> ConstraintValidator<A, ? super T>
> > > getConstraintValidator(A annotation,
> > > + private <A extends Annotation> ConstraintValidator<A, ? super T>
> > > getConstraintValidator(
> > > + ConstraintValidatorFactory factory, A annotation,
> > > Class<? extends ConstraintValidator<A, ?>>[]
> constraintClasses,
> > > Class<?> owner, AccessStrategy access) {
> > > if (ArrayUtils.isNotEmpty(constraintClasses)) {
> > > final Type type = determineTargetedType(owner, access);
> > >
> > > Modified:
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> > > (original)
> > > +++
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -24,6 +24,7 @@ import org.apache.bval.model.MetaBean;
> > > import org.apache.bval.model.ValidationContext;
> > >
> > > import javax.validation.ConstraintValidator;
> > > +import javax.validation.ConstraintValidatorFactory;
> > > import javax.validation.ElementKind;
> > > import javax.validation.MessageInterpolator;
> > > import javax.validation.ParameterNameProvider;
> > > @@ -107,6 +108,12 @@ public interface GroupValidationContext<
> > > TraversableResolver getTraversableResolver();
> > >
> > > /**
> > > + * Get the {@link ConstraintValidatorFactory}.
> > > + * @return {@link ConstraintValidatorFactory}
> > > + */
> > > + ConstraintValidatorFactory getConstraintValidatorFactory();
> > > +
> > > + /**
> > > * Accumulate a validated constraint.
> > > * @param constraint
> > > * @return true when the constraint for the object in this path
> was
> > > not
> > >
> > > Modified:
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> > > (original)
> > > +++
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -27,6 +27,7 @@ import org.apache.bval.model.MetaPropert
> > > import org.apache.bval.util.AccessStrategy;
> > >
> > > import javax.validation.ConstraintValidator;
> > > +import javax.validation.ConstraintValidatorFactory;
> > > import javax.validation.ElementKind;
> > > import javax.validation.MessageInterpolator;
> > > import javax.validation.ParameterNameProvider;
> > > @@ -70,6 +71,7 @@ final class GroupValidationContextImpl<T
> > >
> > > private ConstraintValidation<?> constraintValidation;
> > > private final TraversableResolver traversableResolver;
> > > + private final ConstraintValidatorFactory
> constraintValidatorFactory;
> > >
> > > private Object[] parameters;
> > > private Object returnValue;
> > > @@ -86,11 +88,14 @@ final class GroupValidationContextImpl<T
> > > * @param rootMetaBean
> > > */
> > > public GroupValidationContextImpl(ConstraintValidationListener<T>
> > > listener, MessageInterpolator aMessageResolver,
> > > - TraversableResolver
> > > traversableResolver, ParameterNameProvider parameterNameProvider,
> > MetaBean
> > > rootMetaBean) {
> > > + TraversableResolver
> > > traversableResolver, ParameterNameProvider parameterNameProvider,
> > > + ConstraintValidatorFactory
> > > constraintValidatorFactory,
> > > + MetaBean rootMetaBean) {
> > > // inherited variable 'validatedObjects' is of type:
> > > // HashMap<GraphBeanIdentity, Set<PathImpl>> in this class
> > > super(listener, new HashMap<GraphBeanIdentity,
> > Set<PathImpl>>());
> > > this.messageResolver = aMessageResolver;
> > > + this.constraintValidatorFactory = constraintValidatorFactory;
> > > this.traversableResolver =
> > > CachingTraversableResolver.cacheFor(traversableResolver);
> > > this.parameterNameProvider = parameterNameProvider;
> > > this.rootMetaBean = rootMetaBean;
> > > @@ -313,6 +318,11 @@ final class GroupValidationContextImpl<T
> > > return traversableResolver;
> > > }
> > >
> > > + @Override
> > > + public ConstraintValidatorFactory getConstraintValidatorFactory()
> {
> > > + return constraintValidatorFactory;
> > > + }
> > > +
> > > /**
> > > * {@inheritDoc}
> > > */
> > >
> > > Modified:
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> > > (original)
> > > +++
> > >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -63,8 +63,8 @@ public class JsrMetaBeanFactory implemen
> > > // of dubious utility as it's static :/
> > > protected static final Logger log =
> > > Logger.getLogger(JsrMetaBeanFactory.class.getName());
> > >
> > > - /** {@link ApacheFactoryContext} used */
> > > - protected final ApacheFactoryContext factoryContext;
> > > + /** {@link javax.validation.ValidatorFactory} used */
> > > + protected final ApacheValidatorFactory factory;
> > >
> > > /**
> > > * {@link AnnotationProcessor} used.
> > > @@ -74,11 +74,11 @@ public class JsrMetaBeanFactory implemen
> > > /**
> > > * Create a new Jsr303MetaBeanFactory instance.
> > > *
> > > - * @param factoryContext
> > > + * @param factory the validator factory.
> > > */
> > > - public JsrMetaBeanFactory(ApacheFactoryContext factoryContext) {
> > > - this.factoryContext = factoryContext;
> > > - this.annotationProcessor = new
> > > AnnotationProcessor(factoryContext);
> > > + public JsrMetaBeanFactory(ApacheValidatorFactory factory) {
> > > + this.factory = factory;
> > > + this.annotationProcessor = new AnnotationProcessor(factory);
> > > }
> > >
> > > /**
> > > @@ -123,7 +123,7 @@ public class JsrMetaBeanFactory implemen
> > > InvocationTargetException {
> > >
> > > // if NOT ignore class level annotations
> > > - if
> > >
> >
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(beanClass))
> > > {
> > > + if
> > > (!factory.getAnnotationIgnores().isIgnoreAnnotations(beanClass)) {
> > > annotationProcessor.processAnnotations(null, beanClass,
> > > beanClass, null, new AppendValidationToMeta(metabean));
> > > }
> > >
> > > @@ -134,7 +134,7 @@ public class JsrMetaBeanFactory implemen
> > > MetaProperty metaProperty =
> > > metabean.getProperty(field.getName());
> > > // create a property for those fields for which there is
> not
> > > yet a
> > > // MetaProperty
> > > - if
> > >
> >
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(field))
> > > {
> > > + if
> > > (!factory.getAnnotationIgnores().isIgnoreAnnotations(field)) {
> > > AccessStrategy access = new FieldAccess(field);
> > > boolean create = metaProperty == null;
> > > if (create) {
> > > @@ -160,7 +160,7 @@ public class JsrMetaBeanFactory implemen
> > > propName = MethodAccess.getPropertyName(method);
> > > }
> > > if (propName != null) {
> > > - if
> > >
> >
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(method))
> > > {
> > > + if
> > > (!factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
> > > AccessStrategy access = new MethodAccess(propName,
> > > method);
> > > MetaProperty metaProperty =
> > > metabean.getProperty(propName);
> > > boolean create = metaProperty == null;
> > > @@ -198,7 +198,7 @@ public class JsrMetaBeanFactory implemen
> > > */
> > > private void addXmlConstraints(Class<?> beanClass, MetaBean
> > metabean)
> > > throws IllegalAccessException,
> > > InvocationTargetException {
> > > - for (final MetaConstraint<?, ? extends Annotation>
> > metaConstraint
> > > : factoryContext.getFactory().getMetaConstraints(beanClass)) {
> > > + for (final MetaConstraint<?, ? extends Annotation>
> > metaConstraint
> > > : factory.getMetaConstraints(beanClass)) {
> > > Meta meta;
> > > AccessStrategy access =
> metaConstraint.getAccessStrategy();
> > > boolean create = false;
> > > @@ -263,7 +263,7 @@ public class JsrMetaBeanFactory implemen
> > > metabean.putProperty(access.getPropertyName(), null);
> > > }
> > > }
> > > - for (final AccessStrategy access :
> > > factoryContext.getFactory().getValidAccesses(beanClass)) {
> > > + for (final AccessStrategy access :
> > > factory.getValidAccesses(beanClass)) {
> > > if (access.getElementType() == ElementType.PARAMETER) {
> > > continue;
> > > }
> > > @@ -289,7 +289,7 @@ public class JsrMetaBeanFactory implemen
> > > if (groupSeq == null) {
> > > groupSeq = metabean.initFeature(key, new
> > > ArrayList<Group>(annotation == null ? 1 : annotation.value().length));
> > > }
> > > - Class<?>[] groupClasses =
> > > factoryContext.getFactory().getDefaultSequence(beanClass);
> > > + Class<?>[] groupClasses =
> factory.getDefaultSequence(beanClass);
> > > if (groupClasses == null || groupClasses.length == 0) {
> > > if (annotation == null) {
> > > groupSeq.add(Group.DEFAULT);
> > >
> > > Modified:
> > >
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > ---
> > >
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> > > (original)
> > > +++
> > >
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> > > Wed Dec 23 12:45:01 2015
> > > @@ -89,6 +89,10 @@ public class ValidationTest extends Test
> > > return factory.getValidator();
> > > }
> > >
> > > + public void testCache() {
> > > +
> > >
> >
> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
> > > +
> > >
> >
> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
> > > + }
> > > public void testAccessStrategies_field_method() {
> > > AccessTestBusinessObject o1 = new
> AccessTestBusinessObject("1");
> > > AccessTestBusinessObjectSub o2 = new
> > > AccessTestBusinessObjectSub("3");
> > >
> > > Modified: bval/trunk/bval-tck/pom.xml
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-tck/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > --- bval/trunk/bval-tck/pom.xml (original)
> > > +++ bval/trunk/bval-tck/pom.xml Wed Dec 23 12:45:01 2015
> > > @@ -169,6 +169,55 @@
> > > <version>1.0.0</version>
> > > </dependency>
> > > </dependencies>
> > > + <repositories>
> > > + <repository>
> > > + <!-- override outdated URLs for jboss repo ids -->
> > > + <id>repository.jboss.org</id>
> > > + <name>JBoss Public Maven Repository Group</name>
> > > + <url>
> > > https://repository.jboss.org/nexus/content/groups/public/</url>
> > > + <layout>default</layout>
> > > + <releases>
> > > + <enabled>true</enabled>
> > > + <updatePolicy>never</updatePolicy>
> > > + <checksumPolicy>fail</checksumPolicy>
> > > + </releases>
> > > + <snapshots>
> > > + <enabled>false</enabled>
> > > + <updatePolicy>never</updatePolicy>
> > > + <checksumPolicy>warn</checksumPolicy>
> > > + </snapshots>
> > > + </repository>
> > > + <repository>
> > > + <id>jboss</id>
> > > + <name>JBoss Public Maven Repository Group
> > > (again)</name>
> > > + <url>
> > > https://repository.jboss.org/nexus/content/groups/public/</url>
> > > + <layout>default</layout>
> > > + <releases>
> > > + <enabled>true</enabled>
> > > + <updatePolicy>never</updatePolicy>
> > > + <checksumPolicy>fail</checksumPolicy>
> > > + </releases>
> > > + <snapshots>
> > > + <enabled>false</enabled>
> > > + <updatePolicy>never</updatePolicy>
> > > + <checksumPolicy>warn</checksumPolicy>
> > > + </snapshots>
> > > + </repository>
> > > + <repository>
> > > + <id>snapshots.jboss.org</id>
> > > + <url>
> > > https://repository.jboss.org/nexus/content/repositories/snapshots/
> </url>
> > > + <snapshots>
> > > + <enabled>true</enabled>
> > > + </snapshots>
> > > + </repository>
> > > + <repository>
> > > + <id>jboss-snapshots</id>
> > > + <url>
> > > https://repository.jboss.org/nexus/content/repositories/snapshots/
> </url>
> > > + <snapshots>
> > > + <enabled>true</enabled>
> > > + </snapshots>
> > > + </repository>
> > > + </repositories>
> > > <build>
> > > <plugins>
> > > <plugin>
> > >
> > > Modified: bval/trunk/pom.xml
> > > URL:
> > >
> >
> http://svn.apache.org/viewvc/bval/trunk/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
> > >
> > >
> >
> ==============================================================================
> > > --- bval/trunk/pom.xml (original)
> > > +++ bval/trunk/pom.xml Wed Dec 23 12:45:01 2015
> > > @@ -571,6 +571,7 @@
> > >
> <artifactId>commons-weaver-maven-plugin</artifactId>
> > > <version>${commons.weaver.version}</version>
> > > <configuration>
> > > + <verbose>true</verbose>
> > > <weaverConfig>
> > >
> > <privilizer.policy>DYNAMIC</privilizer.policy>
> > > </weaverConfig>
> > >
> > >
> > >
> > >
> >
>
Re: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
bval-jsr/src/main/java/org/apache/bval/jsr/ bval-jsr/src/test/java/org/apache/bval/jsr/
bval-tck/
Posted by Matt Benson <gu...@gmail.com>.
You got it. :-)
Matt
On Dec 23, 2015 9:48 AM, "Romain Manni-Bucau" <rm...@gmail.com> wrote:
> seems a bug in 1.1 of [weaver], looks fixed in coming 1.2 so just deployed
> the snapshot and upgraded in bval to the snapshot
>
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> | Blog
> <http://rmannibucau.wordpress.com> | Github <
> https://github.com/rmannibucau> |
> LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> <http://www.tomitribe.com>
>
> 2015-12-23 13:47 GMT+01:00 Romain Manni-Bucau <rm...@gmail.com>:
>
> > Hi guys
> >
> > I would need some help for commons-weaver-maven-plugin setup, i commented
> > it out cause it was just hanging. Any inputs/help on that?
> >
> > Romain Manni-Bucau
> > @rmannibucau <https://twitter.com/rmannibucau> | Blog
> > <http://rmannibucau.wordpress.com> | Github
> > <https://github.com/rmannibucau> | LinkedIn
> > <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> > <http://www.tomitribe.com>
> >
> > ---------- Forwarded message ----------
> > From: <rm...@apache.org>
> > Date: 2015-12-23 13:45 GMT+01:00
> > Subject: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
> > bval-jsr/src/main/java/org/apache/bval/jsr/
> > bval-jsr/src/test/java/org/apache/bval/jsr/ bval-tck/
> > To: commits@bval.apache.org
> >
> >
> > Author: rmannibucau
> > Date: Wed Dec 23 12:45:01 2015
> > New Revision: 1721536
> >
> > URL: http://svn.apache.org/viewvc?rev=1721536&view=rev
> > Log:
> > BVAL-143 caching should be hold by the factory or shouldnt be for
> > performance reason + reactivating jboss repo since tck (1.0) modules are
> > not on central
> >
> > Modified:
> > bval/trunk/bval-jsr/pom.xml
> >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> >
> > bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> >
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> >
> > bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> > bval/trunk/bval-tck/pom.xml
> > bval/trunk/pom.xml
> >
> > Modified: bval/trunk/bval-jsr/pom.xml
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > --- bval/trunk/bval-jsr/pom.xml (original)
> > +++ bval/trunk/bval-jsr/pom.xml Wed Dec 23 12:45:01 2015
> > @@ -297,10 +297,12 @@
> > </includes>
> > </configuration>
> > </plugin>
> > + <!-- TODO: activate but ATM it just doesnt build with it
> > <plugin>
> > <groupId>org.apache.commons</groupId>
> > <artifactId>commons-weaver-maven-plugin</artifactId>
> > </plugin>
> > + -->
> > </plugins>
> > </build>
> > </project>
> >
> > Modified:
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> > (original)
> > +++
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> > Wed Dec 23 12:45:01 2015
> > @@ -18,6 +18,23 @@
> > */
> > package org.apache.bval.jsr;
> >
> > +import org.apache.bval.jsr.groups.GroupsComputer;
> > +import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
> > +import org.apache.bval.util.AccessStrategy;
> > +import org.apache.commons.lang3.ArrayUtils;
> > +import org.apache.commons.lang3.reflect.TypeUtils;
> > +import org.apache.commons.weaver.privilizer.Privileged;
> > +
> > +import javax.validation.Constraint;
> > +import javax.validation.ConstraintDeclarationException;
> > +import javax.validation.ConstraintDefinitionException;
> > +import javax.validation.ConstraintTarget;
> > +import javax.validation.ConstraintValidator;
> > +import javax.validation.OverridesAttribute;
> > +import javax.validation.Payload;
> > +import javax.validation.ReportAsSingleViolation;
> > +import javax.validation.constraintvalidation.SupportedValidationTarget;
> > +import javax.validation.constraintvalidation.ValidationTarget;
> > import java.lang.annotation.Annotation;
> > import java.lang.reflect.InvocationTargetException;
> > import java.lang.reflect.Method;
> > @@ -32,25 +49,6 @@ import java.util.Set;
> > import java.util.logging.Level;
> > import java.util.logging.Logger;
> >
> > -import javax.validation.Constraint;
> > -import javax.validation.ConstraintDeclarationException;
> > -import javax.validation.ConstraintDefinitionException;
> > -import javax.validation.ConstraintTarget;
> > -import javax.validation.ConstraintValidator;
> > -import javax.validation.ConstraintValidatorFactory;
> > -import javax.validation.OverridesAttribute;
> > -import javax.validation.Payload;
> > -import javax.validation.ReportAsSingleViolation;
> > -import javax.validation.constraintvalidation.SupportedValidationTarget;
> > -import javax.validation.constraintvalidation.ValidationTarget;
> > -
> > -import org.apache.bval.jsr.groups.GroupsComputer;
> > -import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
> > -import org.apache.bval.util.AccessStrategy;
> > -import org.apache.commons.lang3.ArrayUtils;
> > -import org.apache.commons.lang3.reflect.TypeUtils;
> > -import org.apache.commons.weaver.privilizer.Privileged;
> > -
> > /**
> > * Description: helper class that builds a {@link ConstraintValidation}
> > or its
> > * composite constraint validations by parsing the jsr-annotations and
> > @@ -64,19 +62,19 @@ final class AnnotationConstraintBuilder<
> >
> > /**
> > * Create a new AnnotationConstraintBuilder instance.
> > - *
> > + *
> > * @param validatorClasses
> > * @param annotation
> > * @param owner
> > * @param access
> > */
> > - public AnnotationConstraintBuilder(ConstraintValidatorFactory
> factory,
> > - Class<? extends ConstraintValidator<A, ?>>[] validatorClasses, A
> > annotation, Class<?> owner,
> > - AccessStrategy access, ConstraintTarget target) {
> > + public AnnotationConstraintBuilder(
> > + Class<? extends ConstraintValidator<A, ?>>[]
> > validatorClasses, A annotation, Class<?> owner,
> > + AccessStrategy access, ConstraintTarget target) {
> > final boolean reportFromComposite =
> > annotation != null &&
> >
> annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
> > constraintValidation =
> > - new ConstraintValidation<A>(factory, validatorClasses,
> > annotation, owner, access, reportFromComposite,
> > + new ConstraintValidation<A>(validatorClasses, annotation,
> > owner, access, reportFromComposite,
> > target);
> > buildFromAnnotation();
> > }
> > @@ -259,7 +257,7 @@ final class AnnotationConstraintBuilder<
> >
> > /**
> > * Get the configured {@link ConstraintValidation}.
> > - *
> > + *
> > * @return {@link ConstraintValidation}
> > */
> > public ConstraintValidation<?> getConstraintValidation() {
> > @@ -309,7 +307,7 @@ final class AnnotationConstraintBuilder<
> > * Calculates the index of the composite constraint. The index
> > represents
> > * the order in which it is added in reference to other constraints
> > of the
> > * same type.
> > - *
> > + *
> > * @param composite
> > * The composite constraint (not yet added).
> > * @return An integer index always >= 0
> >
> > Modified:
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> > (original)
> > +++
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> > Wed Dec 23 12:45:01 2015
> > @@ -34,7 +34,6 @@ import javax.validation.constraintvalida
> > import javax.validation.constraintvalidation.ValidationTarget;
> > import javax.validation.groups.ConvertGroup;
> > import javax.validation.groups.Default;
> > -
> > import java.lang.annotation.Annotation;
> > import java.lang.reflect.AnnotatedElement;
> > import java.lang.reflect.InvocationTargetException;
> > @@ -50,15 +49,15 @@ import java.util.Set;
> > @Privilizing(@CallTo(Reflection.class))
> > public final class AnnotationProcessor {
> > /** {@link ApacheFactoryContext} used */
> > - private final ApacheFactoryContext factoryContext;
> > + private final ApacheValidatorFactory factory;
> >
> > /**
> > * Create a new {@link AnnotationProcessor} instance.
> > *
> > - * @param factoryContext
> > + * @param factory the validator factory.
> > */
> > - public AnnotationProcessor(ApacheFactoryContext factoryContext) {
> > - this.factoryContext = factoryContext;
> > + public AnnotationProcessor(ApacheValidatorFactory factory) {
> > + this.factory = factory;
> > }
> >
> > /**
> > @@ -112,7 +111,7 @@ public final class AnnotationProcessor {
> > * @throws InvocationTargetException
> > */
> > public <A extends Annotation> boolean processAnnotation(A
> annotation,
> > Meta prop, Class<?> owner,
> > - AccessStrategy access, AppendValidation appender, boolean
> > reflection) throws IllegalAccessException,
> > + AccessStrategy access, AppendValidation appender, boolean
> > reflection) throws IllegalAccessException,
> > InvocationTargetException {
> > if (annotation instanceof Valid) {
> > return addAccessStrategy(prop, access);
> > @@ -204,12 +203,11 @@ public final class AnnotationProcessor {
> > }
> > final Class<A> annotationType = (Class<A>)
> > annotation.annotationType();
> > Class<? extends ConstraintValidator<A, ?>>[] validatorClasses =
> > -
> >
> factoryContext.getFactory().getConstraintsCache().getConstraintValidators(annotationType);
> > +
> > factory.getConstraintsCache().getConstraintValidators(annotationType);
> > if (validatorClasses == null) {
> > validatorClasses = (Class<? extends ConstraintValidator<A,
> > ?>>[]) vcAnno.validatedBy();
> > if (validatorClasses.length == 0) {
> > - validatorClasses =
> > -
> >
> factoryContext.getFactory().getDefaultConstraints().getValidatorClasses(annotationType);
> > + validatorClasses =
> > factory.getDefaultConstraints().getValidatorClasses(annotationType);
> > }
> > }
> > return validatorClasses;
> > @@ -234,7 +232,8 @@ public final class AnnotationProcessor {
> > * @throws IllegalAccessException
> > * @throws InvocationTargetException
> > */
> > - private <A extends Annotation> boolean applyConstraint(A annotation,
> > + private <A extends Annotation> boolean applyConstraint(
> > + A annotation,
> > Class<? extends ConstraintValidator<A, ?>>[]
> > rawConstraintClasses, Meta prop, Class<?> owner,
> > AccessStrategy access, AppendValidation appender) throws
> > IllegalAccessException, InvocationTargetException {
> >
> > @@ -244,7 +243,8 @@ public final class AnnotationProcessor {
> > }
> >
> > final AnnotationConstraintBuilder<A> builder =
> > - new
> >
> AnnotationConstraintBuilder<A>(factoryContext.getConstraintValidatorFactory(),
> > constraintClasses,
> > + new AnnotationConstraintBuilder<A>(
> > + constraintClasses,
> > annotation, owner, access, null);
> >
> > // JSR-303 3.4.4: Add implicit groups
> >
> > Modified:
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> > (original)
> > +++
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> > Wed Dec 23 12:45:01 2015
> > @@ -18,33 +18,18 @@
> > */
> > package org.apache.bval.jsr;
> >
> > -import java.lang.reflect.Constructor;
> > -import java.util.ArrayList;
> > -import java.util.List;
> > +import org.apache.bval.MetaBeanFinder;
> > +import org.apache.bval.util.reflection.Reflection;
> > +import org.apache.commons.weaver.privilizer.Privilizing;
> > +import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> >
> > import javax.validation.ConstraintValidatorFactory;
> > import javax.validation.MessageInterpolator;
> > import javax.validation.ParameterNameProvider;
> > import javax.validation.TraversableResolver;
> > -import javax.validation.ValidationException;
> > import javax.validation.Validator;
> > import javax.validation.ValidatorContext;
> >
> > -import org.apache.bval.IntrospectorMetaBeanFactory;
> > -import org.apache.bval.MetaBeanBuilder;
> > -import org.apache.bval.MetaBeanFactory;
> > -import org.apache.bval.MetaBeanFinder;
> > -import org.apache.bval.MetaBeanManager;
> > -import org.apache.bval.util.reflection.Reflection;
> > -import org.apache.bval.xml.XMLMetaBeanBuilder;
> > -import org.apache.bval.xml.XMLMetaBeanFactory;
> > -import org.apache.bval.xml.XMLMetaBeanManager;
> > -import org.apache.commons.lang3.StringUtils;
> > -import org.apache.commons.lang3.reflect.ConstructorUtils;
> > -import org.apache.commons.weaver.privilizer.Privileged;
> > -import org.apache.commons.weaver.privilizer.Privilizing;
> > -import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> > -
> > /**
> > * Description: Represents the context that is used to create
> > * <code>ClassValidator</code> instances.<br/>
> > @@ -52,7 +37,7 @@ import org.apache.commons.weaver.privili
> > @Privilizing(@CallTo(Reflection.class))
> > public class ApacheFactoryContext implements ValidatorContext {
> > private final ApacheValidatorFactory factory;
> > - private final MetaBeanFinder metaBeanFinder;
> > + private volatile MetaBeanFinder metaBeanFinder;
> >
> > private MessageInterpolator messageInterpolator;
> > private TraversableResolver traversableResolver;
> > @@ -63,19 +48,9 @@ public class ApacheFactoryContext implem
> > * Create a new ApacheFactoryContext instance.
> > *
> > * @param factory validator factory
> > - */
> > - public ApacheFactoryContext(ApacheValidatorFactory factory) {
> > - this.factory = factory;
> > - this.metaBeanFinder = buildMetaBeanFinder();
> > - }
> > -
> > - /**
> > - * Create a new ApacheFactoryContext instance.
> > - *
> > - * @param factory validator factory
> > * @param metaBeanFinder meta finder
> > */
> > - protected ApacheFactoryContext(ApacheValidatorFactory factory,
> > MetaBeanFinder metaBeanFinder) {
> > + public ApacheFactoryContext(ApacheValidatorFactory factory,
> > MetaBeanFinder metaBeanFinder) {
> > this.factory = factory;
> > this.metaBeanFinder = metaBeanFinder;
> > }
> > @@ -99,11 +74,16 @@ public class ApacheFactoryContext implem
> > return metaBeanFinder;
> > }
> >
> > + private synchronized void resetMeta() { // ensure to ingnore the
> > cache and rebuild constraint with new model
> > + metaBeanFinder = factory.buildMetaBeanFinder();
> > + }
> > +
> > /**
> > * {@inheritDoc}
> > */
> > public ValidatorContext messageInterpolator(MessageInterpolator
> > messageInterpolator) {
> > this.messageInterpolator = messageInterpolator;
> > + resetMeta();
> > return this;
> > }
> >
> > @@ -112,6 +92,7 @@ public class ApacheFactoryContext implem
> > */
> > public ValidatorContext traversableResolver(TraversableResolver
> > traversableResolver) {
> > this.traversableResolver = traversableResolver;
> > + resetMeta();
> > return this;
> > }
> >
> > @@ -120,11 +101,13 @@ public class ApacheFactoryContext implem
> > */
> > public ValidatorContext
> > constraintValidatorFactory(ConstraintValidatorFactory
> > constraintValidatorFactory) {
> > this.constraintValidatorFactory = constraintValidatorFactory;
> > + resetMeta();
> > return this;
> > }
> >
> > public ValidatorContext parameterNameProvider(ParameterNameProvider
> > parameterNameProvider) {
> > this.parameterNameProvider = parameterNameProvider;
> > + resetMeta();
> > return this;
> > }
> >
> > @@ -171,126 +154,4 @@ public class ApacheFactoryContext implem
> > return Boolean.parseBoolean(factory.getProperties().get(
> >
> > ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS));
> > }
> > -
> > - /**
> > - * Create MetaBeanManager that uses factories:
> > - * <ol>
> > - * <li>if enabled by
> > - * {@link
> > ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
> > - * {@link IntrospectorMetaBeanFactory}</li>
> > - * <li>{@link MetaBeanFactory} types (if any) specified by
> > - * {@link
> > ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
> > - * </li>
> > - * <li>if no {@link JsrMetaBeanFactory} has yet been specified (this
> > - * allows factory order customization), a {@link JsrMetaBeanFactory}
> > - * which handles both JSR303-XML and JSR303-Annotations</li>
> > - * <li>if enabled by
> > - * {@link
> > ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
> > - * {@link XMLMetaBeanFactory}</li>
> > - * </ol>
> > - *
> > - * @return a new instance of MetaBeanManager with adequate
> > MetaBeanFactories
> > - */
> > - protected MetaBeanFinder buildMetaBeanFinder() {
> > - final List<MetaBeanFactory> builders = new
> > ArrayList<MetaBeanFactory>();
> > - if (Boolean.parseBoolean(factory.getProperties().get(
> > -
> > ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
> > - builders.add(new IntrospectorMetaBeanFactory());
> > - }
> > - final String[] factoryClassNames =
> > - StringUtils.split(factory.getProperties().get(
> > -
> > ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
> > - if (factoryClassNames != null) {
> > - for (String clsName : factoryClassNames) {
> > - // cast, relying on #createMetaBeanFactory to throw the
> > exception if incompatible:
> > - @SuppressWarnings("unchecked")
> > - final Class<? extends MetaBeanFactory> factoryClass =
> > (Class<? extends MetaBeanFactory>) loadClass(clsName);
> > - builders.add(createMetaBeanFactory(factoryClass));
> > - }
> > - }
> > - boolean jsrFound = false;
> > - for (MetaBeanFactory builder : builders) {
> > - jsrFound |= builder instanceof JsrMetaBeanFactory;
> > - }
> > - if (!jsrFound) {
> > - builders.add(new JsrMetaBeanFactory(this));
> > - }
> > - @SuppressWarnings("deprecation")
> > - final boolean enableMetaBeansXml =
> > - Boolean.parseBoolean(factory.getProperties().get(
> > -
> > ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
> > - if (enableMetaBeansXml) {
> > - XMLMetaBeanManagerCreator.addFactory(builders);
> > - }
> > - return createMetaBeanManager(builders);
> > - }
> > -
> > - /**
> > - * Create a {@link MetaBeanManager} using the specified builders.
> > - *
> > - * @param builders
> > - * {@link MetaBeanFactory} {@link List}
> > - * @return {@link MetaBeanManager}
> > - */
> > - @SuppressWarnings("deprecation")
> > - protected MetaBeanFinder createMetaBeanManager(List<MetaBeanFactory>
> > builders) {
> > - // as long as we support both: jsr (in the builders list) and
> > xstream-xml metabeans:
> > - if (Boolean.parseBoolean(factory.getProperties().get(
> > -
> > ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
> > - return
> > XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
> > - }
> > - return new MetaBeanManager(new
> > MetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
> > - }
> > -
> > - @Privileged
> > - private <F extends MetaBeanFactory> F createMetaBeanFactory(final
> > Class<F> cls) {
> > - try {
> > - Constructor<F> c =
> > ConstructorUtils.getMatchingAccessibleConstructor(cls,
> > ApacheFactoryContext.this.getClass());
> > - if (c != null) {
> > - return c.newInstance(ApacheFactoryContext.this);
> > - }
> > - c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
> > getFactory().getClass());
> > - if (c != null) {
> > - return c.newInstance(getFactory());
> > - }
> > - return cls.newInstance();
> > - } catch (Exception e) {
> > - throw new ValidationException(e);
> > - }
> > - }
> > -
> > - /**
> > - * separate class to prevent the classloader to immediately load
> > optional
> > - * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
> > XMLMetaBeanBuilder that
> > - * might not be available in the classpath
> > - */
> > - private static class XMLMetaBeanManagerCreator {
> > -
> > - static void addFactory(List<MetaBeanFactory> builders) {
> > - builders.add(new XMLMetaBeanFactory());
> > - }
> > -
> > - /**
> > - * Create the {@link MetaBeanManager} to process JSR303 XML.
> > Requires
> > - * bval-xstream at RT.
> > - *
> > - * @param builders meta bean builders
> > - * @return {@link MetaBeanManager}
> > - */
> > - // NOTE - We return MetaBeanManager instead of
> XMLMetaBeanManager
> > to
> > - // keep
> > - // bval-xstream an optional module.
> > - protected static MetaBeanManager
> > createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
> > - return new XMLMetaBeanManager(
> > - new XMLMetaBeanBuilder(builders.toArray(new
> > MetaBeanFactory[builders.size()])));
> > - }
> > - }
> > -
> > - private Class<?> loadClass(final String className) {
> > - try {
> > - return Class.forName(className, true,
> > Reflection.getClassLoader(ApacheFactoryContext.class));
> > - } catch (ClassNotFoundException ex) {
> > - throw new ValidationException("Unable to load class: " +
> > className, ex);
> > - }
> > - }
> > }
> >
> > Modified:
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> > (original)
> > +++
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> > Wed Dec 23 12:45:01 2015
> > @@ -18,13 +18,24 @@
> > */
> > package org.apache.bval.jsr;
> >
> > +import org.apache.bval.IntrospectorMetaBeanFactory;
> > +import org.apache.bval.MetaBeanBuilder;
> > +import org.apache.bval.MetaBeanFactory;
> > +import org.apache.bval.MetaBeanFinder;
> > +import org.apache.bval.MetaBeanManager;
> > import org.apache.bval.jsr.xml.AnnotationIgnores;
> > import org.apache.bval.jsr.xml.MetaConstraint;
> > import org.apache.bval.jsr.xml.ValidationMappingParser;
> > import org.apache.bval.util.AccessStrategy;
> > import org.apache.bval.util.reflection.Reflection;
> > +import org.apache.bval.xml.XMLMetaBeanBuilder;
> > +import org.apache.bval.xml.XMLMetaBeanFactory;
> > +import org.apache.bval.xml.XMLMetaBeanManager;
> > import org.apache.commons.lang3.ArrayUtils;
> > import org.apache.commons.lang3.ClassUtils;
> > +import org.apache.commons.lang3.StringUtils;
> > +import org.apache.commons.lang3.reflect.ConstructorUtils;
> > +import org.apache.commons.weaver.privilizer.Privileged;
> > import org.apache.commons.weaver.privilizer.Privilizing;
> > import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> >
> > @@ -37,9 +48,9 @@ import javax.validation.ValidationExcept
> > import javax.validation.Validator;
> > import javax.validation.ValidatorFactory;
> > import javax.validation.spi.ConfigurationState;
> > -
> > import java.io.Closeable;
> > import java.lang.annotation.Annotation;
> > +import java.lang.reflect.Constructor;
> > import java.lang.reflect.Modifier;
> > import java.util.ArrayList;
> > import java.util.Collection;
> > @@ -80,6 +91,60 @@ public class ApacheValidatorFactory impl
> > private final ConcurrentMap<Class<?>, List<MetaConstraint<?, ?
> > extends Annotation>>> constraintMap;
> >
> > private final Collection<Closeable> toClose = new
> > ArrayList<Closeable>();
> > + private final MetaBeanFinder defaultMetaBeanFinder;
> > +
> > + /**
> > + * Create MetaBeanManager that uses factories:
> > + * <ol>
> > + * <li>if enabled by
> > + * {@link
> > ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
> > + * {@link IntrospectorMetaBeanFactory}</li>
> > + * <li>{@link MetaBeanFactory} types (if any) specified by
> > + * {@link
> > ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
> > + * </li>
> > + * <li>if no {@link JsrMetaBeanFactory} has yet been specified (this
> > + * allows factory order customization), a {@link JsrMetaBeanFactory}
> > + * which handles both JSR303-XML and JSR303-Annotations</li>
> > + * <li>if enabled by
> > + * {@link
> > ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
> > + * {@link XMLMetaBeanFactory}</li>
> > + * </ol>
> > + *
> > + * @return a new instance of MetaBeanManager with adequate
> > MetaBeanFactories
> > + */
> > + protected MetaBeanFinder buildMetaBeanFinder() {
> > + final List<MetaBeanFactory> builders = new
> > ArrayList<MetaBeanFactory>();
> > + if (Boolean.parseBoolean(getProperties().get(
> > +
> > ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
> > + builders.add(new IntrospectorMetaBeanFactory());
> > + }
> > + final String[] factoryClassNames =
> > + StringUtils.split(getProperties().get(
> > +
> > ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
> > + if (factoryClassNames != null) {
> > + for (String clsName : factoryClassNames) {
> > + // cast, relying on #createMetaBeanFactory to throw the
> > exception if incompatible:
> > + @SuppressWarnings("unchecked")
> > + final Class<? extends MetaBeanFactory> factoryClass =
> > (Class<? extends MetaBeanFactory>) loadClass(clsName);
> > + builders.add(createMetaBeanFactory(factoryClass));
> > + }
> > + }
> > + boolean jsrFound = false;
> > + for (MetaBeanFactory builder : builders) {
> > + jsrFound |= builder instanceof JsrMetaBeanFactory;
> > + }
> > + if (!jsrFound) {
> > + builders.add(new JsrMetaBeanFactory(this));
> > + }
> > + @SuppressWarnings("deprecation")
> > + final boolean enableMetaBeansXml =
> > + Boolean.parseBoolean(getProperties().get(
> > +
> > ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
> > + if (enableMetaBeansXml) {
> > + XMLMetaBeanManagerCreator.addFactory(builders);
> > + }
> > + return createMetaBeanManager(builders);
> > + }
> >
> > /**
> > * Convenience method to retrieve a default global
> > ApacheValidatorFactory
> > @@ -110,22 +175,11 @@ public class ApacheValidatorFactory impl
> > /**
> > * Create a new ApacheValidatorFactory instance.
> > */
> > - public ApacheValidatorFactory(ConfigurationState
> configurationState) {
> > - properties = new HashMap<String, String>();
> > + public ApacheValidatorFactory(ConfigurationState configuration) {
> > + properties = new HashMap<String,
> > String>(configuration.getProperties());
> > defaultSequences = new HashMap<Class<?>, Class<?>[]>();
> > validAccesses = new ConcurrentHashMap<Class<?>,
> > List<AccessStrategy>>();
> > constraintMap = new ConcurrentHashMap<Class<?>,
> > List<MetaConstraint<?, ? extends Annotation>>>();
> > - configure(configurationState);
> > - }
> > -
> > - /**
> > - * Configure this {@link ApacheValidatorFactory} from a
> > - * {@link ConfigurationState}.
> > - *
> > - * @param configuration
> > - */
> > - protected void configure(final ConfigurationState configuration) {
> > - getProperties().putAll(configuration.getProperties());
> >
> > parameterNameProvider =
> configuration.getParameterNameProvider();
> > messageResolver = configuration.getMessageInterpolator();
> > @@ -138,6 +192,8 @@ public class ApacheValidatorFactory impl
> > }
> >
> > new
> >
> ValidationMappingParser(this).processMappingConfig(configuration.getMappingStreams());
> > +
> > + defaultMetaBeanFinder = buildMetaBeanFinder();
> > }
> >
> > /**
> > @@ -165,7 +221,7 @@ public class ApacheValidatorFactory impl
> > * @return the validator factory's context
> > */
> > public ApacheFactoryContext usingContext() {
> > - return new ApacheFactoryContext(this);
> > + return new ApacheFactoryContext(this, defaultMetaBeanFinder);
> > }
> >
> > /**
> > @@ -428,4 +484,73 @@ public class ApacheValidatorFactory impl
> > private static Class<?>[] safeArray(Class<?>... array) {
> > return ArrayUtils.isEmpty(array) ? ArrayUtils.EMPTY_CLASS_ARRAY
> :
> > ArrayUtils.clone(array);
> > }
> > +
> > + /**
> > + * Create a {@link MetaBeanManager} using the specified builders.
> > + *
> > + * @param builders
> > + * {@link MetaBeanFactory} {@link List}
> > + * @return {@link MetaBeanManager}
> > + */
> > + @SuppressWarnings("deprecation")
> > + protected MetaBeanFinder createMetaBeanManager(List<MetaBeanFactory>
> > builders) {
> > + // as long as we support both: jsr (in the builders list) and
> > xstream-xml metabeans:
> > + if (Boolean.parseBoolean(getProperties().get(
> > +
> > ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
> > + return
> > XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
> > + }
> > + return new MetaBeanManager(new
> > MetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
> > + }
> > +
> > + @Privileged
> > + private <F extends MetaBeanFactory> F createMetaBeanFactory(final
> > Class<F> cls) {
> > + try {
> > + Constructor<F> c =
> > ConstructorUtils.getMatchingAccessibleConstructor(cls,
> > ApacheValidatorFactory.this.getClass());
> > + if (c != null) {
> > + return c.newInstance(this);
> > + }
> > + c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
> > getClass());
> > + if (c != null) {
> > + return c.newInstance(this);
> > + }
> > + return cls.newInstance();
> > + } catch (Exception e) {
> > + throw new ValidationException(e);
> > + }
> > + }
> > +
> > + /**
> > + * separate class to prevent the classloader to immediately load
> > optional
> > + * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
> > XMLMetaBeanBuilder that
> > + * might not be available in the classpath
> > + */
> > + private static class XMLMetaBeanManagerCreator {
> > +
> > + static void addFactory(List<MetaBeanFactory> builders) {
> > + builders.add(new XMLMetaBeanFactory());
> > + }
> > +
> > + /**
> > + * Create the {@link MetaBeanManager} to process JSR303 XML.
> > Requires
> > + * bval-xstream at RT.
> > + *
> > + * @param builders meta bean builders
> > + * @return {@link MetaBeanManager}
> > + */
> > + // NOTE - We return MetaBeanManager instead of
> XMLMetaBeanManager
> > to
> > + // keep
> > + // bval-xstream an optional module.
> > + protected static MetaBeanManager
> > createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
> > + return new XMLMetaBeanManager(
> > + new XMLMetaBeanBuilder(builders.toArray(new
> > MetaBeanFactory[builders.size()])));
> > + }
> > + }
> > +
> > + private Class<?> loadClass(final String className) {
> > + try {
> > + return Class.forName(className, true,
> > Reflection.getClassLoader(ApacheValidatorFactory.class));
> > + } catch (ClassNotFoundException ex) {
> > + throw new ValidationException("Unable to load class: " +
> > className, ex);
> > + }
> > + }
> > }
> >
> > Modified:
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> > (original)
> > +++
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> > Wed Dec 23 12:45:01 2015
> > @@ -51,7 +51,6 @@ import javax.validation.metadata.MethodT
> > import javax.validation.metadata.ParameterDescriptor;
> > import javax.validation.metadata.PropertyDescriptor;
> > import javax.validation.metadata.ReturnValueDescriptor;
> > -
> > import java.beans.Introspector;
> > import java.lang.annotation.Annotation;
> > import java.lang.reflect.AccessibleObject;
> > @@ -329,7 +328,7 @@ public class BeanDescriptorImpl extends
> > private ExecutableMeta(final ApacheFactoryContext
> factoryContext,
> > final MetaBean metaBean1, final Collection<ConstraintDescriptor<?>>
> > constraintDescriptors) {
> > this.metaBean = metaBean1;
> > this.factoryContext = factoryContext;
> > - this.annotationProcessor = new
> > AnnotationProcessor(factoryContext);
> > + this.annotationProcessor = new
> > AnnotationProcessor(factoryContext.getFactory());
> >
> > buildExecutableDescriptors();
> >
> > @@ -840,7 +839,9 @@ public class BeanDescriptorImpl extends
> > }
> > }
> > } else {
> > - annotationProcessor.processAnnotation(annotation, null,
> > ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()), access,
> > validations, true);
> > + annotationProcessor.processAnnotation(
> > + annotation, null,
> > ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
> > + access, validations, true);
> > }
> > }
> >
> >
> > Modified:
> > bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> > bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> > (original)
> > +++
> > bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> > Wed Dec 23 12:45:01 2015
> > @@ -638,8 +638,9 @@ public class ClassValidator implements C
> > protected <T> GroupValidationContext<T> createContext(MetaBean
> > metaBean, T object, Class<T> objectClass, Class<?>... groups) {
> > final ConstraintValidationListener<T> listener = new
> > ConstraintValidationListener<T>(object, objectClass);
> > final GroupValidationContextImpl<T> context =
> > - new GroupValidationContextImpl<T>(listener,
> > this.factoryContext.getMessageInterpolator(),
> > - this.factoryContext.getTraversableResolver(),
> > factoryContext.getParameterNameProvider(), metaBean);
> > + new GroupValidationContextImpl<T>(listener,
> > factoryContext.getMessageInterpolator(),
> > + factoryContext.getTraversableResolver(),
> > factoryContext.getParameterNameProvider(),
> > + factoryContext.getConstraintValidatorFactory(),
> metaBean);
> > context.setBean(object, metaBean);
> > context.setGroups(groupsComputer.computeGroups(groups));
> > return context;
> > @@ -648,8 +649,9 @@ public class ClassValidator implements C
> > protected <T> GroupValidationContext<T>
> > createInvocableContext(MetaBean metaBean, T object, Class<T> objectClass,
> > Class<?>... groups) {
> > final ConstraintValidationListener<T> listener = new
> > ConstraintValidationListener<T>(object, objectClass);
> > final GroupValidationContextImpl<T> context =
> > - new GroupValidationContextImpl<T>(listener,
> > this.factoryContext.getMessageInterpolator(),
> > - this.factoryContext.getTraversableResolver(),
> > factoryContext.getParameterNameProvider(), metaBean);
> > + new GroupValidationContextImpl<T>(listener,
> > factoryContext.getMessageInterpolator(),
> > + factoryContext.getTraversableResolver(),
> > factoryContext.getParameterNameProvider(),
> > + factoryContext.getConstraintValidatorFactory(),
> > metaBean);
> > context.setBean(object, metaBean);
> > final Groups computedGroup =
> groupsComputer.computeGroups(groups);
> > if
> >
> (Collections.singletonList(Group.DEFAULT).equals(computedGroup.getGroups())
> > && metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
> >
> > Modified:
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> > (original)
> > +++
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> > Wed Dec 23 12:45:01 2015
> > @@ -39,7 +39,6 @@ import javax.validation.ValidationExcept
> > import javax.validation.constraintvalidation.SupportedValidationTarget;
> > import javax.validation.constraintvalidation.ValidationTarget;
> > import javax.validation.metadata.ConstraintDescriptor;
> > -
> > import java.io.Serializable;
> > import java.lang.annotation.Annotation;
> > import java.lang.reflect.Array;
> > @@ -61,7 +60,6 @@ import java.util.Set;
> > * this instance is immutable!<br/>
> > */
> > public class ConstraintValidation<T extends Annotation> implements
> > Validation, ConstraintDescriptor<T> {
> > - private final ConstraintValidatorFactory factory;
> > private final AccessStrategy access;
> > private final boolean reportFromComposite;
> > private final Map<String, Object> attributes;
> > @@ -82,11 +80,9 @@ public class ConstraintValidation<T exte
> > private Class<? extends ConstraintValidator<T, ?>>[]
> validatorClasses;
> > private ConstraintTarget validationAppliesTo = null;
> >
> > - public ConstraintValidation(ConstraintValidatorFactory factory,
> > - Class<? extends ConstraintValidator<T,
> > ?>>[] validatorClasses,
> > + public ConstraintValidation(Class<? extends ConstraintValidator<T,
> > ?>>[] validatorClasses,
> > T annotation, Class<?> owner,
> > AccessStrategy access,
> > boolean reportFromComposite,
> > ConstraintTarget target) {
> > - this.factory = factory;
> > this.attributes = new HashMap<String, Object>();
> > this.validatorClasses = ArrayUtils.clone(validatorClasses);
> > this.annotation = annotation;
> > @@ -158,7 +154,8 @@ public class ConstraintValidation<T exte
> > synchronized (this) {
> > if (validator == null) {
> > try {
> > - validator = getConstraintValidator(annotation,
> > validatorClasses, owner, access);
> > + validator = getConstraintValidator(
> > + context.getConstraintValidatorFactory(),
> > annotation, validatorClasses, owner, access);
> > if (validator != null) {
> > validator.initialize(annotation);
> > }
> > @@ -235,7 +232,8 @@ public class ConstraintValidation<T exte
> > }
> > }
> >
> > - private <A extends Annotation> ConstraintValidator<A, ? super T>
> > getConstraintValidator(A annotation,
> > + private <A extends Annotation> ConstraintValidator<A, ? super T>
> > getConstraintValidator(
> > + ConstraintValidatorFactory factory, A annotation,
> > Class<? extends ConstraintValidator<A, ?>>[] constraintClasses,
> > Class<?> owner, AccessStrategy access) {
> > if (ArrayUtils.isNotEmpty(constraintClasses)) {
> > final Type type = determineTargetedType(owner, access);
> >
> > Modified:
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> > (original)
> > +++
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> > Wed Dec 23 12:45:01 2015
> > @@ -24,6 +24,7 @@ import org.apache.bval.model.MetaBean;
> > import org.apache.bval.model.ValidationContext;
> >
> > import javax.validation.ConstraintValidator;
> > +import javax.validation.ConstraintValidatorFactory;
> > import javax.validation.ElementKind;
> > import javax.validation.MessageInterpolator;
> > import javax.validation.ParameterNameProvider;
> > @@ -107,6 +108,12 @@ public interface GroupValidationContext<
> > TraversableResolver getTraversableResolver();
> >
> > /**
> > + * Get the {@link ConstraintValidatorFactory}.
> > + * @return {@link ConstraintValidatorFactory}
> > + */
> > + ConstraintValidatorFactory getConstraintValidatorFactory();
> > +
> > + /**
> > * Accumulate a validated constraint.
> > * @param constraint
> > * @return true when the constraint for the object in this path was
> > not
> >
> > Modified:
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> > (original)
> > +++
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> > Wed Dec 23 12:45:01 2015
> > @@ -27,6 +27,7 @@ import org.apache.bval.model.MetaPropert
> > import org.apache.bval.util.AccessStrategy;
> >
> > import javax.validation.ConstraintValidator;
> > +import javax.validation.ConstraintValidatorFactory;
> > import javax.validation.ElementKind;
> > import javax.validation.MessageInterpolator;
> > import javax.validation.ParameterNameProvider;
> > @@ -70,6 +71,7 @@ final class GroupValidationContextImpl<T
> >
> > private ConstraintValidation<?> constraintValidation;
> > private final TraversableResolver traversableResolver;
> > + private final ConstraintValidatorFactory constraintValidatorFactory;
> >
> > private Object[] parameters;
> > private Object returnValue;
> > @@ -86,11 +88,14 @@ final class GroupValidationContextImpl<T
> > * @param rootMetaBean
> > */
> > public GroupValidationContextImpl(ConstraintValidationListener<T>
> > listener, MessageInterpolator aMessageResolver,
> > - TraversableResolver
> > traversableResolver, ParameterNameProvider parameterNameProvider,
> MetaBean
> > rootMetaBean) {
> > + TraversableResolver
> > traversableResolver, ParameterNameProvider parameterNameProvider,
> > + ConstraintValidatorFactory
> > constraintValidatorFactory,
> > + MetaBean rootMetaBean) {
> > // inherited variable 'validatedObjects' is of type:
> > // HashMap<GraphBeanIdentity, Set<PathImpl>> in this class
> > super(listener, new HashMap<GraphBeanIdentity,
> Set<PathImpl>>());
> > this.messageResolver = aMessageResolver;
> > + this.constraintValidatorFactory = constraintValidatorFactory;
> > this.traversableResolver =
> > CachingTraversableResolver.cacheFor(traversableResolver);
> > this.parameterNameProvider = parameterNameProvider;
> > this.rootMetaBean = rootMetaBean;
> > @@ -313,6 +318,11 @@ final class GroupValidationContextImpl<T
> > return traversableResolver;
> > }
> >
> > + @Override
> > + public ConstraintValidatorFactory getConstraintValidatorFactory() {
> > + return constraintValidatorFactory;
> > + }
> > +
> > /**
> > * {@inheritDoc}
> > */
> >
> > Modified:
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> > (original)
> > +++
> >
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> > Wed Dec 23 12:45:01 2015
> > @@ -63,8 +63,8 @@ public class JsrMetaBeanFactory implemen
> > // of dubious utility as it's static :/
> > protected static final Logger log =
> > Logger.getLogger(JsrMetaBeanFactory.class.getName());
> >
> > - /** {@link ApacheFactoryContext} used */
> > - protected final ApacheFactoryContext factoryContext;
> > + /** {@link javax.validation.ValidatorFactory} used */
> > + protected final ApacheValidatorFactory factory;
> >
> > /**
> > * {@link AnnotationProcessor} used.
> > @@ -74,11 +74,11 @@ public class JsrMetaBeanFactory implemen
> > /**
> > * Create a new Jsr303MetaBeanFactory instance.
> > *
> > - * @param factoryContext
> > + * @param factory the validator factory.
> > */
> > - public JsrMetaBeanFactory(ApacheFactoryContext factoryContext) {
> > - this.factoryContext = factoryContext;
> > - this.annotationProcessor = new
> > AnnotationProcessor(factoryContext);
> > + public JsrMetaBeanFactory(ApacheValidatorFactory factory) {
> > + this.factory = factory;
> > + this.annotationProcessor = new AnnotationProcessor(factory);
> > }
> >
> > /**
> > @@ -123,7 +123,7 @@ public class JsrMetaBeanFactory implemen
> > InvocationTargetException {
> >
> > // if NOT ignore class level annotations
> > - if
> >
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(beanClass))
> > {
> > + if
> > (!factory.getAnnotationIgnores().isIgnoreAnnotations(beanClass)) {
> > annotationProcessor.processAnnotations(null, beanClass,
> > beanClass, null, new AppendValidationToMeta(metabean));
> > }
> >
> > @@ -134,7 +134,7 @@ public class JsrMetaBeanFactory implemen
> > MetaProperty metaProperty =
> > metabean.getProperty(field.getName());
> > // create a property for those fields for which there is not
> > yet a
> > // MetaProperty
> > - if
> >
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(field))
> > {
> > + if
> > (!factory.getAnnotationIgnores().isIgnoreAnnotations(field)) {
> > AccessStrategy access = new FieldAccess(field);
> > boolean create = metaProperty == null;
> > if (create) {
> > @@ -160,7 +160,7 @@ public class JsrMetaBeanFactory implemen
> > propName = MethodAccess.getPropertyName(method);
> > }
> > if (propName != null) {
> > - if
> >
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(method))
> > {
> > + if
> > (!factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
> > AccessStrategy access = new MethodAccess(propName,
> > method);
> > MetaProperty metaProperty =
> > metabean.getProperty(propName);
> > boolean create = metaProperty == null;
> > @@ -198,7 +198,7 @@ public class JsrMetaBeanFactory implemen
> > */
> > private void addXmlConstraints(Class<?> beanClass, MetaBean
> metabean)
> > throws IllegalAccessException,
> > InvocationTargetException {
> > - for (final MetaConstraint<?, ? extends Annotation>
> metaConstraint
> > : factoryContext.getFactory().getMetaConstraints(beanClass)) {
> > + for (final MetaConstraint<?, ? extends Annotation>
> metaConstraint
> > : factory.getMetaConstraints(beanClass)) {
> > Meta meta;
> > AccessStrategy access = metaConstraint.getAccessStrategy();
> > boolean create = false;
> > @@ -263,7 +263,7 @@ public class JsrMetaBeanFactory implemen
> > metabean.putProperty(access.getPropertyName(), null);
> > }
> > }
> > - for (final AccessStrategy access :
> > factoryContext.getFactory().getValidAccesses(beanClass)) {
> > + for (final AccessStrategy access :
> > factory.getValidAccesses(beanClass)) {
> > if (access.getElementType() == ElementType.PARAMETER) {
> > continue;
> > }
> > @@ -289,7 +289,7 @@ public class JsrMetaBeanFactory implemen
> > if (groupSeq == null) {
> > groupSeq = metabean.initFeature(key, new
> > ArrayList<Group>(annotation == null ? 1 : annotation.value().length));
> > }
> > - Class<?>[] groupClasses =
> > factoryContext.getFactory().getDefaultSequence(beanClass);
> > + Class<?>[] groupClasses = factory.getDefaultSequence(beanClass);
> > if (groupClasses == null || groupClasses.length == 0) {
> > if (annotation == null) {
> > groupSeq.add(Group.DEFAULT);
> >
> > Modified:
> > bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > ---
> > bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> > (original)
> > +++
> > bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> > Wed Dec 23 12:45:01 2015
> > @@ -89,6 +89,10 @@ public class ValidationTest extends Test
> > return factory.getValidator();
> > }
> >
> > + public void testCache() {
> > +
> >
> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
> > +
> >
> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
> > + }
> > public void testAccessStrategies_field_method() {
> > AccessTestBusinessObject o1 = new AccessTestBusinessObject("1");
> > AccessTestBusinessObjectSub o2 = new
> > AccessTestBusinessObjectSub("3");
> >
> > Modified: bval/trunk/bval-tck/pom.xml
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/bval-tck/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > --- bval/trunk/bval-tck/pom.xml (original)
> > +++ bval/trunk/bval-tck/pom.xml Wed Dec 23 12:45:01 2015
> > @@ -169,6 +169,55 @@
> > <version>1.0.0</version>
> > </dependency>
> > </dependencies>
> > + <repositories>
> > + <repository>
> > + <!-- override outdated URLs for jboss repo ids -->
> > + <id>repository.jboss.org</id>
> > + <name>JBoss Public Maven Repository Group</name>
> > + <url>
> > https://repository.jboss.org/nexus/content/groups/public/</url>
> > + <layout>default</layout>
> > + <releases>
> > + <enabled>true</enabled>
> > + <updatePolicy>never</updatePolicy>
> > + <checksumPolicy>fail</checksumPolicy>
> > + </releases>
> > + <snapshots>
> > + <enabled>false</enabled>
> > + <updatePolicy>never</updatePolicy>
> > + <checksumPolicy>warn</checksumPolicy>
> > + </snapshots>
> > + </repository>
> > + <repository>
> > + <id>jboss</id>
> > + <name>JBoss Public Maven Repository Group
> > (again)</name>
> > + <url>
> > https://repository.jboss.org/nexus/content/groups/public/</url>
> > + <layout>default</layout>
> > + <releases>
> > + <enabled>true</enabled>
> > + <updatePolicy>never</updatePolicy>
> > + <checksumPolicy>fail</checksumPolicy>
> > + </releases>
> > + <snapshots>
> > + <enabled>false</enabled>
> > + <updatePolicy>never</updatePolicy>
> > + <checksumPolicy>warn</checksumPolicy>
> > + </snapshots>
> > + </repository>
> > + <repository>
> > + <id>snapshots.jboss.org</id>
> > + <url>
> > https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
> > + <snapshots>
> > + <enabled>true</enabled>
> > + </snapshots>
> > + </repository>
> > + <repository>
> > + <id>jboss-snapshots</id>
> > + <url>
> > https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
> > + <snapshots>
> > + <enabled>true</enabled>
> > + </snapshots>
> > + </repository>
> > + </repositories>
> > <build>
> > <plugins>
> > <plugin>
> >
> > Modified: bval/trunk/pom.xml
> > URL:
> >
> http://svn.apache.org/viewvc/bval/trunk/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
> >
> >
> ==============================================================================
> > --- bval/trunk/pom.xml (original)
> > +++ bval/trunk/pom.xml Wed Dec 23 12:45:01 2015
> > @@ -571,6 +571,7 @@
> > <artifactId>commons-weaver-maven-plugin</artifactId>
> > <version>${commons.weaver.version}</version>
> > <configuration>
> > + <verbose>true</verbose>
> > <weaverConfig>
> >
> <privilizer.policy>DYNAMIC</privilizer.policy>
> > </weaverConfig>
> >
> >
> >
> >
>
Re: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
bval-jsr/src/main/java/org/apache/bval/jsr/ bval-jsr/src/test/java/org/apache/bval/jsr/
bval-tck/
Posted by Romain Manni-Bucau <rm...@gmail.com>.
seems a bug in 1.1 of [weaver], looks fixed in coming 1.2 so just deployed
the snapshot and upgraded in bval to the snapshot
Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> | Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
<http://www.tomitribe.com>
2015-12-23 13:47 GMT+01:00 Romain Manni-Bucau <rm...@gmail.com>:
> Hi guys
>
> I would need some help for commons-weaver-maven-plugin setup, i commented
> it out cause it was just hanging. Any inputs/help on that?
>
> Romain Manni-Bucau
> @rmannibucau <https://twitter.com/rmannibucau> | Blog
> <http://rmannibucau.wordpress.com> | Github
> <https://github.com/rmannibucau> | LinkedIn
> <https://www.linkedin.com/in/rmannibucau> | Tomitriber
> <http://www.tomitribe.com>
>
> ---------- Forwarded message ----------
> From: <rm...@apache.org>
> Date: 2015-12-23 13:45 GMT+01:00
> Subject: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
> bval-jsr/src/main/java/org/apache/bval/jsr/
> bval-jsr/src/test/java/org/apache/bval/jsr/ bval-tck/
> To: commits@bval.apache.org
>
>
> Author: rmannibucau
> Date: Wed Dec 23 12:45:01 2015
> New Revision: 1721536
>
> URL: http://svn.apache.org/viewvc?rev=1721536&view=rev
> Log:
> BVAL-143 caching should be hold by the factory or shouldnt be for
> performance reason + reactivating jboss repo since tck (1.0) modules are
> not on central
>
> Modified:
> bval/trunk/bval-jsr/pom.xml
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
>
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
>
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> bval/trunk/bval-tck/pom.xml
> bval/trunk/pom.xml
>
> Modified: bval/trunk/bval-jsr/pom.xml
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> --- bval/trunk/bval-jsr/pom.xml (original)
> +++ bval/trunk/bval-jsr/pom.xml Wed Dec 23 12:45:01 2015
> @@ -297,10 +297,12 @@
> </includes>
> </configuration>
> </plugin>
> + <!-- TODO: activate but ATM it just doesnt build with it
> <plugin>
> <groupId>org.apache.commons</groupId>
> <artifactId>commons-weaver-maven-plugin</artifactId>
> </plugin>
> + -->
> </plugins>
> </build>
> </project>
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
> Wed Dec 23 12:45:01 2015
> @@ -18,6 +18,23 @@
> */
> package org.apache.bval.jsr;
>
> +import org.apache.bval.jsr.groups.GroupsComputer;
> +import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
> +import org.apache.bval.util.AccessStrategy;
> +import org.apache.commons.lang3.ArrayUtils;
> +import org.apache.commons.lang3.reflect.TypeUtils;
> +import org.apache.commons.weaver.privilizer.Privileged;
> +
> +import javax.validation.Constraint;
> +import javax.validation.ConstraintDeclarationException;
> +import javax.validation.ConstraintDefinitionException;
> +import javax.validation.ConstraintTarget;
> +import javax.validation.ConstraintValidator;
> +import javax.validation.OverridesAttribute;
> +import javax.validation.Payload;
> +import javax.validation.ReportAsSingleViolation;
> +import javax.validation.constraintvalidation.SupportedValidationTarget;
> +import javax.validation.constraintvalidation.ValidationTarget;
> import java.lang.annotation.Annotation;
> import java.lang.reflect.InvocationTargetException;
> import java.lang.reflect.Method;
> @@ -32,25 +49,6 @@ import java.util.Set;
> import java.util.logging.Level;
> import java.util.logging.Logger;
>
> -import javax.validation.Constraint;
> -import javax.validation.ConstraintDeclarationException;
> -import javax.validation.ConstraintDefinitionException;
> -import javax.validation.ConstraintTarget;
> -import javax.validation.ConstraintValidator;
> -import javax.validation.ConstraintValidatorFactory;
> -import javax.validation.OverridesAttribute;
> -import javax.validation.Payload;
> -import javax.validation.ReportAsSingleViolation;
> -import javax.validation.constraintvalidation.SupportedValidationTarget;
> -import javax.validation.constraintvalidation.ValidationTarget;
> -
> -import org.apache.bval.jsr.groups.GroupsComputer;
> -import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
> -import org.apache.bval.util.AccessStrategy;
> -import org.apache.commons.lang3.ArrayUtils;
> -import org.apache.commons.lang3.reflect.TypeUtils;
> -import org.apache.commons.weaver.privilizer.Privileged;
> -
> /**
> * Description: helper class that builds a {@link ConstraintValidation}
> or its
> * composite constraint validations by parsing the jsr-annotations and
> @@ -64,19 +62,19 @@ final class AnnotationConstraintBuilder<
>
> /**
> * Create a new AnnotationConstraintBuilder instance.
> - *
> + *
> * @param validatorClasses
> * @param annotation
> * @param owner
> * @param access
> */
> - public AnnotationConstraintBuilder(ConstraintValidatorFactory factory,
> - Class<? extends ConstraintValidator<A, ?>>[] validatorClasses, A
> annotation, Class<?> owner,
> - AccessStrategy access, ConstraintTarget target) {
> + public AnnotationConstraintBuilder(
> + Class<? extends ConstraintValidator<A, ?>>[]
> validatorClasses, A annotation, Class<?> owner,
> + AccessStrategy access, ConstraintTarget target) {
> final boolean reportFromComposite =
> annotation != null &&
> annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
> constraintValidation =
> - new ConstraintValidation<A>(factory, validatorClasses,
> annotation, owner, access, reportFromComposite,
> + new ConstraintValidation<A>(validatorClasses, annotation,
> owner, access, reportFromComposite,
> target);
> buildFromAnnotation();
> }
> @@ -259,7 +257,7 @@ final class AnnotationConstraintBuilder<
>
> /**
> * Get the configured {@link ConstraintValidation}.
> - *
> + *
> * @return {@link ConstraintValidation}
> */
> public ConstraintValidation<?> getConstraintValidation() {
> @@ -309,7 +307,7 @@ final class AnnotationConstraintBuilder<
> * Calculates the index of the composite constraint. The index
> represents
> * the order in which it is added in reference to other constraints
> of the
> * same type.
> - *
> + *
> * @param composite
> * The composite constraint (not yet added).
> * @return An integer index always >= 0
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
> Wed Dec 23 12:45:01 2015
> @@ -34,7 +34,6 @@ import javax.validation.constraintvalida
> import javax.validation.constraintvalidation.ValidationTarget;
> import javax.validation.groups.ConvertGroup;
> import javax.validation.groups.Default;
> -
> import java.lang.annotation.Annotation;
> import java.lang.reflect.AnnotatedElement;
> import java.lang.reflect.InvocationTargetException;
> @@ -50,15 +49,15 @@ import java.util.Set;
> @Privilizing(@CallTo(Reflection.class))
> public final class AnnotationProcessor {
> /** {@link ApacheFactoryContext} used */
> - private final ApacheFactoryContext factoryContext;
> + private final ApacheValidatorFactory factory;
>
> /**
> * Create a new {@link AnnotationProcessor} instance.
> *
> - * @param factoryContext
> + * @param factory the validator factory.
> */
> - public AnnotationProcessor(ApacheFactoryContext factoryContext) {
> - this.factoryContext = factoryContext;
> + public AnnotationProcessor(ApacheValidatorFactory factory) {
> + this.factory = factory;
> }
>
> /**
> @@ -112,7 +111,7 @@ public final class AnnotationProcessor {
> * @throws InvocationTargetException
> */
> public <A extends Annotation> boolean processAnnotation(A annotation,
> Meta prop, Class<?> owner,
> - AccessStrategy access, AppendValidation appender, boolean
> reflection) throws IllegalAccessException,
> + AccessStrategy access, AppendValidation appender, boolean
> reflection) throws IllegalAccessException,
> InvocationTargetException {
> if (annotation instanceof Valid) {
> return addAccessStrategy(prop, access);
> @@ -204,12 +203,11 @@ public final class AnnotationProcessor {
> }
> final Class<A> annotationType = (Class<A>)
> annotation.annotationType();
> Class<? extends ConstraintValidator<A, ?>>[] validatorClasses =
> -
> factoryContext.getFactory().getConstraintsCache().getConstraintValidators(annotationType);
> +
> factory.getConstraintsCache().getConstraintValidators(annotationType);
> if (validatorClasses == null) {
> validatorClasses = (Class<? extends ConstraintValidator<A,
> ?>>[]) vcAnno.validatedBy();
> if (validatorClasses.length == 0) {
> - validatorClasses =
> -
> factoryContext.getFactory().getDefaultConstraints().getValidatorClasses(annotationType);
> + validatorClasses =
> factory.getDefaultConstraints().getValidatorClasses(annotationType);
> }
> }
> return validatorClasses;
> @@ -234,7 +232,8 @@ public final class AnnotationProcessor {
> * @throws IllegalAccessException
> * @throws InvocationTargetException
> */
> - private <A extends Annotation> boolean applyConstraint(A annotation,
> + private <A extends Annotation> boolean applyConstraint(
> + A annotation,
> Class<? extends ConstraintValidator<A, ?>>[]
> rawConstraintClasses, Meta prop, Class<?> owner,
> AccessStrategy access, AppendValidation appender) throws
> IllegalAccessException, InvocationTargetException {
>
> @@ -244,7 +243,8 @@ public final class AnnotationProcessor {
> }
>
> final AnnotationConstraintBuilder<A> builder =
> - new
> AnnotationConstraintBuilder<A>(factoryContext.getConstraintValidatorFactory(),
> constraintClasses,
> + new AnnotationConstraintBuilder<A>(
> + constraintClasses,
> annotation, owner, access, null);
>
> // JSR-303 3.4.4: Add implicit groups
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
> Wed Dec 23 12:45:01 2015
> @@ -18,33 +18,18 @@
> */
> package org.apache.bval.jsr;
>
> -import java.lang.reflect.Constructor;
> -import java.util.ArrayList;
> -import java.util.List;
> +import org.apache.bval.MetaBeanFinder;
> +import org.apache.bval.util.reflection.Reflection;
> +import org.apache.commons.weaver.privilizer.Privilizing;
> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
>
> import javax.validation.ConstraintValidatorFactory;
> import javax.validation.MessageInterpolator;
> import javax.validation.ParameterNameProvider;
> import javax.validation.TraversableResolver;
> -import javax.validation.ValidationException;
> import javax.validation.Validator;
> import javax.validation.ValidatorContext;
>
> -import org.apache.bval.IntrospectorMetaBeanFactory;
> -import org.apache.bval.MetaBeanBuilder;
> -import org.apache.bval.MetaBeanFactory;
> -import org.apache.bval.MetaBeanFinder;
> -import org.apache.bval.MetaBeanManager;
> -import org.apache.bval.util.reflection.Reflection;
> -import org.apache.bval.xml.XMLMetaBeanBuilder;
> -import org.apache.bval.xml.XMLMetaBeanFactory;
> -import org.apache.bval.xml.XMLMetaBeanManager;
> -import org.apache.commons.lang3.StringUtils;
> -import org.apache.commons.lang3.reflect.ConstructorUtils;
> -import org.apache.commons.weaver.privilizer.Privileged;
> -import org.apache.commons.weaver.privilizer.Privilizing;
> -import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
> -
> /**
> * Description: Represents the context that is used to create
> * <code>ClassValidator</code> instances.<br/>
> @@ -52,7 +37,7 @@ import org.apache.commons.weaver.privili
> @Privilizing(@CallTo(Reflection.class))
> public class ApacheFactoryContext implements ValidatorContext {
> private final ApacheValidatorFactory factory;
> - private final MetaBeanFinder metaBeanFinder;
> + private volatile MetaBeanFinder metaBeanFinder;
>
> private MessageInterpolator messageInterpolator;
> private TraversableResolver traversableResolver;
> @@ -63,19 +48,9 @@ public class ApacheFactoryContext implem
> * Create a new ApacheFactoryContext instance.
> *
> * @param factory validator factory
> - */
> - public ApacheFactoryContext(ApacheValidatorFactory factory) {
> - this.factory = factory;
> - this.metaBeanFinder = buildMetaBeanFinder();
> - }
> -
> - /**
> - * Create a new ApacheFactoryContext instance.
> - *
> - * @param factory validator factory
> * @param metaBeanFinder meta finder
> */
> - protected ApacheFactoryContext(ApacheValidatorFactory factory,
> MetaBeanFinder metaBeanFinder) {
> + public ApacheFactoryContext(ApacheValidatorFactory factory,
> MetaBeanFinder metaBeanFinder) {
> this.factory = factory;
> this.metaBeanFinder = metaBeanFinder;
> }
> @@ -99,11 +74,16 @@ public class ApacheFactoryContext implem
> return metaBeanFinder;
> }
>
> + private synchronized void resetMeta() { // ensure to ingnore the
> cache and rebuild constraint with new model
> + metaBeanFinder = factory.buildMetaBeanFinder();
> + }
> +
> /**
> * {@inheritDoc}
> */
> public ValidatorContext messageInterpolator(MessageInterpolator
> messageInterpolator) {
> this.messageInterpolator = messageInterpolator;
> + resetMeta();
> return this;
> }
>
> @@ -112,6 +92,7 @@ public class ApacheFactoryContext implem
> */
> public ValidatorContext traversableResolver(TraversableResolver
> traversableResolver) {
> this.traversableResolver = traversableResolver;
> + resetMeta();
> return this;
> }
>
> @@ -120,11 +101,13 @@ public class ApacheFactoryContext implem
> */
> public ValidatorContext
> constraintValidatorFactory(ConstraintValidatorFactory
> constraintValidatorFactory) {
> this.constraintValidatorFactory = constraintValidatorFactory;
> + resetMeta();
> return this;
> }
>
> public ValidatorContext parameterNameProvider(ParameterNameProvider
> parameterNameProvider) {
> this.parameterNameProvider = parameterNameProvider;
> + resetMeta();
> return this;
> }
>
> @@ -171,126 +154,4 @@ public class ApacheFactoryContext implem
> return Boolean.parseBoolean(factory.getProperties().get(
>
> ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS));
> }
> -
> - /**
> - * Create MetaBeanManager that uses factories:
> - * <ol>
> - * <li>if enabled by
> - * {@link
> ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
> - * {@link IntrospectorMetaBeanFactory}</li>
> - * <li>{@link MetaBeanFactory} types (if any) specified by
> - * {@link
> ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
> - * </li>
> - * <li>if no {@link JsrMetaBeanFactory} has yet been specified (this
> - * allows factory order customization), a {@link JsrMetaBeanFactory}
> - * which handles both JSR303-XML and JSR303-Annotations</li>
> - * <li>if enabled by
> - * {@link
> ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
> - * {@link XMLMetaBeanFactory}</li>
> - * </ol>
> - *
> - * @return a new instance of MetaBeanManager with adequate
> MetaBeanFactories
> - */
> - protected MetaBeanFinder buildMetaBeanFinder() {
> - final List<MetaBeanFactory> builders = new
> ArrayList<MetaBeanFactory>();
> - if (Boolean.parseBoolean(factory.getProperties().get(
> -
> ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
> - builders.add(new IntrospectorMetaBeanFactory());
> - }
> - final String[] factoryClassNames =
> - StringUtils.split(factory.getProperties().get(
> -
> ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
> - if (factoryClassNames != null) {
> - for (String clsName : factoryClassNames) {
> - // cast, relying on #createMetaBeanFactory to throw the
> exception if incompatible:
> - @SuppressWarnings("unchecked")
> - final Class<? extends MetaBeanFactory> factoryClass =
> (Class<? extends MetaBeanFactory>) loadClass(clsName);
> - builders.add(createMetaBeanFactory(factoryClass));
> - }
> - }
> - boolean jsrFound = false;
> - for (MetaBeanFactory builder : builders) {
> - jsrFound |= builder instanceof JsrMetaBeanFactory;
> - }
> - if (!jsrFound) {
> - builders.add(new JsrMetaBeanFactory(this));
> - }
> - @SuppressWarnings("deprecation")
> - final boolean enableMetaBeansXml =
> - Boolean.parseBoolean(factory.getProperties().get(
> -
> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
> - if (enableMetaBeansXml) {
> - XMLMetaBeanManagerCreator.addFactory(builders);
> - }
> - return createMetaBeanManager(builders);
> - }
> -
> - /**
> - * Create a {@link MetaBeanManager} using the specified builders.
> - *
> - * @param builders
> - * {@link MetaBeanFactory} {@link List}
> - * @return {@link MetaBeanManager}
> - */
> - @SuppressWarnings("deprecation")
> - protected MetaBeanFinder createMetaBeanManager(List<MetaBeanFactory>
> builders) {
> - // as long as we support both: jsr (in the builders list) and
> xstream-xml metabeans:
> - if (Boolean.parseBoolean(factory.getProperties().get(
> -
> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
> - return
> XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
> - }
> - return new MetaBeanManager(new
> MetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
> - }
> -
> - @Privileged
> - private <F extends MetaBeanFactory> F createMetaBeanFactory(final
> Class<F> cls) {
> - try {
> - Constructor<F> c =
> ConstructorUtils.getMatchingAccessibleConstructor(cls,
> ApacheFactoryContext.this.getClass());
> - if (c != null) {
> - return c.newInstance(ApacheFactoryContext.this);
> - }
> - c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
> getFactory().getClass());
> - if (c != null) {
> - return c.newInstance(getFactory());
> - }
> - return cls.newInstance();
> - } catch (Exception e) {
> - throw new ValidationException(e);
> - }
> - }
> -
> - /**
> - * separate class to prevent the classloader to immediately load
> optional
> - * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
> XMLMetaBeanBuilder that
> - * might not be available in the classpath
> - */
> - private static class XMLMetaBeanManagerCreator {
> -
> - static void addFactory(List<MetaBeanFactory> builders) {
> - builders.add(new XMLMetaBeanFactory());
> - }
> -
> - /**
> - * Create the {@link MetaBeanManager} to process JSR303 XML.
> Requires
> - * bval-xstream at RT.
> - *
> - * @param builders meta bean builders
> - * @return {@link MetaBeanManager}
> - */
> - // NOTE - We return MetaBeanManager instead of XMLMetaBeanManager
> to
> - // keep
> - // bval-xstream an optional module.
> - protected static MetaBeanManager
> createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
> - return new XMLMetaBeanManager(
> - new XMLMetaBeanBuilder(builders.toArray(new
> MetaBeanFactory[builders.size()])));
> - }
> - }
> -
> - private Class<?> loadClass(final String className) {
> - try {
> - return Class.forName(className, true,
> Reflection.getClassLoader(ApacheFactoryContext.class));
> - } catch (ClassNotFoundException ex) {
> - throw new ValidationException("Unable to load class: " +
> className, ex);
> - }
> - }
> }
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
> Wed Dec 23 12:45:01 2015
> @@ -18,13 +18,24 @@
> */
> package org.apache.bval.jsr;
>
> +import org.apache.bval.IntrospectorMetaBeanFactory;
> +import org.apache.bval.MetaBeanBuilder;
> +import org.apache.bval.MetaBeanFactory;
> +import org.apache.bval.MetaBeanFinder;
> +import org.apache.bval.MetaBeanManager;
> import org.apache.bval.jsr.xml.AnnotationIgnores;
> import org.apache.bval.jsr.xml.MetaConstraint;
> import org.apache.bval.jsr.xml.ValidationMappingParser;
> import org.apache.bval.util.AccessStrategy;
> import org.apache.bval.util.reflection.Reflection;
> +import org.apache.bval.xml.XMLMetaBeanBuilder;
> +import org.apache.bval.xml.XMLMetaBeanFactory;
> +import org.apache.bval.xml.XMLMetaBeanManager;
> import org.apache.commons.lang3.ArrayUtils;
> import org.apache.commons.lang3.ClassUtils;
> +import org.apache.commons.lang3.StringUtils;
> +import org.apache.commons.lang3.reflect.ConstructorUtils;
> +import org.apache.commons.weaver.privilizer.Privileged;
> import org.apache.commons.weaver.privilizer.Privilizing;
> import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
>
> @@ -37,9 +48,9 @@ import javax.validation.ValidationExcept
> import javax.validation.Validator;
> import javax.validation.ValidatorFactory;
> import javax.validation.spi.ConfigurationState;
> -
> import java.io.Closeable;
> import java.lang.annotation.Annotation;
> +import java.lang.reflect.Constructor;
> import java.lang.reflect.Modifier;
> import java.util.ArrayList;
> import java.util.Collection;
> @@ -80,6 +91,60 @@ public class ApacheValidatorFactory impl
> private final ConcurrentMap<Class<?>, List<MetaConstraint<?, ?
> extends Annotation>>> constraintMap;
>
> private final Collection<Closeable> toClose = new
> ArrayList<Closeable>();
> + private final MetaBeanFinder defaultMetaBeanFinder;
> +
> + /**
> + * Create MetaBeanManager that uses factories:
> + * <ol>
> + * <li>if enabled by
> + * {@link
> ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
> + * {@link IntrospectorMetaBeanFactory}</li>
> + * <li>{@link MetaBeanFactory} types (if any) specified by
> + * {@link
> ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
> + * </li>
> + * <li>if no {@link JsrMetaBeanFactory} has yet been specified (this
> + * allows factory order customization), a {@link JsrMetaBeanFactory}
> + * which handles both JSR303-XML and JSR303-Annotations</li>
> + * <li>if enabled by
> + * {@link
> ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
> + * {@link XMLMetaBeanFactory}</li>
> + * </ol>
> + *
> + * @return a new instance of MetaBeanManager with adequate
> MetaBeanFactories
> + */
> + protected MetaBeanFinder buildMetaBeanFinder() {
> + final List<MetaBeanFactory> builders = new
> ArrayList<MetaBeanFactory>();
> + if (Boolean.parseBoolean(getProperties().get(
> +
> ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
> + builders.add(new IntrospectorMetaBeanFactory());
> + }
> + final String[] factoryClassNames =
> + StringUtils.split(getProperties().get(
> +
> ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
> + if (factoryClassNames != null) {
> + for (String clsName : factoryClassNames) {
> + // cast, relying on #createMetaBeanFactory to throw the
> exception if incompatible:
> + @SuppressWarnings("unchecked")
> + final Class<? extends MetaBeanFactory> factoryClass =
> (Class<? extends MetaBeanFactory>) loadClass(clsName);
> + builders.add(createMetaBeanFactory(factoryClass));
> + }
> + }
> + boolean jsrFound = false;
> + for (MetaBeanFactory builder : builders) {
> + jsrFound |= builder instanceof JsrMetaBeanFactory;
> + }
> + if (!jsrFound) {
> + builders.add(new JsrMetaBeanFactory(this));
> + }
> + @SuppressWarnings("deprecation")
> + final boolean enableMetaBeansXml =
> + Boolean.parseBoolean(getProperties().get(
> +
> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
> + if (enableMetaBeansXml) {
> + XMLMetaBeanManagerCreator.addFactory(builders);
> + }
> + return createMetaBeanManager(builders);
> + }
>
> /**
> * Convenience method to retrieve a default global
> ApacheValidatorFactory
> @@ -110,22 +175,11 @@ public class ApacheValidatorFactory impl
> /**
> * Create a new ApacheValidatorFactory instance.
> */
> - public ApacheValidatorFactory(ConfigurationState configurationState) {
> - properties = new HashMap<String, String>();
> + public ApacheValidatorFactory(ConfigurationState configuration) {
> + properties = new HashMap<String,
> String>(configuration.getProperties());
> defaultSequences = new HashMap<Class<?>, Class<?>[]>();
> validAccesses = new ConcurrentHashMap<Class<?>,
> List<AccessStrategy>>();
> constraintMap = new ConcurrentHashMap<Class<?>,
> List<MetaConstraint<?, ? extends Annotation>>>();
> - configure(configurationState);
> - }
> -
> - /**
> - * Configure this {@link ApacheValidatorFactory} from a
> - * {@link ConfigurationState}.
> - *
> - * @param configuration
> - */
> - protected void configure(final ConfigurationState configuration) {
> - getProperties().putAll(configuration.getProperties());
>
> parameterNameProvider = configuration.getParameterNameProvider();
> messageResolver = configuration.getMessageInterpolator();
> @@ -138,6 +192,8 @@ public class ApacheValidatorFactory impl
> }
>
> new
> ValidationMappingParser(this).processMappingConfig(configuration.getMappingStreams());
> +
> + defaultMetaBeanFinder = buildMetaBeanFinder();
> }
>
> /**
> @@ -165,7 +221,7 @@ public class ApacheValidatorFactory impl
> * @return the validator factory's context
> */
> public ApacheFactoryContext usingContext() {
> - return new ApacheFactoryContext(this);
> + return new ApacheFactoryContext(this, defaultMetaBeanFinder);
> }
>
> /**
> @@ -428,4 +484,73 @@ public class ApacheValidatorFactory impl
> private static Class<?>[] safeArray(Class<?>... array) {
> return ArrayUtils.isEmpty(array) ? ArrayUtils.EMPTY_CLASS_ARRAY :
> ArrayUtils.clone(array);
> }
> +
> + /**
> + * Create a {@link MetaBeanManager} using the specified builders.
> + *
> + * @param builders
> + * {@link MetaBeanFactory} {@link List}
> + * @return {@link MetaBeanManager}
> + */
> + @SuppressWarnings("deprecation")
> + protected MetaBeanFinder createMetaBeanManager(List<MetaBeanFactory>
> builders) {
> + // as long as we support both: jsr (in the builders list) and
> xstream-xml metabeans:
> + if (Boolean.parseBoolean(getProperties().get(
> +
> ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
> + return
> XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
> + }
> + return new MetaBeanManager(new
> MetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
> + }
> +
> + @Privileged
> + private <F extends MetaBeanFactory> F createMetaBeanFactory(final
> Class<F> cls) {
> + try {
> + Constructor<F> c =
> ConstructorUtils.getMatchingAccessibleConstructor(cls,
> ApacheValidatorFactory.this.getClass());
> + if (c != null) {
> + return c.newInstance(this);
> + }
> + c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
> getClass());
> + if (c != null) {
> + return c.newInstance(this);
> + }
> + return cls.newInstance();
> + } catch (Exception e) {
> + throw new ValidationException(e);
> + }
> + }
> +
> + /**
> + * separate class to prevent the classloader to immediately load
> optional
> + * classes: XMLMetaBeanManager, XMLMetaBeanFactory,
> XMLMetaBeanBuilder that
> + * might not be available in the classpath
> + */
> + private static class XMLMetaBeanManagerCreator {
> +
> + static void addFactory(List<MetaBeanFactory> builders) {
> + builders.add(new XMLMetaBeanFactory());
> + }
> +
> + /**
> + * Create the {@link MetaBeanManager} to process JSR303 XML.
> Requires
> + * bval-xstream at RT.
> + *
> + * @param builders meta bean builders
> + * @return {@link MetaBeanManager}
> + */
> + // NOTE - We return MetaBeanManager instead of XMLMetaBeanManager
> to
> + // keep
> + // bval-xstream an optional module.
> + protected static MetaBeanManager
> createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
> + return new XMLMetaBeanManager(
> + new XMLMetaBeanBuilder(builders.toArray(new
> MetaBeanFactory[builders.size()])));
> + }
> + }
> +
> + private Class<?> loadClass(final String className) {
> + try {
> + return Class.forName(className, true,
> Reflection.getClassLoader(ApacheValidatorFactory.class));
> + } catch (ClassNotFoundException ex) {
> + throw new ValidationException("Unable to load class: " +
> className, ex);
> + }
> + }
> }
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
> Wed Dec 23 12:45:01 2015
> @@ -51,7 +51,6 @@ import javax.validation.metadata.MethodT
> import javax.validation.metadata.ParameterDescriptor;
> import javax.validation.metadata.PropertyDescriptor;
> import javax.validation.metadata.ReturnValueDescriptor;
> -
> import java.beans.Introspector;
> import java.lang.annotation.Annotation;
> import java.lang.reflect.AccessibleObject;
> @@ -329,7 +328,7 @@ public class BeanDescriptorImpl extends
> private ExecutableMeta(final ApacheFactoryContext factoryContext,
> final MetaBean metaBean1, final Collection<ConstraintDescriptor<?>>
> constraintDescriptors) {
> this.metaBean = metaBean1;
> this.factoryContext = factoryContext;
> - this.annotationProcessor = new
> AnnotationProcessor(factoryContext);
> + this.annotationProcessor = new
> AnnotationProcessor(factoryContext.getFactory());
>
> buildExecutableDescriptors();
>
> @@ -840,7 +839,9 @@ public class BeanDescriptorImpl extends
> }
> }
> } else {
> - annotationProcessor.processAnnotation(annotation, null,
> ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()), access,
> validations, true);
> + annotationProcessor.processAnnotation(
> + annotation, null,
> ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
> + access, validations, true);
> }
> }
>
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
> Wed Dec 23 12:45:01 2015
> @@ -638,8 +638,9 @@ public class ClassValidator implements C
> protected <T> GroupValidationContext<T> createContext(MetaBean
> metaBean, T object, Class<T> objectClass, Class<?>... groups) {
> final ConstraintValidationListener<T> listener = new
> ConstraintValidationListener<T>(object, objectClass);
> final GroupValidationContextImpl<T> context =
> - new GroupValidationContextImpl<T>(listener,
> this.factoryContext.getMessageInterpolator(),
> - this.factoryContext.getTraversableResolver(),
> factoryContext.getParameterNameProvider(), metaBean);
> + new GroupValidationContextImpl<T>(listener,
> factoryContext.getMessageInterpolator(),
> + factoryContext.getTraversableResolver(),
> factoryContext.getParameterNameProvider(),
> + factoryContext.getConstraintValidatorFactory(), metaBean);
> context.setBean(object, metaBean);
> context.setGroups(groupsComputer.computeGroups(groups));
> return context;
> @@ -648,8 +649,9 @@ public class ClassValidator implements C
> protected <T> GroupValidationContext<T>
> createInvocableContext(MetaBean metaBean, T object, Class<T> objectClass,
> Class<?>... groups) {
> final ConstraintValidationListener<T> listener = new
> ConstraintValidationListener<T>(object, objectClass);
> final GroupValidationContextImpl<T> context =
> - new GroupValidationContextImpl<T>(listener,
> this.factoryContext.getMessageInterpolator(),
> - this.factoryContext.getTraversableResolver(),
> factoryContext.getParameterNameProvider(), metaBean);
> + new GroupValidationContextImpl<T>(listener,
> factoryContext.getMessageInterpolator(),
> + factoryContext.getTraversableResolver(),
> factoryContext.getParameterNameProvider(),
> + factoryContext.getConstraintValidatorFactory(),
> metaBean);
> context.setBean(object, metaBean);
> final Groups computedGroup = groupsComputer.computeGroups(groups);
> if
> (Collections.singletonList(Group.DEFAULT).equals(computedGroup.getGroups())
> && metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
> Wed Dec 23 12:45:01 2015
> @@ -39,7 +39,6 @@ import javax.validation.ValidationExcept
> import javax.validation.constraintvalidation.SupportedValidationTarget;
> import javax.validation.constraintvalidation.ValidationTarget;
> import javax.validation.metadata.ConstraintDescriptor;
> -
> import java.io.Serializable;
> import java.lang.annotation.Annotation;
> import java.lang.reflect.Array;
> @@ -61,7 +60,6 @@ import java.util.Set;
> * this instance is immutable!<br/>
> */
> public class ConstraintValidation<T extends Annotation> implements
> Validation, ConstraintDescriptor<T> {
> - private final ConstraintValidatorFactory factory;
> private final AccessStrategy access;
> private final boolean reportFromComposite;
> private final Map<String, Object> attributes;
> @@ -82,11 +80,9 @@ public class ConstraintValidation<T exte
> private Class<? extends ConstraintValidator<T, ?>>[] validatorClasses;
> private ConstraintTarget validationAppliesTo = null;
>
> - public ConstraintValidation(ConstraintValidatorFactory factory,
> - Class<? extends ConstraintValidator<T,
> ?>>[] validatorClasses,
> + public ConstraintValidation(Class<? extends ConstraintValidator<T,
> ?>>[] validatorClasses,
> T annotation, Class<?> owner,
> AccessStrategy access,
> boolean reportFromComposite,
> ConstraintTarget target) {
> - this.factory = factory;
> this.attributes = new HashMap<String, Object>();
> this.validatorClasses = ArrayUtils.clone(validatorClasses);
> this.annotation = annotation;
> @@ -158,7 +154,8 @@ public class ConstraintValidation<T exte
> synchronized (this) {
> if (validator == null) {
> try {
> - validator = getConstraintValidator(annotation,
> validatorClasses, owner, access);
> + validator = getConstraintValidator(
> + context.getConstraintValidatorFactory(),
> annotation, validatorClasses, owner, access);
> if (validator != null) {
> validator.initialize(annotation);
> }
> @@ -235,7 +232,8 @@ public class ConstraintValidation<T exte
> }
> }
>
> - private <A extends Annotation> ConstraintValidator<A, ? super T>
> getConstraintValidator(A annotation,
> + private <A extends Annotation> ConstraintValidator<A, ? super T>
> getConstraintValidator(
> + ConstraintValidatorFactory factory, A annotation,
> Class<? extends ConstraintValidator<A, ?>>[] constraintClasses,
> Class<?> owner, AccessStrategy access) {
> if (ArrayUtils.isNotEmpty(constraintClasses)) {
> final Type type = determineTargetedType(owner, access);
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
> Wed Dec 23 12:45:01 2015
> @@ -24,6 +24,7 @@ import org.apache.bval.model.MetaBean;
> import org.apache.bval.model.ValidationContext;
>
> import javax.validation.ConstraintValidator;
> +import javax.validation.ConstraintValidatorFactory;
> import javax.validation.ElementKind;
> import javax.validation.MessageInterpolator;
> import javax.validation.ParameterNameProvider;
> @@ -107,6 +108,12 @@ public interface GroupValidationContext<
> TraversableResolver getTraversableResolver();
>
> /**
> + * Get the {@link ConstraintValidatorFactory}.
> + * @return {@link ConstraintValidatorFactory}
> + */
> + ConstraintValidatorFactory getConstraintValidatorFactory();
> +
> + /**
> * Accumulate a validated constraint.
> * @param constraint
> * @return true when the constraint for the object in this path was
> not
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
> Wed Dec 23 12:45:01 2015
> @@ -27,6 +27,7 @@ import org.apache.bval.model.MetaPropert
> import org.apache.bval.util.AccessStrategy;
>
> import javax.validation.ConstraintValidator;
> +import javax.validation.ConstraintValidatorFactory;
> import javax.validation.ElementKind;
> import javax.validation.MessageInterpolator;
> import javax.validation.ParameterNameProvider;
> @@ -70,6 +71,7 @@ final class GroupValidationContextImpl<T
>
> private ConstraintValidation<?> constraintValidation;
> private final TraversableResolver traversableResolver;
> + private final ConstraintValidatorFactory constraintValidatorFactory;
>
> private Object[] parameters;
> private Object returnValue;
> @@ -86,11 +88,14 @@ final class GroupValidationContextImpl<T
> * @param rootMetaBean
> */
> public GroupValidationContextImpl(ConstraintValidationListener<T>
> listener, MessageInterpolator aMessageResolver,
> - TraversableResolver
> traversableResolver, ParameterNameProvider parameterNameProvider, MetaBean
> rootMetaBean) {
> + TraversableResolver
> traversableResolver, ParameterNameProvider parameterNameProvider,
> + ConstraintValidatorFactory
> constraintValidatorFactory,
> + MetaBean rootMetaBean) {
> // inherited variable 'validatedObjects' is of type:
> // HashMap<GraphBeanIdentity, Set<PathImpl>> in this class
> super(listener, new HashMap<GraphBeanIdentity, Set<PathImpl>>());
> this.messageResolver = aMessageResolver;
> + this.constraintValidatorFactory = constraintValidatorFactory;
> this.traversableResolver =
> CachingTraversableResolver.cacheFor(traversableResolver);
> this.parameterNameProvider = parameterNameProvider;
> this.rootMetaBean = rootMetaBean;
> @@ -313,6 +318,11 @@ final class GroupValidationContextImpl<T
> return traversableResolver;
> }
>
> + @Override
> + public ConstraintValidatorFactory getConstraintValidatorFactory() {
> + return constraintValidatorFactory;
> + }
> +
> /**
> * {@inheritDoc}
> */
>
> Modified:
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> (original)
> +++
> bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
> Wed Dec 23 12:45:01 2015
> @@ -63,8 +63,8 @@ public class JsrMetaBeanFactory implemen
> // of dubious utility as it's static :/
> protected static final Logger log =
> Logger.getLogger(JsrMetaBeanFactory.class.getName());
>
> - /** {@link ApacheFactoryContext} used */
> - protected final ApacheFactoryContext factoryContext;
> + /** {@link javax.validation.ValidatorFactory} used */
> + protected final ApacheValidatorFactory factory;
>
> /**
> * {@link AnnotationProcessor} used.
> @@ -74,11 +74,11 @@ public class JsrMetaBeanFactory implemen
> /**
> * Create a new Jsr303MetaBeanFactory instance.
> *
> - * @param factoryContext
> + * @param factory the validator factory.
> */
> - public JsrMetaBeanFactory(ApacheFactoryContext factoryContext) {
> - this.factoryContext = factoryContext;
> - this.annotationProcessor = new
> AnnotationProcessor(factoryContext);
> + public JsrMetaBeanFactory(ApacheValidatorFactory factory) {
> + this.factory = factory;
> + this.annotationProcessor = new AnnotationProcessor(factory);
> }
>
> /**
> @@ -123,7 +123,7 @@ public class JsrMetaBeanFactory implemen
> InvocationTargetException {
>
> // if NOT ignore class level annotations
> - if
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(beanClass))
> {
> + if
> (!factory.getAnnotationIgnores().isIgnoreAnnotations(beanClass)) {
> annotationProcessor.processAnnotations(null, beanClass,
> beanClass, null, new AppendValidationToMeta(metabean));
> }
>
> @@ -134,7 +134,7 @@ public class JsrMetaBeanFactory implemen
> MetaProperty metaProperty =
> metabean.getProperty(field.getName());
> // create a property for those fields for which there is not
> yet a
> // MetaProperty
> - if
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(field))
> {
> + if
> (!factory.getAnnotationIgnores().isIgnoreAnnotations(field)) {
> AccessStrategy access = new FieldAccess(field);
> boolean create = metaProperty == null;
> if (create) {
> @@ -160,7 +160,7 @@ public class JsrMetaBeanFactory implemen
> propName = MethodAccess.getPropertyName(method);
> }
> if (propName != null) {
> - if
> (!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(method))
> {
> + if
> (!factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
> AccessStrategy access = new MethodAccess(propName,
> method);
> MetaProperty metaProperty =
> metabean.getProperty(propName);
> boolean create = metaProperty == null;
> @@ -198,7 +198,7 @@ public class JsrMetaBeanFactory implemen
> */
> private void addXmlConstraints(Class<?> beanClass, MetaBean metabean)
> throws IllegalAccessException,
> InvocationTargetException {
> - for (final MetaConstraint<?, ? extends Annotation> metaConstraint
> : factoryContext.getFactory().getMetaConstraints(beanClass)) {
> + for (final MetaConstraint<?, ? extends Annotation> metaConstraint
> : factory.getMetaConstraints(beanClass)) {
> Meta meta;
> AccessStrategy access = metaConstraint.getAccessStrategy();
> boolean create = false;
> @@ -263,7 +263,7 @@ public class JsrMetaBeanFactory implemen
> metabean.putProperty(access.getPropertyName(), null);
> }
> }
> - for (final AccessStrategy access :
> factoryContext.getFactory().getValidAccesses(beanClass)) {
> + for (final AccessStrategy access :
> factory.getValidAccesses(beanClass)) {
> if (access.getElementType() == ElementType.PARAMETER) {
> continue;
> }
> @@ -289,7 +289,7 @@ public class JsrMetaBeanFactory implemen
> if (groupSeq == null) {
> groupSeq = metabean.initFeature(key, new
> ArrayList<Group>(annotation == null ? 1 : annotation.value().length));
> }
> - Class<?>[] groupClasses =
> factoryContext.getFactory().getDefaultSequence(beanClass);
> + Class<?>[] groupClasses = factory.getDefaultSequence(beanClass);
> if (groupClasses == null || groupClasses.length == 0) {
> if (annotation == null) {
> groupSeq.add(Group.DEFAULT);
>
> Modified:
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> ---
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> (original)
> +++
> bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
> Wed Dec 23 12:45:01 2015
> @@ -89,6 +89,10 @@ public class ValidationTest extends Test
> return factory.getValidator();
> }
>
> + public void testCache() {
> +
> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
> +
> factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
> + }
> public void testAccessStrategies_field_method() {
> AccessTestBusinessObject o1 = new AccessTestBusinessObject("1");
> AccessTestBusinessObjectSub o2 = new
> AccessTestBusinessObjectSub("3");
>
> Modified: bval/trunk/bval-tck/pom.xml
> URL:
> http://svn.apache.org/viewvc/bval/trunk/bval-tck/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> --- bval/trunk/bval-tck/pom.xml (original)
> +++ bval/trunk/bval-tck/pom.xml Wed Dec 23 12:45:01 2015
> @@ -169,6 +169,55 @@
> <version>1.0.0</version>
> </dependency>
> </dependencies>
> + <repositories>
> + <repository>
> + <!-- override outdated URLs for jboss repo ids -->
> + <id>repository.jboss.org</id>
> + <name>JBoss Public Maven Repository Group</name>
> + <url>
> https://repository.jboss.org/nexus/content/groups/public/</url>
> + <layout>default</layout>
> + <releases>
> + <enabled>true</enabled>
> + <updatePolicy>never</updatePolicy>
> + <checksumPolicy>fail</checksumPolicy>
> + </releases>
> + <snapshots>
> + <enabled>false</enabled>
> + <updatePolicy>never</updatePolicy>
> + <checksumPolicy>warn</checksumPolicy>
> + </snapshots>
> + </repository>
> + <repository>
> + <id>jboss</id>
> + <name>JBoss Public Maven Repository Group
> (again)</name>
> + <url>
> https://repository.jboss.org/nexus/content/groups/public/</url>
> + <layout>default</layout>
> + <releases>
> + <enabled>true</enabled>
> + <updatePolicy>never</updatePolicy>
> + <checksumPolicy>fail</checksumPolicy>
> + </releases>
> + <snapshots>
> + <enabled>false</enabled>
> + <updatePolicy>never</updatePolicy>
> + <checksumPolicy>warn</checksumPolicy>
> + </snapshots>
> + </repository>
> + <repository>
> + <id>snapshots.jboss.org</id>
> + <url>
> https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
> + <snapshots>
> + <enabled>true</enabled>
> + </snapshots>
> + </repository>
> + <repository>
> + <id>jboss-snapshots</id>
> + <url>
> https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
> + <snapshots>
> + <enabled>true</enabled>
> + </snapshots>
> + </repository>
> + </repositories>
> <build>
> <plugins>
> <plugin>
>
> Modified: bval/trunk/pom.xml
> URL:
> http://svn.apache.org/viewvc/bval/trunk/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
>
> ==============================================================================
> --- bval/trunk/pom.xml (original)
> +++ bval/trunk/pom.xml Wed Dec 23 12:45:01 2015
> @@ -571,6 +571,7 @@
> <artifactId>commons-weaver-maven-plugin</artifactId>
> <version>${commons.weaver.version}</version>
> <configuration>
> + <verbose>true</verbose>
> <weaverConfig>
> <privilizer.policy>DYNAMIC</privilizer.policy>
> </weaverConfig>
>
>
>
>
Fwd: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
bval-jsr/src/main/java/org/apache/bval/jsr/ bval-jsr/src/test/java/org/apache/bval/jsr/
bval-tck/
Posted by Romain Manni-Bucau <rm...@gmail.com>.
Hi guys
I would need some help for commons-weaver-maven-plugin setup, i commented
it out cause it was just hanging. Any inputs/help on that?
Romain Manni-Bucau
@rmannibucau <https://twitter.com/rmannibucau> | Blog
<http://rmannibucau.wordpress.com> | Github <https://github.com/rmannibucau> |
LinkedIn <https://www.linkedin.com/in/rmannibucau> | Tomitriber
<http://www.tomitribe.com>
---------- Forwarded message ----------
From: <rm...@apache.org>
Date: 2015-12-23 13:45 GMT+01:00
Subject: svn commit: r1721536 - in /bval/trunk: ./ bval-jsr/
bval-jsr/src/main/java/org/apache/bval/jsr/
bval-jsr/src/test/java/org/apache/bval/jsr/ bval-tck/
To: commits@bval.apache.org
Author: rmannibucau
Date: Wed Dec 23 12:45:01 2015
New Revision: 1721536
URL: http://svn.apache.org/viewvc?rev=1721536&view=rev
Log:
BVAL-143 caching should be hold by the factory or shouldnt be for
performance reason + reactivating jboss repo since tck (1.0) modules are
not on central
Modified:
bval/trunk/bval-jsr/pom.xml
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
bval/trunk/bval-tck/pom.xml
bval/trunk/pom.xml
Modified: bval/trunk/bval-jsr/pom.xml
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-jsr/pom.xml (original)
+++ bval/trunk/bval-jsr/pom.xml Wed Dec 23 12:45:01 2015
@@ -297,10 +297,12 @@
</includes>
</configuration>
</plugin>
+ <!-- TODO: activate but ATM it just doesnt build with it
<plugin>
<groupId>org.apache.commons</groupId>
<artifactId>commons-weaver-maven-plugin</artifactId>
</plugin>
+ -->
</plugins>
</build>
</project>
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java
Wed Dec 23 12:45:01 2015
@@ -18,6 +18,23 @@
*/
package org.apache.bval.jsr;
+import org.apache.bval.jsr.groups.GroupsComputer;
+import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
+import org.apache.bval.util.AccessStrategy;
+import org.apache.commons.lang3.ArrayUtils;
+import org.apache.commons.lang3.reflect.TypeUtils;
+import org.apache.commons.weaver.privilizer.Privileged;
+
+import javax.validation.Constraint;
+import javax.validation.ConstraintDeclarationException;
+import javax.validation.ConstraintDefinitionException;
+import javax.validation.ConstraintTarget;
+import javax.validation.ConstraintValidator;
+import javax.validation.OverridesAttribute;
+import javax.validation.Payload;
+import javax.validation.ReportAsSingleViolation;
+import javax.validation.constraintvalidation.SupportedValidationTarget;
+import javax.validation.constraintvalidation.ValidationTarget;
import java.lang.annotation.Annotation;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
@@ -32,25 +49,6 @@ import java.util.Set;
import java.util.logging.Level;
import java.util.logging.Logger;
-import javax.validation.Constraint;
-import javax.validation.ConstraintDeclarationException;
-import javax.validation.ConstraintDefinitionException;
-import javax.validation.ConstraintTarget;
-import javax.validation.ConstraintValidator;
-import javax.validation.ConstraintValidatorFactory;
-import javax.validation.OverridesAttribute;
-import javax.validation.Payload;
-import javax.validation.ReportAsSingleViolation;
-import javax.validation.constraintvalidation.SupportedValidationTarget;
-import javax.validation.constraintvalidation.ValidationTarget;
-
-import org.apache.bval.jsr.groups.GroupsComputer;
-import org.apache.bval.jsr.xml.AnnotationProxyBuilder;
-import org.apache.bval.util.AccessStrategy;
-import org.apache.commons.lang3.ArrayUtils;
-import org.apache.commons.lang3.reflect.TypeUtils;
-import org.apache.commons.weaver.privilizer.Privileged;
-
/**
* Description: helper class that builds a {@link ConstraintValidation} or
its
* composite constraint validations by parsing the jsr-annotations and
@@ -64,19 +62,19 @@ final class AnnotationConstraintBuilder<
/**
* Create a new AnnotationConstraintBuilder instance.
- *
+ *
* @param validatorClasses
* @param annotation
* @param owner
* @param access
*/
- public AnnotationConstraintBuilder(ConstraintValidatorFactory factory,
- Class<? extends ConstraintValidator<A, ?>>[] validatorClasses, A
annotation, Class<?> owner,
- AccessStrategy access, ConstraintTarget target) {
+ public AnnotationConstraintBuilder(
+ Class<? extends ConstraintValidator<A, ?>>[] validatorClasses,
A annotation, Class<?> owner,
+ AccessStrategy access, ConstraintTarget target) {
final boolean reportFromComposite =
annotation != null &&
annotation.annotationType().isAnnotationPresent(ReportAsSingleViolation.class);
constraintValidation =
- new ConstraintValidation<A>(factory, validatorClasses,
annotation, owner, access, reportFromComposite,
+ new ConstraintValidation<A>(validatorClasses, annotation,
owner, access, reportFromComposite,
target);
buildFromAnnotation();
}
@@ -259,7 +257,7 @@ final class AnnotationConstraintBuilder<
/**
* Get the configured {@link ConstraintValidation}.
- *
+ *
* @return {@link ConstraintValidation}
*/
public ConstraintValidation<?> getConstraintValidation() {
@@ -309,7 +307,7 @@ final class AnnotationConstraintBuilder<
* Calculates the index of the composite constraint. The index
represents
* the order in which it is added in reference to other constraints of
the
* same type.
- *
+ *
* @param composite
* The composite constraint (not yet added).
* @return An integer index always >= 0
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java
Wed Dec 23 12:45:01 2015
@@ -34,7 +34,6 @@ import javax.validation.constraintvalida
import javax.validation.constraintvalidation.ValidationTarget;
import javax.validation.groups.ConvertGroup;
import javax.validation.groups.Default;
-
import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.InvocationTargetException;
@@ -50,15 +49,15 @@ import java.util.Set;
@Privilizing(@CallTo(Reflection.class))
public final class AnnotationProcessor {
/** {@link ApacheFactoryContext} used */
- private final ApacheFactoryContext factoryContext;
+ private final ApacheValidatorFactory factory;
/**
* Create a new {@link AnnotationProcessor} instance.
*
- * @param factoryContext
+ * @param factory the validator factory.
*/
- public AnnotationProcessor(ApacheFactoryContext factoryContext) {
- this.factoryContext = factoryContext;
+ public AnnotationProcessor(ApacheValidatorFactory factory) {
+ this.factory = factory;
}
/**
@@ -112,7 +111,7 @@ public final class AnnotationProcessor {
* @throws InvocationTargetException
*/
public <A extends Annotation> boolean processAnnotation(A annotation,
Meta prop, Class<?> owner,
- AccessStrategy access, AppendValidation appender, boolean
reflection) throws IllegalAccessException,
+ AccessStrategy access, AppendValidation appender, boolean
reflection) throws IllegalAccessException,
InvocationTargetException {
if (annotation instanceof Valid) {
return addAccessStrategy(prop, access);
@@ -204,12 +203,11 @@ public final class AnnotationProcessor {
}
final Class<A> annotationType = (Class<A>)
annotation.annotationType();
Class<? extends ConstraintValidator<A, ?>>[] validatorClasses =
-
factoryContext.getFactory().getConstraintsCache().getConstraintValidators(annotationType);
+
factory.getConstraintsCache().getConstraintValidators(annotationType);
if (validatorClasses == null) {
validatorClasses = (Class<? extends ConstraintValidator<A,
?>>[]) vcAnno.validatedBy();
if (validatorClasses.length == 0) {
- validatorClasses =
-
factoryContext.getFactory().getDefaultConstraints().getValidatorClasses(annotationType);
+ validatorClasses =
factory.getDefaultConstraints().getValidatorClasses(annotationType);
}
}
return validatorClasses;
@@ -234,7 +232,8 @@ public final class AnnotationProcessor {
* @throws IllegalAccessException
* @throws InvocationTargetException
*/
- private <A extends Annotation> boolean applyConstraint(A annotation,
+ private <A extends Annotation> boolean applyConstraint(
+ A annotation,
Class<? extends ConstraintValidator<A, ?>>[] rawConstraintClasses,
Meta prop, Class<?> owner,
AccessStrategy access, AppendValidation appender) throws
IllegalAccessException, InvocationTargetException {
@@ -244,7 +243,8 @@ public final class AnnotationProcessor {
}
final AnnotationConstraintBuilder<A> builder =
- new
AnnotationConstraintBuilder<A>(factoryContext.getConstraintValidatorFactory(),
constraintClasses,
+ new AnnotationConstraintBuilder<A>(
+ constraintClasses,
annotation, owner, access, null);
// JSR-303 3.4.4: Add implicit groups
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java
Wed Dec 23 12:45:01 2015
@@ -18,33 +18,18 @@
*/
package org.apache.bval.jsr;
-import java.lang.reflect.Constructor;
-import java.util.ArrayList;
-import java.util.List;
+import org.apache.bval.MetaBeanFinder;
+import org.apache.bval.util.reflection.Reflection;
+import org.apache.commons.weaver.privilizer.Privilizing;
+import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
import javax.validation.ConstraintValidatorFactory;
import javax.validation.MessageInterpolator;
import javax.validation.ParameterNameProvider;
import javax.validation.TraversableResolver;
-import javax.validation.ValidationException;
import javax.validation.Validator;
import javax.validation.ValidatorContext;
-import org.apache.bval.IntrospectorMetaBeanFactory;
-import org.apache.bval.MetaBeanBuilder;
-import org.apache.bval.MetaBeanFactory;
-import org.apache.bval.MetaBeanFinder;
-import org.apache.bval.MetaBeanManager;
-import org.apache.bval.util.reflection.Reflection;
-import org.apache.bval.xml.XMLMetaBeanBuilder;
-import org.apache.bval.xml.XMLMetaBeanFactory;
-import org.apache.bval.xml.XMLMetaBeanManager;
-import org.apache.commons.lang3.StringUtils;
-import org.apache.commons.lang3.reflect.ConstructorUtils;
-import org.apache.commons.weaver.privilizer.Privileged;
-import org.apache.commons.weaver.privilizer.Privilizing;
-import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
-
/**
* Description: Represents the context that is used to create
* <code>ClassValidator</code> instances.<br/>
@@ -52,7 +37,7 @@ import org.apache.commons.weaver.privili
@Privilizing(@CallTo(Reflection.class))
public class ApacheFactoryContext implements ValidatorContext {
private final ApacheValidatorFactory factory;
- private final MetaBeanFinder metaBeanFinder;
+ private volatile MetaBeanFinder metaBeanFinder;
private MessageInterpolator messageInterpolator;
private TraversableResolver traversableResolver;
@@ -63,19 +48,9 @@ public class ApacheFactoryContext implem
* Create a new ApacheFactoryContext instance.
*
* @param factory validator factory
- */
- public ApacheFactoryContext(ApacheValidatorFactory factory) {
- this.factory = factory;
- this.metaBeanFinder = buildMetaBeanFinder();
- }
-
- /**
- * Create a new ApacheFactoryContext instance.
- *
- * @param factory validator factory
* @param metaBeanFinder meta finder
*/
- protected ApacheFactoryContext(ApacheValidatorFactory factory,
MetaBeanFinder metaBeanFinder) {
+ public ApacheFactoryContext(ApacheValidatorFactory factory,
MetaBeanFinder metaBeanFinder) {
this.factory = factory;
this.metaBeanFinder = metaBeanFinder;
}
@@ -99,11 +74,16 @@ public class ApacheFactoryContext implem
return metaBeanFinder;
}
+ private synchronized void resetMeta() { // ensure to ingnore the cache
and rebuild constraint with new model
+ metaBeanFinder = factory.buildMetaBeanFinder();
+ }
+
/**
* {@inheritDoc}
*/
public ValidatorContext messageInterpolator(MessageInterpolator
messageInterpolator) {
this.messageInterpolator = messageInterpolator;
+ resetMeta();
return this;
}
@@ -112,6 +92,7 @@ public class ApacheFactoryContext implem
*/
public ValidatorContext traversableResolver(TraversableResolver
traversableResolver) {
this.traversableResolver = traversableResolver;
+ resetMeta();
return this;
}
@@ -120,11 +101,13 @@ public class ApacheFactoryContext implem
*/
public ValidatorContext
constraintValidatorFactory(ConstraintValidatorFactory
constraintValidatorFactory) {
this.constraintValidatorFactory = constraintValidatorFactory;
+ resetMeta();
return this;
}
public ValidatorContext parameterNameProvider(ParameterNameProvider
parameterNameProvider) {
this.parameterNameProvider = parameterNameProvider;
+ resetMeta();
return this;
}
@@ -171,126 +154,4 @@ public class ApacheFactoryContext implem
return Boolean.parseBoolean(factory.getProperties().get(
ApacheValidatorConfiguration.Properties.TREAT_MAPS_LIKE_BEANS));
}
-
- /**
- * Create MetaBeanManager that uses factories:
- * <ol>
- * <li>if enabled by
- * {@link
ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
- * {@link IntrospectorMetaBeanFactory}</li>
- * <li>{@link MetaBeanFactory} types (if any) specified by
- * {@link
ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
- * </li>
- * <li>if no {@link JsrMetaBeanFactory} has yet been specified (this
- * allows factory order customization), a {@link JsrMetaBeanFactory}
- * which handles both JSR303-XML and JSR303-Annotations</li>
- * <li>if enabled by
- * {@link
ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
- * {@link XMLMetaBeanFactory}</li>
- * </ol>
- *
- * @return a new instance of MetaBeanManager with adequate
MetaBeanFactories
- */
- protected MetaBeanFinder buildMetaBeanFinder() {
- final List<MetaBeanFactory> builders = new
ArrayList<MetaBeanFactory>();
- if (Boolean.parseBoolean(factory.getProperties().get(
- ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR)))
{
- builders.add(new IntrospectorMetaBeanFactory());
- }
- final String[] factoryClassNames =
- StringUtils.split(factory.getProperties().get(
-
ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
- if (factoryClassNames != null) {
- for (String clsName : factoryClassNames) {
- // cast, relying on #createMetaBeanFactory to throw the
exception if incompatible:
- @SuppressWarnings("unchecked")
- final Class<? extends MetaBeanFactory> factoryClass =
(Class<? extends MetaBeanFactory>) loadClass(clsName);
- builders.add(createMetaBeanFactory(factoryClass));
- }
- }
- boolean jsrFound = false;
- for (MetaBeanFactory builder : builders) {
- jsrFound |= builder instanceof JsrMetaBeanFactory;
- }
- if (!jsrFound) {
- builders.add(new JsrMetaBeanFactory(this));
- }
- @SuppressWarnings("deprecation")
- final boolean enableMetaBeansXml =
- Boolean.parseBoolean(factory.getProperties().get(
-
ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
- if (enableMetaBeansXml) {
- XMLMetaBeanManagerCreator.addFactory(builders);
- }
- return createMetaBeanManager(builders);
- }
-
- /**
- * Create a {@link MetaBeanManager} using the specified builders.
- *
- * @param builders
- * {@link MetaBeanFactory} {@link List}
- * @return {@link MetaBeanManager}
- */
- @SuppressWarnings("deprecation")
- protected MetaBeanFinder createMetaBeanManager(List<MetaBeanFactory>
builders) {
- // as long as we support both: jsr (in the builders list) and
xstream-xml metabeans:
- if (Boolean.parseBoolean(factory.getProperties().get(
-
ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
- return
XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
- }
- return new MetaBeanManager(new
MetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
- }
-
- @Privileged
- private <F extends MetaBeanFactory> F createMetaBeanFactory(final
Class<F> cls) {
- try {
- Constructor<F> c =
ConstructorUtils.getMatchingAccessibleConstructor(cls,
ApacheFactoryContext.this.getClass());
- if (c != null) {
- return c.newInstance(ApacheFactoryContext.this);
- }
- c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
getFactory().getClass());
- if (c != null) {
- return c.newInstance(getFactory());
- }
- return cls.newInstance();
- } catch (Exception e) {
- throw new ValidationException(e);
- }
- }
-
- /**
- * separate class to prevent the classloader to immediately load
optional
- * classes: XMLMetaBeanManager, XMLMetaBeanFactory, XMLMetaBeanBuilder
that
- * might not be available in the classpath
- */
- private static class XMLMetaBeanManagerCreator {
-
- static void addFactory(List<MetaBeanFactory> builders) {
- builders.add(new XMLMetaBeanFactory());
- }
-
- /**
- * Create the {@link MetaBeanManager} to process JSR303 XML.
Requires
- * bval-xstream at RT.
- *
- * @param builders meta bean builders
- * @return {@link MetaBeanManager}
- */
- // NOTE - We return MetaBeanManager instead of XMLMetaBeanManager
to
- // keep
- // bval-xstream an optional module.
- protected static MetaBeanManager
createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
- return new XMLMetaBeanManager(
- new XMLMetaBeanBuilder(builders.toArray(new
MetaBeanFactory[builders.size()])));
- }
- }
-
- private Class<?> loadClass(final String className) {
- try {
- return Class.forName(className, true,
Reflection.getClassLoader(ApacheFactoryContext.class));
- } catch (ClassNotFoundException ex) {
- throw new ValidationException("Unable to load class: " +
className, ex);
- }
- }
}
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java
Wed Dec 23 12:45:01 2015
@@ -18,13 +18,24 @@
*/
package org.apache.bval.jsr;
+import org.apache.bval.IntrospectorMetaBeanFactory;
+import org.apache.bval.MetaBeanBuilder;
+import org.apache.bval.MetaBeanFactory;
+import org.apache.bval.MetaBeanFinder;
+import org.apache.bval.MetaBeanManager;
import org.apache.bval.jsr.xml.AnnotationIgnores;
import org.apache.bval.jsr.xml.MetaConstraint;
import org.apache.bval.jsr.xml.ValidationMappingParser;
import org.apache.bval.util.AccessStrategy;
import org.apache.bval.util.reflection.Reflection;
+import org.apache.bval.xml.XMLMetaBeanBuilder;
+import org.apache.bval.xml.XMLMetaBeanFactory;
+import org.apache.bval.xml.XMLMetaBeanManager;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.ClassUtils;
+import org.apache.commons.lang3.StringUtils;
+import org.apache.commons.lang3.reflect.ConstructorUtils;
+import org.apache.commons.weaver.privilizer.Privileged;
import org.apache.commons.weaver.privilizer.Privilizing;
import org.apache.commons.weaver.privilizer.Privilizing.CallTo;
@@ -37,9 +48,9 @@ import javax.validation.ValidationExcept
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.spi.ConfigurationState;
-
import java.io.Closeable;
import java.lang.annotation.Annotation;
+import java.lang.reflect.Constructor;
import java.lang.reflect.Modifier;
import java.util.ArrayList;
import java.util.Collection;
@@ -80,6 +91,60 @@ public class ApacheValidatorFactory impl
private final ConcurrentMap<Class<?>, List<MetaConstraint<?, ? extends
Annotation>>> constraintMap;
private final Collection<Closeable> toClose = new
ArrayList<Closeable>();
+ private final MetaBeanFinder defaultMetaBeanFinder;
+
+ /**
+ * Create MetaBeanManager that uses factories:
+ * <ol>
+ * <li>if enabled by
+ * {@link
ApacheValidatorConfiguration.Properties#ENABLE_INTROSPECTOR}, an
+ * {@link IntrospectorMetaBeanFactory}</li>
+ * <li>{@link MetaBeanFactory} types (if any) specified by
+ * {@link
ApacheValidatorConfiguration.Properties#METABEAN_FACTORY_CLASSNAMES}
+ * </li>
+ * <li>if no {@link JsrMetaBeanFactory} has yet been specified (this
+ * allows factory order customization), a {@link JsrMetaBeanFactory}
+ * which handles both JSR303-XML and JSR303-Annotations</li>
+ * <li>if enabled by
+ * {@link
ApacheValidatorConfiguration.Properties#ENABLE_METABEANS_XML}, an
+ * {@link XMLMetaBeanFactory}</li>
+ * </ol>
+ *
+ * @return a new instance of MetaBeanManager with adequate
MetaBeanFactories
+ */
+ protected MetaBeanFinder buildMetaBeanFinder() {
+ final List<MetaBeanFactory> builders = new
ArrayList<MetaBeanFactory>();
+ if (Boolean.parseBoolean(getProperties().get(
+
ApacheValidatorConfiguration.Properties.ENABLE_INTROSPECTOR))) {
+ builders.add(new IntrospectorMetaBeanFactory());
+ }
+ final String[] factoryClassNames =
+ StringUtils.split(getProperties().get(
+
ApacheValidatorConfiguration.Properties.METABEAN_FACTORY_CLASSNAMES));
+ if (factoryClassNames != null) {
+ for (String clsName : factoryClassNames) {
+ // cast, relying on #createMetaBeanFactory to throw the
exception if incompatible:
+ @SuppressWarnings("unchecked")
+ final Class<? extends MetaBeanFactory> factoryClass =
(Class<? extends MetaBeanFactory>) loadClass(clsName);
+ builders.add(createMetaBeanFactory(factoryClass));
+ }
+ }
+ boolean jsrFound = false;
+ for (MetaBeanFactory builder : builders) {
+ jsrFound |= builder instanceof JsrMetaBeanFactory;
+ }
+ if (!jsrFound) {
+ builders.add(new JsrMetaBeanFactory(this));
+ }
+ @SuppressWarnings("deprecation")
+ final boolean enableMetaBeansXml =
+ Boolean.parseBoolean(getProperties().get(
+
ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML));
+ if (enableMetaBeansXml) {
+ XMLMetaBeanManagerCreator.addFactory(builders);
+ }
+ return createMetaBeanManager(builders);
+ }
/**
* Convenience method to retrieve a default global
ApacheValidatorFactory
@@ -110,22 +175,11 @@ public class ApacheValidatorFactory impl
/**
* Create a new ApacheValidatorFactory instance.
*/
- public ApacheValidatorFactory(ConfigurationState configurationState) {
- properties = new HashMap<String, String>();
+ public ApacheValidatorFactory(ConfigurationState configuration) {
+ properties = new HashMap<String,
String>(configuration.getProperties());
defaultSequences = new HashMap<Class<?>, Class<?>[]>();
validAccesses = new ConcurrentHashMap<Class<?>,
List<AccessStrategy>>();
constraintMap = new ConcurrentHashMap<Class<?>,
List<MetaConstraint<?, ? extends Annotation>>>();
- configure(configurationState);
- }
-
- /**
- * Configure this {@link ApacheValidatorFactory} from a
- * {@link ConfigurationState}.
- *
- * @param configuration
- */
- protected void configure(final ConfigurationState configuration) {
- getProperties().putAll(configuration.getProperties());
parameterNameProvider = configuration.getParameterNameProvider();
messageResolver = configuration.getMessageInterpolator();
@@ -138,6 +192,8 @@ public class ApacheValidatorFactory impl
}
new
ValidationMappingParser(this).processMappingConfig(configuration.getMappingStreams());
+
+ defaultMetaBeanFinder = buildMetaBeanFinder();
}
/**
@@ -165,7 +221,7 @@ public class ApacheValidatorFactory impl
* @return the validator factory's context
*/
public ApacheFactoryContext usingContext() {
- return new ApacheFactoryContext(this);
+ return new ApacheFactoryContext(this, defaultMetaBeanFinder);
}
/**
@@ -428,4 +484,73 @@ public class ApacheValidatorFactory impl
private static Class<?>[] safeArray(Class<?>... array) {
return ArrayUtils.isEmpty(array) ? ArrayUtils.EMPTY_CLASS_ARRAY :
ArrayUtils.clone(array);
}
+
+ /**
+ * Create a {@link MetaBeanManager} using the specified builders.
+ *
+ * @param builders
+ * {@link MetaBeanFactory} {@link List}
+ * @return {@link MetaBeanManager}
+ */
+ @SuppressWarnings("deprecation")
+ protected MetaBeanFinder createMetaBeanManager(List<MetaBeanFactory>
builders) {
+ // as long as we support both: jsr (in the builders list) and
xstream-xml metabeans:
+ if (Boolean.parseBoolean(getProperties().get(
+
ApacheValidatorConfiguration.Properties.ENABLE_METABEANS_XML))) {
+ return
XMLMetaBeanManagerCreator.createXMLMetaBeanManager(builders);
+ }
+ return new MetaBeanManager(new
MetaBeanBuilder(builders.toArray(new MetaBeanFactory[builders.size()])));
+ }
+
+ @Privileged
+ private <F extends MetaBeanFactory> F createMetaBeanFactory(final
Class<F> cls) {
+ try {
+ Constructor<F> c =
ConstructorUtils.getMatchingAccessibleConstructor(cls,
ApacheValidatorFactory.this.getClass());
+ if (c != null) {
+ return c.newInstance(this);
+ }
+ c = ConstructorUtils.getMatchingAccessibleConstructor(cls,
getClass());
+ if (c != null) {
+ return c.newInstance(this);
+ }
+ return cls.newInstance();
+ } catch (Exception e) {
+ throw new ValidationException(e);
+ }
+ }
+
+ /**
+ * separate class to prevent the classloader to immediately load
optional
+ * classes: XMLMetaBeanManager, XMLMetaBeanFactory, XMLMetaBeanBuilder
that
+ * might not be available in the classpath
+ */
+ private static class XMLMetaBeanManagerCreator {
+
+ static void addFactory(List<MetaBeanFactory> builders) {
+ builders.add(new XMLMetaBeanFactory());
+ }
+
+ /**
+ * Create the {@link MetaBeanManager} to process JSR303 XML.
Requires
+ * bval-xstream at RT.
+ *
+ * @param builders meta bean builders
+ * @return {@link MetaBeanManager}
+ */
+ // NOTE - We return MetaBeanManager instead of XMLMetaBeanManager
to
+ // keep
+ // bval-xstream an optional module.
+ protected static MetaBeanManager
createXMLMetaBeanManager(List<MetaBeanFactory> builders) {
+ return new XMLMetaBeanManager(
+ new XMLMetaBeanBuilder(builders.toArray(new
MetaBeanFactory[builders.size()])));
+ }
+ }
+
+ private Class<?> loadClass(final String className) {
+ try {
+ return Class.forName(className, true,
Reflection.getClassLoader(ApacheValidatorFactory.class));
+ } catch (ClassNotFoundException ex) {
+ throw new ValidationException("Unable to load class: " +
className, ex);
+ }
+ }
}
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java
Wed Dec 23 12:45:01 2015
@@ -51,7 +51,6 @@ import javax.validation.metadata.MethodT
import javax.validation.metadata.ParameterDescriptor;
import javax.validation.metadata.PropertyDescriptor;
import javax.validation.metadata.ReturnValueDescriptor;
-
import java.beans.Introspector;
import java.lang.annotation.Annotation;
import java.lang.reflect.AccessibleObject;
@@ -329,7 +328,7 @@ public class BeanDescriptorImpl extends
private ExecutableMeta(final ApacheFactoryContext factoryContext,
final MetaBean metaBean1, final Collection<ConstraintDescriptor<?>>
constraintDescriptors) {
this.metaBean = metaBean1;
this.factoryContext = factoryContext;
- this.annotationProcessor = new
AnnotationProcessor(factoryContext);
+ this.annotationProcessor = new
AnnotationProcessor(factoryContext.getFactory());
buildExecutableDescriptors();
@@ -840,7 +839,9 @@ public class BeanDescriptorImpl extends
}
}
} else {
- annotationProcessor.processAnnotation(annotation, null,
ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()), access,
validations, true);
+ annotationProcessor.processAnnotation(
+ annotation, null,
ClassUtils.primitiveToWrapper((Class<?>) access.getJavaType()),
+ access, validations, true);
}
}
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java
Wed Dec 23 12:45:01 2015
@@ -638,8 +638,9 @@ public class ClassValidator implements C
protected <T> GroupValidationContext<T> createContext(MetaBean
metaBean, T object, Class<T> objectClass, Class<?>... groups) {
final ConstraintValidationListener<T> listener = new
ConstraintValidationListener<T>(object, objectClass);
final GroupValidationContextImpl<T> context =
- new GroupValidationContextImpl<T>(listener,
this.factoryContext.getMessageInterpolator(),
- this.factoryContext.getTraversableResolver(),
factoryContext.getParameterNameProvider(), metaBean);
+ new GroupValidationContextImpl<T>(listener,
factoryContext.getMessageInterpolator(),
+ factoryContext.getTraversableResolver(),
factoryContext.getParameterNameProvider(),
+ factoryContext.getConstraintValidatorFactory(), metaBean);
context.setBean(object, metaBean);
context.setGroups(groupsComputer.computeGroups(groups));
return context;
@@ -648,8 +649,9 @@ public class ClassValidator implements C
protected <T> GroupValidationContext<T>
createInvocableContext(MetaBean metaBean, T object, Class<T> objectClass,
Class<?>... groups) {
final ConstraintValidationListener<T> listener = new
ConstraintValidationListener<T>(object, objectClass);
final GroupValidationContextImpl<T> context =
- new GroupValidationContextImpl<T>(listener,
this.factoryContext.getMessageInterpolator(),
- this.factoryContext.getTraversableResolver(),
factoryContext.getParameterNameProvider(), metaBean);
+ new GroupValidationContextImpl<T>(listener,
factoryContext.getMessageInterpolator(),
+ factoryContext.getTraversableResolver(),
factoryContext.getParameterNameProvider(),
+ factoryContext.getConstraintValidatorFactory(),
metaBean);
context.setBean(object, metaBean);
final Groups computedGroup = groupsComputer.computeGroups(groups);
if
(Collections.singletonList(Group.DEFAULT).equals(computedGroup.getGroups())
&& metaBean.getFeature(JsrFeatures.Bean.GROUP_SEQUENCE) != null) {
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java
Wed Dec 23 12:45:01 2015
@@ -39,7 +39,6 @@ import javax.validation.ValidationExcept
import javax.validation.constraintvalidation.SupportedValidationTarget;
import javax.validation.constraintvalidation.ValidationTarget;
import javax.validation.metadata.ConstraintDescriptor;
-
import java.io.Serializable;
import java.lang.annotation.Annotation;
import java.lang.reflect.Array;
@@ -61,7 +60,6 @@ import java.util.Set;
* this instance is immutable!<br/>
*/
public class ConstraintValidation<T extends Annotation> implements
Validation, ConstraintDescriptor<T> {
- private final ConstraintValidatorFactory factory;
private final AccessStrategy access;
private final boolean reportFromComposite;
private final Map<String, Object> attributes;
@@ -82,11 +80,9 @@ public class ConstraintValidation<T exte
private Class<? extends ConstraintValidator<T, ?>>[] validatorClasses;
private ConstraintTarget validationAppliesTo = null;
- public ConstraintValidation(ConstraintValidatorFactory factory,
- Class<? extends ConstraintValidator<T,
?>>[] validatorClasses,
+ public ConstraintValidation(Class<? extends ConstraintValidator<T,
?>>[] validatorClasses,
T annotation, Class<?> owner,
AccessStrategy access,
boolean reportFromComposite,
ConstraintTarget target) {
- this.factory = factory;
this.attributes = new HashMap<String, Object>();
this.validatorClasses = ArrayUtils.clone(validatorClasses);
this.annotation = annotation;
@@ -158,7 +154,8 @@ public class ConstraintValidation<T exte
synchronized (this) {
if (validator == null) {
try {
- validator = getConstraintValidator(annotation,
validatorClasses, owner, access);
+ validator = getConstraintValidator(
+ context.getConstraintValidatorFactory(),
annotation, validatorClasses, owner, access);
if (validator != null) {
validator.initialize(annotation);
}
@@ -235,7 +232,8 @@ public class ConstraintValidation<T exte
}
}
- private <A extends Annotation> ConstraintValidator<A, ? super T>
getConstraintValidator(A annotation,
+ private <A extends Annotation> ConstraintValidator<A, ? super T>
getConstraintValidator(
+ ConstraintValidatorFactory factory, A annotation,
Class<? extends ConstraintValidator<A, ?>>[] constraintClasses,
Class<?> owner, AccessStrategy access) {
if (ArrayUtils.isNotEmpty(constraintClasses)) {
final Type type = determineTargetedType(owner, access);
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContext.java
Wed Dec 23 12:45:01 2015
@@ -24,6 +24,7 @@ import org.apache.bval.model.MetaBean;
import org.apache.bval.model.ValidationContext;
import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorFactory;
import javax.validation.ElementKind;
import javax.validation.MessageInterpolator;
import javax.validation.ParameterNameProvider;
@@ -107,6 +108,12 @@ public interface GroupValidationContext<
TraversableResolver getTraversableResolver();
/**
+ * Get the {@link ConstraintValidatorFactory}.
+ * @return {@link ConstraintValidatorFactory}
+ */
+ ConstraintValidatorFactory getConstraintValidatorFactory();
+
+ /**
* Accumulate a validated constraint.
* @param constraint
* @return true when the constraint for the object in this path was not
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/GroupValidationContextImpl.java
Wed Dec 23 12:45:01 2015
@@ -27,6 +27,7 @@ import org.apache.bval.model.MetaPropert
import org.apache.bval.util.AccessStrategy;
import javax.validation.ConstraintValidator;
+import javax.validation.ConstraintValidatorFactory;
import javax.validation.ElementKind;
import javax.validation.MessageInterpolator;
import javax.validation.ParameterNameProvider;
@@ -70,6 +71,7 @@ final class GroupValidationContextImpl<T
private ConstraintValidation<?> constraintValidation;
private final TraversableResolver traversableResolver;
+ private final ConstraintValidatorFactory constraintValidatorFactory;
private Object[] parameters;
private Object returnValue;
@@ -86,11 +88,14 @@ final class GroupValidationContextImpl<T
* @param rootMetaBean
*/
public GroupValidationContextImpl(ConstraintValidationListener<T>
listener, MessageInterpolator aMessageResolver,
- TraversableResolver
traversableResolver, ParameterNameProvider parameterNameProvider, MetaBean
rootMetaBean) {
+ TraversableResolver
traversableResolver, ParameterNameProvider parameterNameProvider,
+ ConstraintValidatorFactory
constraintValidatorFactory,
+ MetaBean rootMetaBean) {
// inherited variable 'validatedObjects' is of type:
// HashMap<GraphBeanIdentity, Set<PathImpl>> in this class
super(listener, new HashMap<GraphBeanIdentity, Set<PathImpl>>());
this.messageResolver = aMessageResolver;
+ this.constraintValidatorFactory = constraintValidatorFactory;
this.traversableResolver =
CachingTraversableResolver.cacheFor(traversableResolver);
this.parameterNameProvider = parameterNameProvider;
this.rootMetaBean = rootMetaBean;
@@ -313,6 +318,11 @@ final class GroupValidationContextImpl<T
return traversableResolver;
}
+ @Override
+ public ConstraintValidatorFactory getConstraintValidatorFactory() {
+ return constraintValidatorFactory;
+ }
+
/**
* {@inheritDoc}
*/
Modified:
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
(original)
+++
bval/trunk/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java
Wed Dec 23 12:45:01 2015
@@ -63,8 +63,8 @@ public class JsrMetaBeanFactory implemen
// of dubious utility as it's static :/
protected static final Logger log =
Logger.getLogger(JsrMetaBeanFactory.class.getName());
- /** {@link ApacheFactoryContext} used */
- protected final ApacheFactoryContext factoryContext;
+ /** {@link javax.validation.ValidatorFactory} used */
+ protected final ApacheValidatorFactory factory;
/**
* {@link AnnotationProcessor} used.
@@ -74,11 +74,11 @@ public class JsrMetaBeanFactory implemen
/**
* Create a new Jsr303MetaBeanFactory instance.
*
- * @param factoryContext
+ * @param factory the validator factory.
*/
- public JsrMetaBeanFactory(ApacheFactoryContext factoryContext) {
- this.factoryContext = factoryContext;
- this.annotationProcessor = new AnnotationProcessor(factoryContext);
+ public JsrMetaBeanFactory(ApacheValidatorFactory factory) {
+ this.factory = factory;
+ this.annotationProcessor = new AnnotationProcessor(factory);
}
/**
@@ -123,7 +123,7 @@ public class JsrMetaBeanFactory implemen
InvocationTargetException {
// if NOT ignore class level annotations
- if
(!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(beanClass))
{
+ if
(!factory.getAnnotationIgnores().isIgnoreAnnotations(beanClass)) {
annotationProcessor.processAnnotations(null, beanClass,
beanClass, null, new AppendValidationToMeta(metabean));
}
@@ -134,7 +134,7 @@ public class JsrMetaBeanFactory implemen
MetaProperty metaProperty =
metabean.getProperty(field.getName());
// create a property for those fields for which there is not
yet a
// MetaProperty
- if
(!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(field))
{
+ if
(!factory.getAnnotationIgnores().isIgnoreAnnotations(field)) {
AccessStrategy access = new FieldAccess(field);
boolean create = metaProperty == null;
if (create) {
@@ -160,7 +160,7 @@ public class JsrMetaBeanFactory implemen
propName = MethodAccess.getPropertyName(method);
}
if (propName != null) {
- if
(!factoryContext.getFactory().getAnnotationIgnores().isIgnoreAnnotations(method))
{
+ if
(!factory.getAnnotationIgnores().isIgnoreAnnotations(method)) {
AccessStrategy access = new MethodAccess(propName,
method);
MetaProperty metaProperty =
metabean.getProperty(propName);
boolean create = metaProperty == null;
@@ -198,7 +198,7 @@ public class JsrMetaBeanFactory implemen
*/
private void addXmlConstraints(Class<?> beanClass, MetaBean metabean)
throws IllegalAccessException,
InvocationTargetException {
- for (final MetaConstraint<?, ? extends Annotation> metaConstraint
: factoryContext.getFactory().getMetaConstraints(beanClass)) {
+ for (final MetaConstraint<?, ? extends Annotation> metaConstraint
: factory.getMetaConstraints(beanClass)) {
Meta meta;
AccessStrategy access = metaConstraint.getAccessStrategy();
boolean create = false;
@@ -263,7 +263,7 @@ public class JsrMetaBeanFactory implemen
metabean.putProperty(access.getPropertyName(), null);
}
}
- for (final AccessStrategy access :
factoryContext.getFactory().getValidAccesses(beanClass)) {
+ for (final AccessStrategy access :
factory.getValidAccesses(beanClass)) {
if (access.getElementType() == ElementType.PARAMETER) {
continue;
}
@@ -289,7 +289,7 @@ public class JsrMetaBeanFactory implemen
if (groupSeq == null) {
groupSeq = metabean.initFeature(key, new
ArrayList<Group>(annotation == null ? 1 : annotation.value().length));
}
- Class<?>[] groupClasses =
factoryContext.getFactory().getDefaultSequence(beanClass);
+ Class<?>[] groupClasses = factory.getDefaultSequence(beanClass);
if (groupClasses == null || groupClasses.length == 0) {
if (annotation == null) {
groupSeq.add(Group.DEFAULT);
Modified:
bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
---
bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
(original)
+++
bval/trunk/bval-jsr/src/test/java/org/apache/bval/jsr/ValidationTest.java
Wed Dec 23 12:45:01 2015
@@ -89,6 +89,10 @@ public class ValidationTest extends Test
return factory.getValidator();
}
+ public void testCache() {
+
factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
+
factory.getValidator().getConstraintsForClass(AccessTestBusinessObject.class);
+ }
public void testAccessStrategies_field_method() {
AccessTestBusinessObject o1 = new AccessTestBusinessObject("1");
AccessTestBusinessObjectSub o2 = new
AccessTestBusinessObjectSub("3");
Modified: bval/trunk/bval-tck/pom.xml
URL:
http://svn.apache.org/viewvc/bval/trunk/bval-tck/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/bval-tck/pom.xml (original)
+++ bval/trunk/bval-tck/pom.xml Wed Dec 23 12:45:01 2015
@@ -169,6 +169,55 @@
<version>1.0.0</version>
</dependency>
</dependencies>
+ <repositories>
+ <repository>
+ <!-- override outdated URLs for jboss repo ids -->
+ <id>repository.jboss.org</id>
+ <name>JBoss Public Maven Repository Group</name>
+ <url>
https://repository.jboss.org/nexus/content/groups/public/</url>
+ <layout>default</layout>
+ <releases>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>fail</checksumPolicy>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>warn</checksumPolicy>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>jboss</id>
+ <name>JBoss Public Maven Repository Group
(again)</name>
+ <url>
https://repository.jboss.org/nexus/content/groups/public/</url>
+ <layout>default</layout>
+ <releases>
+ <enabled>true</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>fail</checksumPolicy>
+ </releases>
+ <snapshots>
+ <enabled>false</enabled>
+ <updatePolicy>never</updatePolicy>
+ <checksumPolicy>warn</checksumPolicy>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>snapshots.jboss.org</id>
+ <url>
https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ <repository>
+ <id>jboss-snapshots</id>
+ <url>
https://repository.jboss.org/nexus/content/repositories/snapshots/</url>
+ <snapshots>
+ <enabled>true</enabled>
+ </snapshots>
+ </repository>
+ </repositories>
<build>
<plugins>
<plugin>
Modified: bval/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/bval/trunk/pom.xml?rev=1721536&r1=1721535&r2=1721536&view=diff
==============================================================================
--- bval/trunk/pom.xml (original)
+++ bval/trunk/pom.xml Wed Dec 23 12:45:01 2015
@@ -571,6 +571,7 @@
<artifactId>commons-weaver-maven-plugin</artifactId>
<version>${commons.weaver.version}</version>
<configuration>
+ <verbose>true</verbose>
<weaverConfig>
<privilizer.policy>DYNAMIC</privilizer.policy>
</weaverConfig>