Means we should push for releasing commons-weaver first, right? LieGrue, strub
> Am 23.12.2015 um 18:14 schrieb Romain Manni-Bucau <[email protected]>: > > 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 <[email protected]>: > >> You got it. :-) >> >> Matt >> On Dec 23, 2015 9:48 AM, "Romain Manni-Bucau" <[email protected]> >> 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 <[email protected]>: >>> >>>> 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: <[email protected]> >>>> 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: [email protected] >>>> >>>> >>>> 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> >>>> >>>> >>>> >>>> >>> >>
