I am. :) Matt
On Mon, Jan 4, 2016 at 2:48 AM, Romain Manni-Bucau <[email protected]> wrote: > Think Matt is on it > > Le 4 janv. 2016 09:44, "Mark Struberg" <[email protected]> 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 >> > <[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> >> >>>> >> >>>> >> >>>> >> >>>> >> >>> >> >> >> >
