Sure, default code shouldn't change. BTW I wonder why these regressions were introduced? Any idea?
Romain Manni-Bucau @rmannibucau http://www.tomitribe.com http://rmannibucau.wordpress.com https://github.com/rmannibucau 2014-12-06 19:29 GMT+01:00 Matt Benson <[email protected]>: > Sorry; I ran the old TCK. I'll check on this later. I think that by default > we should leave things as we find them. We can consider including a > configuration option to skip the unset for efficiency, or just skip it > always in environments with no SecurityManager. > > Matt > On Dec 6, 2014 2:11 AM, "Romain Manni-Bucau" <[email protected]> wrote: > >> Hi Matt, >> >> I have 2 questions: >> 1) surely obvious but I dont get why you re-set the accessible (if >> (mustSet)). While we need it accessible we can keep it set to true no? >> 2) more important: tck are broken now Tests run: 758, Failures: 13, >> Errors: 0, Skipped: 0 (mvn clean install -Ptck11) :( >> >> >> Romain Manni-Bucau >> @rmannibucau >> http://www.tomitribe.com >> http://rmannibucau.wordpress.com >> https://github.com/rmannibucau >> >> >> >> ---------- Forwarded message ---------- >> From: <[email protected]> >> Date: 2014-10-01 6:37 GMT+02:00 >> Subject: svn commit: r1628598 [1/2] - in /bval/branches/bval-11: ./ >> bval-core/ bval-core/src/main/java/org/apache/bval/ >> bval-core/src/main/java/org/apache/bval/model/ >> bval-core/src/main/java/org/apache/bval/util/ >> bval-core/src/main/java/org/apache/bval/util/ref... >> To: [email protected] >> >> >> Author: mbenson >> Date: Wed Oct 1 04:37:36 2014 >> New Revision: 1628598 >> >> URL: http://svn.apache.org/r1628598 >> Log: >> use commons weaver/privilizer >> >> Removed: >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/reflection/DefaultReflection.java >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/reflection/SecurityManagerReflection.java >> Modified: >> bval/branches/bval-11/bval-core/pom.xml >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/ConstructorAccess.java >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/MetaBean.java >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/BValVersion.java >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java >> >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java >> bval/branches/bval-11/bval-jsr/ (props changed) >> bval/branches/bval-11/bval-jsr/pom.xml >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultValidationProviderResolver.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/util/ClassHelper.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/xml/AnnotationProxyBuilder.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationMappingParser.java >> >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/xml/ValidationParser.java >> >> bval/branches/bval-11/bval-jsr/src/test/java/org/apache/bval/jsr/xml/ValidationParserTest.java >> bval/branches/bval-11/bval-jsr/src/test/resources/java.policy >> bval/branches/bval-11/bval-tck11/ (props changed) >> bval/branches/bval-11/bval-xstream/pom.xml >> >> bval/branches/bval-11/bval-xstream/src/main/java/org/apache/bval/xml/XMLMetaBeanManager.java >> bval/branches/bval-11/pom.xml >> >> Modified: bval/branches/bval-11/bval-core/pom.xml >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/pom.xml?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- bval/branches/bval-11/bval-core/pom.xml (original) >> +++ bval/branches/bval-11/bval-core/pom.xml Wed Oct 1 04:37:36 2014 >> @@ -46,6 +46,10 @@ >> <artifactId>commons-beanutils-core</artifactId> >> </dependency> >> <dependency> >> + <groupId>org.apache.commons</groupId> >> + <artifactId>commons-weaver-privilizer-api</artifactId> >> + </dependency> >> + <dependency> >> <groupId>junit</groupId> >> <artifactId>junit</artifactId> >> <scope>test</scope> >> @@ -118,6 +122,10 @@ build.timestamp=${timestamp} >> </execution> >> </executions> >> </plugin> >> + <plugin> >> + <groupId>org.apache.commons</groupId> >> + <artifactId>commons-weaver-maven-plugin</artifactId> >> + </plugin> >> </plugins> >> <pluginManagement> >> <plugins> >> >> Modified: >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/ConstructorAccess.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/ConstructorAccess.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/ConstructorAccess.java >> (original) >> +++ >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/ConstructorAccess.java >> Wed Oct 1 04:37:36 2014 >> @@ -16,13 +16,11 @@ >> */ >> package org.apache.bval; >> >> -import org.apache.bval.util.AccessStrategy; >> - >> import java.lang.annotation.ElementType; >> import java.lang.reflect.Constructor; >> import java.lang.reflect.Type; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> + >> +import org.apache.bval.util.AccessStrategy; >> >> public class ConstructorAccess extends AccessStrategy { >> >> @@ -30,18 +28,7 @@ public class ConstructorAccess extends A >> >> public ConstructorAccess(final Constructor<?> constructor) { >> this.constructor = constructor; >> - if (!constructor.isAccessible()) { >> - if (System.getSecurityManager() == null) { >> - constructor.setAccessible(true); >> - } else { >> - AccessController.doPrivileged(new >> PrivilegedAction<Void>() { >> - public Void run() { >> - constructor.setAccessible(true); >> - return null; >> - } >> - }); >> - } >> - } >> + setAccessible(constructor); >> } >> >> @Override >> >> Modified: >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/MetaBean.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/MetaBean.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/MetaBean.java >> (original) >> +++ >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/model/MetaBean.java >> Wed Oct 1 04:37:36 2014 >> @@ -17,6 +17,8 @@ >> package org.apache.bval.model; >> >> import org.apache.bval.util.reflection.Reflection; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> >> import java.beans.Introspector; >> import java.lang.reflect.Constructor; >> @@ -34,6 +36,7 @@ import java.util.TreeMap; >> * >> * @see MetaProperty >> */ >> +@Privilizing(@CallTo(Reflection.class)) >> public class MetaBean extends FeaturesCapable implements Cloneable, >> Features.Bean { >> private static final long serialVersionUID = 2L; >> >> @@ -280,7 +283,7 @@ public class MetaBean extends FeaturesCa >> int i = 0; >> Class<?> clazz = beanClass; >> while (clazz != null && clazz != Object.class) { >> - for (final Field f : >> Reflection.INSTANCE.getDeclaredFields(clazz)) { >> + for (final Field f : Reflection.getDeclaredFields(clazz)) >> { >> i++; >> final String name = f.getName(); >> if (!fields.containsKey(name)) { >> @@ -321,7 +324,7 @@ public class MetaBean extends FeaturesCa >> protected MethodComparator(final Class<?> beanClass) { >> Class<?> clazz = beanClass; >> while (clazz != null && clazz != Object.class) { >> - for (final Method m : >> Reflection.INSTANCE.getDeclaredMethods(clazz)) { >> + for (final Method m : >> Reflection.getDeclaredMethods(clazz)) { >> methods.put(m, >> Arrays.hashCode(m.getParameterTypes())); >> } >> clazz = clazz.getSuperclass(); >> @@ -345,7 +348,7 @@ public class MetaBean extends FeaturesCa >> private final Map<Constructor<?>, Integer> constructors = new >> HashMap<Constructor<?>, Integer>(); >> >> protected ConstructorComparator(final Class<?> beanClass) { >> - for (final Constructor<?> c : >> Reflection.INSTANCE.getDeclaredConstructors(beanClass)) { >> + for (final Constructor<?> c : >> Reflection.getDeclaredConstructors(beanClass)) { >> constructors.put(c, >> Arrays.hashCode(c.getParameterTypes())); >> } >> } >> >> Modified: >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java >> (original) >> +++ >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/AccessStrategy.java >> Wed Oct 1 04:37:36 2014 >> @@ -17,8 +17,11 @@ >> package org.apache.bval.util; >> >> import java.lang.annotation.ElementType; >> +import java.lang.reflect.AccessibleObject; >> import java.lang.reflect.Type; >> >> +import org.apache.commons.weaver.privilizer.Privileged; >> + >> /** >> * Description: abstract class to encapsulate different strategies >> * to get the value of a Property. This class is designed such that >> @@ -55,4 +58,21 @@ public abstract class AccessStrategy { >> * @return String >> */ >> public abstract String getPropertyName(); >> + >> + /** >> + * Set {@code accessibleObject} as being accessible >> + * @param accessibleObject >> + */ >> + protected boolean setAccessible(AccessibleObject accessibleObject) { >> + if (accessibleObject.isAccessible()) { >> + return false; >> + } >> + doSetAccessible(accessibleObject); >> + return true; >> + } >> + >> + @Privileged >> + private void doSetAccessible(AccessibleObject accessibleObject) { >> + accessibleObject.setAccessible(true); >> + } >> } >> >> Modified: >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/BValVersion.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/BValVersion.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/BValVersion.java >> (original) >> +++ >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/BValVersion.java >> Wed Oct 1 04:37:36 2014 >> @@ -18,18 +18,21 @@ >> */ >> package org.apache.bval.util; >> >> -import org.apache.bval.util.reflection.Reflection; >> - >> import java.io.IOException; >> import java.io.InputStream; >> import java.util.Properties; >> import java.util.StringTokenizer; >> >> +import org.apache.bval.util.reflection.Reflection; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> + >> /** >> * This class contains version information for BVal. >> * It uses Ant's filter tokens to convert the template into a java >> * file with current information. >> */ >> +@Privilizing(@CallTo(Reflection.class)) >> public class BValVersion { >> >> /** Project name */ >> @@ -157,7 +160,7 @@ public class BValVersion { >> * {@inheritDoc} >> */ >> public String toString() { >> - StringBuilder buf = new StringBuilder(80 * 40); >> + final StringBuilder buf = new StringBuilder(80 * 40); >> appendBanner(buf); >> buf.append("\n"); >> >> @@ -169,8 +172,7 @@ public class BValVersion { >> appendProperty("java.vendor", buf).append("\n\n"); >> >> buf.append("java.class.path:\n"); >> - StringTokenizer tok = new StringTokenizer( >> - Reflection.INSTANCE.getProperty("java.class.path")); >> + final StringTokenizer tok = new >> StringTokenizer(Reflection.getProperty("java.class.path")); >> while (tok.hasMoreTokens()) { >> buf.append("\t").append(tok.nextToken()); >> buf.append("\n"); >> @@ -191,7 +193,6 @@ public class BValVersion { >> } >> >> private StringBuilder appendProperty(String prop, StringBuilder buf) { >> - return buf.append(prop).append(": ").append( >> - Reflection.INSTANCE.getProperty(prop)); >> + return buf.append(prop).append(": >> ").append(Reflection.getProperty(prop)); >> } >> } >> >> Modified: >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java >> (original) >> +++ >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/FieldAccess.java >> Wed Oct 1 04:37:36 2014 >> @@ -19,8 +19,6 @@ package org.apache.bval.util; >> import java.lang.annotation.ElementType; >> import java.lang.reflect.Field; >> import java.lang.reflect.Type; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> >> /** >> * Description: direct field access strategy.<br/> >> @@ -35,18 +33,7 @@ public class FieldAccess extends AccessS >> */ >> public FieldAccess(final Field field) { >> this.field = field; >> - if (!field.isAccessible()) { >> - if (System.getSecurityManager() == null) { >> - field.setAccessible(true); >> - } else { >> - AccessController.doPrivileged(new >> PrivilegedAction<Void>() { >> - public Void run() { >> - field.setAccessible(true); >> - return null; >> - } >> - }); >> - } >> - } >> + setAccessible(field); >> } >> >> /** >> >> Modified: >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java >> (original) >> +++ >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/IndexedAccess.java >> Wed Oct 1 04:37:36 2014 >> @@ -16,6 +16,7 @@ >> */ >> package org.apache.bval.util; >> >> +import org.apache.commons.lang3.ObjectUtils; >> import org.apache.commons.lang3.reflect.TypeUtils; >> >> import java.lang.annotation.ElementType; >> @@ -28,7 +29,7 @@ import java.util.Map; >> /** >> * {@link AccessStrategy} to get an indexed member of an {@link Iterable} >> or >> * array object. >> - */ >> + */ >> public class IndexedAccess extends AccessStrategy { >> private static final TypeVariable<?> ITERABLE_TYPE = >> Iterable.class.getTypeParameters()[0]; >> >> @@ -45,13 +46,13 @@ public class IndexedAccess extends Acces >> } >> if (TypeUtils.isAssignable(containerType, Iterable.class)) { >> Map<TypeVariable<?>, Type> typeArguments = >> TypeUtils.getTypeArguments(containerType, Iterable.class); >> - return typeArguments.containsKey(ITERABLE_TYPE) ? >> typeArguments.get(ITERABLE_TYPE) : Object.class; >> + return >> ObjectUtils.defaultIfNull(TypeUtils.unrollVariables(typeArguments, >> ITERABLE_TYPE), Object.class); >> } >> return null; >> } >> >> - private Type containerType; >> - private Integer index; >> + private final Type containerType; >> + private final Integer index; >> >> /** >> * Create a new IndexedAccessStrategy instance. >> >> Modified: >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java >> (original) >> +++ >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/KeyedAccess.java >> Wed Oct 1 04:37:36 2014 >> @@ -16,6 +16,7 @@ >> */ >> package org.apache.bval.util; >> >> +import org.apache.commons.lang3.ObjectUtils; >> import org.apache.commons.lang3.reflect.TypeUtils; >> >> import java.lang.annotation.ElementType; >> @@ -43,13 +44,13 @@ public class KeyedAccess extends AccessS >> public static Type getJavaElementType(Type containerType) { >> if (TypeUtils.isAssignable(containerType, Map.class)) { >> Map<TypeVariable<?>, Type> typeArguments = >> TypeUtils.getTypeArguments(containerType, Map.class); >> - return typeArguments.containsKey(MAP_TYPEVARS[1]) ? >> typeArguments.get(MAP_TYPEVARS[1]) : Object.class; >> + return >> ObjectUtils.defaultIfNull(TypeUtils.unrollVariables(typeArguments, >> MAP_TYPEVARS[1]), Object.class); >> } >> return null; >> } >> >> - private Type containerType; >> - private Object key; >> + private final Type containerType; >> + private final Object key; >> >> /** >> * Create a new KeyedAccess instance. >> @@ -71,7 +72,7 @@ public class KeyedAccess extends AccessS >> if (instance instanceof Map<?, ?>) { >> Map<?, ?> map = (Map<?, ?>) instance; >> Map<TypeVariable<?>, Type> typeArguments = >> TypeUtils.getTypeArguments(containerType, Map.class); >> - Type keyType = typeArguments.get(MAP_TYPEVARS[0]); >> + Type keyType = TypeUtils.unrollVariables(typeArguments, >> MAP_TYPEVARS[0]); >> if (key == null || keyType == null || >> TypeUtils.isInstance(key, keyType)) { >> return map.get(key); >> } >> @@ -106,7 +107,7 @@ public class KeyedAccess extends AccessS >> */ >> @Override >> public Type getJavaType() { >> - Type result = getJavaElementType(containerType); >> + final Type result = getJavaElementType(containerType); >> return result == null ? Object.class : result; >> } >> >> >> Modified: >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java >> (original) >> +++ >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/MethodAccess.java >> Wed Oct 1 04:37:36 2014 >> @@ -21,8 +21,6 @@ import java.lang.annotation.ElementType; >> import java.lang.reflect.InvocationTargetException; >> import java.lang.reflect.Method; >> import java.lang.reflect.Type; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> >> /** >> * Description: invoke a zero-argument method (getter)<br/> >> @@ -47,18 +45,7 @@ public class MethodAccess extends Access >> public MethodAccess(String propertyName, final Method method) { >> this.method = method; >> this.propertyName = propertyName; >> - if (!method.isAccessible()) { >> - if (System.getSecurityManager() == null) { >> - method.setAccessible(true); >> - } else { >> - AccessController.doPrivileged(new >> PrivilegedAction<Void>() { >> - public Void run() { >> - method.setAccessible(true); >> - return null; >> - } >> - }); >> - } >> - } >> + setAccessible(method); >> } >> >> /** >> @@ -69,21 +56,14 @@ public class MethodAccess extends Access >> * the method name id not according to the JavaBeans standard. >> */ >> public static String getPropertyName(Method member) { >> - String name = null; >> - String methodName = member.getName(); >> + final String methodName = member.getName(); >> if (methodName.startsWith("is")) { >> - name = Introspector.decapitalize(methodName.substring(2)); >> - } /* else if ( methodName.startsWith("has")) { >> - name = Introspector.decapitalize( >> methodName.substring( 3 ) ); >> - } */ >> - // setter annotation is NOT supported in the spec >> - /* else if (method.getName().startsWith("set") && >> method.getParameterTypes().length == 1) { >> - propName = >> Introspector.decapitalize(method.getName().substring(3)); >> - } */ >> - else if (methodName.startsWith("get")) { >> - name = Introspector.decapitalize(methodName.substring(3)); >> + return Introspector.decapitalize(methodName.substring(2)); >> + } >> + if (methodName.startsWith("get")) { >> + return Introspector.decapitalize(methodName.substring(3)); >> } >> - return name; >> + return null; >> } >> >> /** >> >> Modified: >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java >> (original) >> +++ >> bval/branches/bval-11/bval-core/src/main/java/org/apache/bval/util/reflection/Reflection.java >> Wed Oct 1 04:37:36 2014 >> @@ -21,44 +21,122 @@ import java.lang.reflect.Constructor; >> import java.lang.reflect.Field; >> import java.lang.reflect.InvocationTargetException; >> import java.lang.reflect.Method; >> +import java.lang.reflect.Modifier; >> >> -public interface Reflection { >> - static final Reflection INSTANCE = ReflectionFactory.newInstance(); >> +import org.apache.commons.lang3.ClassUtils; >> >> - Class<?> getClass(final ClassLoader classLoader, final String >> className) throws Exception; >> - >> - Object getAnnotationValue(final Annotation annotation, final >> String name) throws IllegalAccessException, InvocationTargetException; >> +/** >> + * Security-agnostic "blueprint" class for reflection-related operations. >> + * >> + * @version $Rev$ $Date$ >> + */ >> +public class Reflection { >> + >> + private static void setAccessibility(final Field field) { >> + // FIXME 2011-03-27 jw: >> + // - Why not simply call field.setAccessible(true)? >> + // - Fields can not be abstract. >> + if (!Modifier.isPublic(field.getModifiers()) >> + || (Modifier.isPublic(field.getModifiers()) && >> Modifier.isAbstract(field.getModifiers()))) { >> + field.setAccessible(true); >> + } >> + } >> >> - ClassLoader getClassLoader(final Class<?> clazz); >> + public static Class<?> getClass(final ClassLoader classLoader, >> final String className) throws Exception { >> + return ClassUtils.getClass(classLoader, className, true); >> + } >> >> - String getProperty(final String name); >> + public static Object getAnnotationValue(final Annotation >> annotation, final String name) >> + throws IllegalAccessException, InvocationTargetException { >> + Method valueMethod; >> + try { >> + valueMethod = >> annotation.annotationType().getDeclaredMethod(name); >> + } catch (final NoSuchMethodException ex) { >> + // do nothing >> + valueMethod = null; >> + } >> + if (null != valueMethod) { >> + if (!valueMethod.isAccessible()) { >> + valueMethod.setAccessible(true); >> + } >> + return valueMethod.invoke(annotation); >> + } >> + return null; >> + } >> >> - Field getDeclaredField(final Class<?> clazz, final String fieldName); >> + public static ClassLoader getClassLoader(final Class<?> clazz) { >> + final ClassLoader cl = >> Thread.currentThread().getContextClassLoader(); >> + if (cl != null) { >> + return cl; >> + } >> + return clazz.getClassLoader(); >> + } >> >> - Field[] getDeclaredFields(final Class<?> clazz); >> + public static String getProperty(final String name) { >> + return System.getProperty(name); >> + } >> >> - Constructor<?> getDeclaredConstructor(final Class<?> clazz, final >> Class<?>... parameters); >> + public static Field getDeclaredField(final Class<?> clazz, final >> String fieldName) { >> + final Field f; >> + try { >> + f = clazz.getDeclaredField(fieldName); >> + } catch (final NoSuchFieldException e) { >> + return null; >> + } >> + setAccessibility(f); >> + return f; >> + } >> >> - Method getDeclaredMethod(final Class<?> clazz, final String name, >> final Class<?>... parameters); >> + public static Field[] getDeclaredFields(final Class<?> clazz) { >> + final Field[] fields = clazz.getDeclaredFields(); >> + if (fields.length > 0) { >> + for (final Field f : fields) { >> + if (!f.isAccessible()) { >> + f.setAccessible(true); >> + } >> + } >> + } >> + return fields; >> + } >> >> - Method[] getDeclaredMethods(final Class<?> clazz); >> + public static Constructor<?> getDeclaredConstructor(final >> Class<?> clazz, final Class<?>... parameters) { >> + try { >> + return clazz.getDeclaredConstructor(parameters); >> + } catch (final NoSuchMethodException e) { >> + return null; >> + } >> + } >> >> - Constructor<?>[] getDeclaredConstructors(final Class<?> clazz); >> + public static Method getDeclaredMethod(final Class<?> clazz, >> final String name, final Class<?>... parameters) { >> + try { >> + return clazz.getDeclaredMethod(name, parameters); >> + } catch (final NoSuchMethodException e) { >> + return null; >> + } >> + } >> >> - Method getPublicMethod(final Class<?> clazz, final String methodName); >> + public static Method[] getDeclaredMethods(final Class<?> clazz) { >> + return clazz.getDeclaredMethods(); >> + } >> >> - <T> T newInstance(final Class<T> cls); >> + public static Constructor<?>[] getDeclaredConstructors(final >> Class<?> clazz) { >> + return clazz.getDeclaredConstructors(); >> + } >> >> - public static class ReflectionFactory { >> - public static Reflection newInstance() { >> - if (System.getSecurityManager() != null) { >> - return new SecurityManagerReflection(); >> - } >> - return new DefaultReflection(); >> + public static Method getPublicMethod(final Class<?> clazz, final >> String methodName) { >> + try { >> + return clazz.getMethod(methodName); >> + } catch (final NoSuchMethodException e) { >> + return null; >> } >> + } >> >> - private ReflectionFactory() { >> - // no-op >> + public static <T> T newInstance(final Class<T> cls) { >> + try { >> + return cls.newInstance(); >> + } catch (final Exception ex) { >> + throw new RuntimeException("Cannot instantiate : " + cls, ex); >> } >> } >> + >> } >> >> Propchange: bval/branches/bval-11/bval-jsr/ >> >> ------------------------------------------------------------------------------ >> --- svn:ignore (added) >> +++ svn:ignore Wed Oct 1 04:37:36 2014 >> @@ -0,0 +1,4 @@ >> +.classpath >> +.project >> +.settings >> +target >> >> Propchange: bval/branches/bval-11/bval-jsr/ >> >> ------------------------------------------------------------------------------ >> --- svn:mergeinfo (added) >> +++ svn:mergeinfo Wed Oct 1 04:37:36 2014 >> @@ -0,0 +1,2 @@ >> +/bval/trunk/bval-jsr303:1598345 >> +/incubator/bval/sandbox/lang3-work/bval-jsr:992137-1166425 >> >> Modified: bval/branches/bval-11/bval-jsr/pom.xml >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/pom.xml?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- bval/branches/bval-11/bval-jsr/pom.xml (original) >> +++ bval/branches/bval-11/bval-jsr/pom.xml Wed Oct 1 04:37:36 2014 >> @@ -79,13 +79,73 @@ >> <plugins> >> <plugin> >> <groupId>org.apache.maven.plugins</groupId> >> + <artifactId>maven-resources-plugin</artifactId> >> + <executions> >> + <execution> >> + <id>default-testResources</id> >> + <phase /> >> + <goals> >> + <goal>testResources</goal> >> + </goals> >> + </execution> >> + </executions> >> + </plugin> >> + <plugin> >> + <groupId>org.apache.maven.plugins</groupId> >> + <artifactId>maven-antrun-plugin</artifactId> >> + <executions> >> + <execution> >> + <id>filter-testResources</id> >> + <phase>process-test-resources</phase> >> + <goals> >> + <goal>run</goal> >> + </goals> >> + <configuration> >> + <target> >> + <mkdir >> dir="${project.build.testOutputDirectory}" /> >> + <condition property="slash" >> value="/" else=""> >> + <os family="windows" /> >> + </condition> >> + <copy >> todir="${project.build.testOutputDirectory}" overwrite="true"> >> + <fileset >> dir="${project.basedir}/src/test/resources" excludes="java.policy" /> >> + </copy> >> + <copy >> todir="${project.build.testOutputDirectory}" overwrite="true"> >> + <fileset >> file="${project.basedir}/src/test/resources/java.policy" /> >> + <filterchain> >> + <expandproperties /> >> + <!-- append extra >> slash on windows only --> >> + <replacestring >> from="file://" to="file://${slash}" /> >> + <replacestring >> from="${file.separator}" to="/" /> >> + <!-- preserve >> system-specific file separator --> >> + <expandproperties> >> + <propertyset> >> + <propertyref >> prefix="project." /> >> + <globmapper >> from="*" to="preserve.*" /> >> + </propertyset> >> + </expandproperties> >> + </filterchain> >> + </copy> >> + </target> >> + </configuration> >> + </execution> >> + </executions> >> + <dependencies> >> + <dependency> >> + <groupId>org.apache.ant</groupId> >> + <artifactId>ant</artifactId> >> + <version>1.9.3</version> >> + </dependency> >> + </dependencies> >> + </plugin> >> + <plugin> >> + <groupId>org.apache.maven.plugins</groupId> >> <artifactId>maven-surefire-plugin</artifactId> >> <configuration> >> <includes> >> <include>**/*Test.java</include> >> <include>**/*TestCase.java</include> >> </includes> >> - <argLine>-Djava.security.manager >> >> -Djava.security.policy=${project.basedir}/src/test/resources/java.policy</argLine> >> + <argLine>-Djava.security.manager >> >> -Djava.security.policy=${project.build.testOutputDirectory}/java.policy</argLine> >> </configuration> >> </plugin> >> </plugins> >> @@ -103,6 +163,10 @@ >> <groupId>org.apache.commons</groupId> >> <artifactId>commons-lang3</artifactId> >> </dependency> >> + <dependency> >> + <groupId>org.apache.commons</groupId> >> + <artifactId>commons-weaver-privilizer-api</artifactId> >> + </dependency> >> <!-- optional dependencies --> >> <dependency> >> <groupId>org.apache.bval</groupId> >> @@ -235,6 +299,10 @@ >> </includes> >> </configuration> >> </plugin> >> + <plugin> >> + <groupId>org.apache.commons</groupId> >> + <artifactId>commons-weaver-maven-plugin</artifactId> >> + </plugin> >> </plugins> >> </build> >> </project> >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationConstraintBuilder.java >> Wed Oct 1 04:37:36 2014 >> @@ -18,27 +18,9 @@ >> */ >> 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.reflect.TypeUtils; >> - >> -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 java.lang.annotation.Annotation; >> import java.lang.reflect.InvocationTargetException; >> import java.lang.reflect.Method; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> import java.util.Arrays; >> import java.util.Collections; >> import java.util.HashMap; >> @@ -50,6 +32,24 @@ 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.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 >> @@ -78,22 +78,11 @@ final class AnnotationConstraintBuilder< >> } >> >> /** build attributes, payload, groups from 'annotation' */ >> + @Privileged >> private void buildFromAnnotation() { >> - if (constraintValidation.getAnnotation() != null) { >> - if (System.getSecurityManager() == null) { >> - doBuildFromAnnotations(); >> - } else { >> - AccessController.doPrivileged(new >> PrivilegedAction<Object>() { >> - public Object run() { >> - doBuildFromAnnotations(); >> - return null; >> - } >> - }); >> - } >> + if (constraintValidation.getAnnotation() == null) { >> + return; >> } >> - } >> - >> - private void doBuildFromAnnotations() { >> final Class<? extends Annotation> annotationType = >> constraintValidation.getAnnotation().annotationType(); >> >> boolean foundPayload = false; >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/AnnotationProcessor.java >> Wed Oct 1 04:37:36 2014 >> @@ -24,6 +24,8 @@ import org.apache.bval.model.MetaBean; >> import org.apache.bval.util.AccessStrategy; >> import org.apache.bval.util.reflection.Reflection; >> import org.apache.commons.lang3.ArrayUtils; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> >> import javax.validation.Constraint; >> import javax.validation.ConstraintValidator; >> @@ -32,6 +34,7 @@ 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; >> @@ -44,6 +47,7 @@ import java.util.Set; >> * annotations, including composed constraints and the resolution of >> * {@link ConstraintValidator} implementations. >> */ >> +@Privilizing(@CallTo(Reflection.class)) >> public final class AnnotationProcessor { >> /** {@link ApacheFactoryContext} used */ >> private final ApacheFactoryContext factoryContext; >> @@ -142,7 +146,8 @@ public final class AnnotationProcessor { >> * annotated by @Constraint) whose value element has a return >> type of an >> * array of constraint annotations in a special way. >> */ >> - final Object result = >> Reflection.INSTANCE.getAnnotationValue(annotation, >> ConstraintAnnotationAttributes.VALUE.getAttributeName()); >> + final Object result = >> + Reflection.getAnnotationValue(annotation, >> ConstraintAnnotationAttributes.VALUE.getAttributeName()); >> if (result instanceof Annotation[]) { >> boolean changed = false; >> for (final Annotation each : (Annotation[]) result) { >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheFactoryContext.java >> Wed Oct 1 04:37:36 2014 >> @@ -18,6 +18,18 @@ >> */ >> package org.apache.bval.jsr; >> >> +import java.lang.reflect.Constructor; >> +import java.util.ArrayList; >> +import java.util.List; >> + >> +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; >> @@ -29,24 +41,15 @@ import org.apache.bval.xml.XMLMetaBeanFa >> import org.apache.bval.xml.XMLMetaBeanManager; >> import org.apache.commons.lang3.StringUtils; >> import org.apache.commons.lang3.reflect.ConstructorUtils; >> - >> -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 java.lang.reflect.Constructor; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> -import java.util.ArrayList; >> -import java.util.List; >> +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/> >> */ >> +@Privilizing(@CallTo(Reflection.class)) >> public class ApacheFactoryContext implements ValidatorContext { >> private final ApacheValidatorFactory factory; >> private final MetaBeanFinder metaBeanFinder; >> @@ -238,18 +241,8 @@ public class ApacheFactoryContext implem >> return new MetaBeanManager(new >> MetaBeanBuilder(builders.toArray(new >> MetaBeanFactory[builders.size()]))); >> } >> >> + @Privileged >> private <F extends MetaBeanFactory> F createMetaBeanFactory(final >> Class<F> cls) { >> - if (System.getSecurityManager() == null) { >> - return doCreateMetaBeanFactory(cls); >> - } >> - return AccessController.doPrivileged(new PrivilegedAction<F>() { >> - public F run() { >> - return doCreateMetaBeanFactory(cls); >> - } >> - }); >> - } >> - >> - private <F extends MetaBeanFactory> F >> doCreateMetaBeanFactory(final Class<F> cls) { >> try { >> Constructor<F> c = >> ConstructorUtils.getMatchingAccessibleConstructor(cls, >> ApacheFactoryContext.this.getClass()); >> if (c != null) { >> @@ -294,7 +287,7 @@ public class ApacheFactoryContext implem >> >> private Class<?> loadClass(final String className) { >> try { >> - return Class.forName(className, true, >> Reflection.INSTANCE.getClassLoader(ApacheFactoryContext.class)); >> + return Class.forName(className, true, >> Reflection.getClassLoader(ApacheFactoryContext.class)); >> } catch (ClassNotFoundException ex) { >> throw new ValidationException("Unable to load class: " + >> className, ex); >> } >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidationProvider.java >> Wed Oct 1 04:37:36 2014 >> @@ -18,16 +18,15 @@ >> */ >> package org.apache.bval.jsr; >> >> -import org.apache.commons.lang3.ClassUtils; >> - >> import javax.validation.Configuration; >> import javax.validation.ValidationException; >> import javax.validation.ValidatorFactory; >> import javax.validation.spi.BootstrapState; >> import javax.validation.spi.ConfigurationState; >> import javax.validation.spi.ValidationProvider; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> + >> +import org.apache.commons.lang3.ClassUtils; >> +import org.apache.commons.weaver.privilizer.Privileged; >> >> /** >> * Description: Implementation of {@link ValidationProvider} for jsr >> @@ -98,15 +97,10 @@ public class ApacheValidationProvider im >> // No privileges should be required to access the constructor, >> // because the classloader of ApacheValidationProvider will always >> // be an ancestor of the loader of validatorFactoryClass. >> - return (System.getSecurityManager() == null) >> - ? instantiateValidatorFactory(validatorFactoryClass, >> configuration) : AccessController >> - .doPrivileged(new PrivilegedAction<ValidatorFactory>() { >> - public ValidatorFactory run() { >> - return >> instantiateValidatorFactory(validatorFactoryClass, configuration); >> - } >> - }); >> + return instantiateValidatorFactory(validatorFactoryClass, >> configuration); >> } >> >> + @Privileged >> private static ValidatorFactory instantiateValidatorFactory( >> final Class<? extends ValidatorFactory> >> validatorFactoryClass, final ConfigurationState configuration) { >> try { >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorConfiguration.java >> Wed Oct 1 04:37:36 2014 >> @@ -72,7 +72,7 @@ public interface ApacheValidatorConfigur >> * class is presumed have a constructor that accepts a single >> * {@link ConfigurationState} argument. >> */ >> - String VALIDATOR_FACTORY_CLASSNAME = >> "apache.bval.validator-factory-classname"; >> + String VALIDATOR_FACTORY_CLASSNAME = >> "apache.bval.validator-factory-classname"; >> >> /** >> * Specifies the names, delimited by whitespace, of >> @@ -86,6 +86,6 @@ public interface ApacheValidatorConfigur >> * <li>default (no-args) constructor</li> >> * </ol> >> */ >> - String METABEAN_FACTORY_CLASSNAMES = >> "apache.bval.metabean-factory-classnames"; >> + String METABEAN_FACTORY_CLASSNAMES = >> "apache.bval.metabean-factory-classnames"; >> } >> } >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ApacheValidatorFactory.java >> Wed Oct 1 04:37:36 2014 >> @@ -25,6 +25,8 @@ import org.apache.bval.util.AccessStrate >> import org.apache.bval.util.reflection.Reflection; >> import org.apache.commons.lang3.ArrayUtils; >> import org.apache.commons.lang3.ClassUtils; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> >> import javax.validation.ConstraintValidatorFactory; >> import javax.validation.MessageInterpolator; >> @@ -35,6 +37,7 @@ 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.Modifier; >> @@ -52,6 +55,7 @@ import java.util.concurrent.ConcurrentMa >> * validators.<br/> >> * This instance is not thread-safe.<br/> >> */ >> +@Privilizing(@CallTo(Reflection.class)) >> public class ApacheValidatorFactory implements ValidatorFactory, >> Cloneable { >> private static volatile ApacheValidatorFactory DEFAULT_FACTORY; >> private static final ConstraintDefaults DEFAULT_CONSTRAINTS = new >> ConstraintDefaults(); >> @@ -295,7 +299,7 @@ public class ApacheValidatorFactory impl >> >> private <T> T newInstance(final Class<T> cls) { >> try { >> - return Reflection.INSTANCE.newInstance(cls); >> + return Reflection.newInstance(cls); >> } catch (final RuntimeException e) { >> throw new ValidationException(e.getCause()); >> } >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/BeanDescriptorImpl.java >> Wed Oct 1 04:37:36 2014 >> @@ -33,6 +33,8 @@ import org.apache.bval.model.Validation; >> import org.apache.bval.util.AccessStrategy; >> import org.apache.bval.util.reflection.Reflection; >> import org.apache.commons.lang3.ClassUtils; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> >> import javax.validation.Constraint; >> import javax.validation.ConstraintDeclarationException; >> @@ -49,6 +51,7 @@ 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; >> @@ -72,6 +75,7 @@ import java.util.concurrent.CopyOnWriteA >> /** >> * Description: Implements {@link BeanDescriptor}.<br/> >> */ >> +@Privilizing(@CallTo(Reflection.class)) >> public class BeanDescriptorImpl extends ElementDescriptorImpl >> implements BeanDescriptor { >> private static final CopyOnWriteArraySet<ConstraintValidation<?>> >> NO_CONSTRAINTS = new CopyOnWriteArraySet<ConstraintValidation<?>>(); >> private static final Validation[] EMPTY_VALIDATION = new >> Validation[0]; >> @@ -120,7 +124,7 @@ public class BeanDescriptorImpl extends >> Class<?> current = prop.getParentMetaBean().getBeanClass(); >> while (current != null && current != Object.class && >> (!methodFound || !fieldFound)) { >> if (!fieldFound) { >> - final Field field = >> Reflection.INSTANCE.getDeclaredField(current, prop.getName()); >> + final Field field = >> Reflection.getDeclaredField(current, prop.getName()); >> if (field != null) { >> processConvertGroup(edesc, field); >> fieldFound = true; >> @@ -129,12 +133,12 @@ public class BeanDescriptorImpl extends >> >> if (!methodFound) { >> final String name = >> Character.toUpperCase(prop.getName().charAt(0)) + >> prop.getName().substring(1); >> - Method m = >> Reflection.INSTANCE.getDeclaredMethod(current, "get" + name); >> + Method m = Reflection.getDeclaredMethod(current, "get" + >> name); >> if (m != null) { >> processConvertGroup(edesc, m); >> methodFound = true; >> } else { >> - m = >> Reflection.INSTANCE.getDeclaredMethod(current, "is" + name); >> + m = Reflection.getDeclaredMethod(current, "is" + >> name); >> if (m != null) { >> processConvertGroup(edesc, m); >> methodFound = true; >> @@ -359,7 +363,7 @@ public class BeanDescriptorImpl extends >> } >> >> private void buildConstructorConstraints() throws >> InvocationTargetException, IllegalAccessException { >> - for (final Constructor<?> cons : >> Reflection.INSTANCE.getDeclaredConstructors(metaBean.getBeanClass())) >> { >> + for (final Constructor<?> cons : >> Reflection.getDeclaredConstructors(metaBean.getBeanClass())) { >> final ConstructorDescriptorImpl consDesc = new >> ConstructorDescriptorImpl(metaBean, EMPTY_VALIDATION); >> >> contructorConstraints.put(Arrays.toString(cons.getParameterTypes()), >> consDesc); >> >> @@ -500,7 +504,7 @@ public class BeanDescriptorImpl extends >> final List<Class<?>> classHierarchy = >> ClassHelper.fillFullClassHierarchyAsList(new ArrayList<Class<?>>(), >> current); >> classHierarchy.remove(current); >> >> - for (final Method method : >> Reflection.INSTANCE.getDeclaredMethods(current)) { >> + for (final Method method : >> Reflection.getDeclaredMethods(current)) { >> if (Modifier.isStatic(method.getModifiers()) || >> method.isSynthetic()) { >> continue; >> } >> @@ -518,10 +522,10 @@ public class BeanDescriptorImpl extends >> >> final Collection<Method> parents = new >> ArrayList<Method>(); >> for (final Class<?> clazz : classHierarchy) { >> - final Method overriden = >> Reflection.INSTANCE.getDeclaredMethod(clazz, method.getName(), >> method.getParameterTypes()); >> - if (overriden != null) { >> - parents.add(overriden); >> - processMethod(overriden, methodDesc); >> + final Method overridden = >> Reflection.getDeclaredMethod(clazz, method.getName(), >> method.getParameterTypes()); >> + if (overridden != null) { >> + parents.add(overridden); >> + processMethod(overridden, methodDesc); >> } >> } >> >> @@ -564,7 +568,7 @@ public class BeanDescriptorImpl extends >> final Class<?>[] interfaces = >> method.getDeclaringClass().getInterfaces(); >> final Collection<Method> itfWithThisMethod = new >> ArrayList<Method>(); >> for (final Class<?> i : interfaces) { >> - final Method m = >> Reflection.INSTANCE.getDeclaredMethod(i, method.getName(), >> method.getParameterTypes()); >> + final Method m = >> Reflection.getDeclaredMethod(i, method.getName(), >> method.getParameterTypes()); >> if (m != null) { >> itfWithThisMethod.add(m); >> } >> @@ -582,9 +586,9 @@ public class BeanDescriptorImpl extends >> returnValid++; >> } >> for (final Class<?> clazz : classHierarchy) { >> - final Method overriden = >> Reflection.INSTANCE.getDeclaredMethod(clazz, method.getName(), >> method.getParameterTypes()); >> - if (overriden != null) { >> - if (overriden.getAnnotation(Valid.class) != >> null) { >> + final Method overridden = >> Reflection.getDeclaredMethod(clazz, method.getName(), >> method.getParameterTypes()); >> + if (overridden != null) { >> + if (overridden.getAnnotation(Valid.class) >> != null) { >> returnValid++; >> } >> } >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ClassValidator.java >> Wed Oct 1 04:37:36 2014 >> @@ -18,6 +18,33 @@ >> */ >> package org.apache.bval.jsr; >> >> +import java.lang.reflect.Constructor; >> +import java.lang.reflect.Member; >> +import java.lang.reflect.Method; >> +import java.lang.reflect.Modifier; >> +import java.util.ArrayList; >> +import java.util.Arrays; >> +import java.util.Collection; >> +import java.util.Collections; >> +import java.util.HashSet; >> +import java.util.List; >> +import java.util.Map; >> +import java.util.Set; >> + >> +import javax.validation.ConstraintDeclarationException; >> +import javax.validation.ConstraintDefinitionException; >> +import javax.validation.ConstraintTarget; >> +import javax.validation.ConstraintViolation; >> +import javax.validation.ElementKind; >> +import javax.validation.ValidationException; >> +import javax.validation.executable.ExecutableValidator; >> +import javax.validation.groups.Default; >> +import javax.validation.metadata.BeanDescriptor; >> +import javax.validation.metadata.ConstraintDescriptor; >> +import javax.validation.metadata.ElementDescriptor; >> +import javax.validation.metadata.ParameterDescriptor; >> +import javax.validation.metadata.PropertyDescriptor; >> + >> import org.apache.bval.DynamicMetaBean; >> import org.apache.bval.MetaBeanFinder; >> import org.apache.bval.jsr.groups.Group; >> @@ -40,34 +67,7 @@ import org.apache.commons.lang3.ArrayUti >> import org.apache.commons.lang3.ClassUtils; >> import org.apache.commons.lang3.ObjectUtils; >> import org.apache.commons.lang3.reflect.TypeUtils; >> - >> -import javax.validation.ConstraintDeclarationException; >> -import javax.validation.ConstraintDefinitionException; >> -import javax.validation.ConstraintTarget; >> -import javax.validation.ConstraintViolation; >> -import javax.validation.ElementKind; >> -import javax.validation.ValidationException; >> -import javax.validation.executable.ExecutableValidator; >> -import javax.validation.groups.Default; >> -import javax.validation.metadata.BeanDescriptor; >> -import javax.validation.metadata.ConstraintDescriptor; >> -import javax.validation.metadata.ElementDescriptor; >> -import javax.validation.metadata.ParameterDescriptor; >> -import javax.validation.metadata.PropertyDescriptor; >> -import java.lang.reflect.Constructor; >> -import java.lang.reflect.Member; >> -import java.lang.reflect.Method; >> -import java.lang.reflect.Modifier; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> -import java.util.ArrayList; >> -import java.util.Arrays; >> -import java.util.Collection; >> -import java.util.Collections; >> -import java.util.HashSet; >> -import java.util.List; >> -import java.util.Map; >> -import java.util.Set; >> +import org.apache.commons.weaver.privilizer.Privileged; >> >> // TODO: centralize treatMapsLikeBeans >> >> @@ -312,18 +312,8 @@ public class ClassValidator implements C >> return this; >> } >> >> + @Privileged >> private <T> T newInstance(final Class<T> cls) { >> - if (System.getSecurityManager() == null) { >> - return doNewInstance(cls); >> - } >> - return AccessController.doPrivileged(new PrivilegedAction<T>() { >> - public T run() { >> - return doNewInstance(cls); >> - } >> - }); >> - } >> - >> - private <T> T doNewInstance(final Class<T> cls) { >> try { >> Constructor<T> cons = >> cls.getConstructor(ApacheFactoryContext.class); >> if (!cons.isAccessible()) { >> @@ -399,6 +389,7 @@ public class ClassValidator implements C >> >> // For each owner in the hierarchy >> for (final Class<?> owner : classHierarchy) { >> + >> context.setCurrentOwner(owner); >> >> int numViolations = result.violationsSize(); >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConfigurationImpl.java >> Wed Oct 1 04:37:36 2014 >> @@ -18,11 +18,16 @@ >> */ >> package org.apache.bval.jsr; >> >> -import org.apache.bval.cdi.BValExtension; >> -import org.apache.bval.jsr.parameter.DefaultParameterNameProvider; >> -import org.apache.bval.jsr.resolver.DefaultTraversableResolver; >> -import org.apache.bval.jsr.util.IOs; >> -import org.apache.bval.jsr.xml.ValidationParser; >> +import java.io.Closeable; >> +import java.io.IOException; >> +import java.io.InputStream; >> +import java.util.Collection; >> +import java.util.HashMap; >> +import java.util.HashSet; >> +import java.util.List; >> +import java.util.Map; >> +import java.util.Set; >> +import java.util.concurrent.CopyOnWriteArrayList; >> >> import javax.validation.BootstrapConfiguration; >> import javax.validation.ConstraintValidatorFactory; >> @@ -36,18 +41,13 @@ import javax.validation.executable.Execu >> import javax.validation.spi.BootstrapState; >> import javax.validation.spi.ConfigurationState; >> import javax.validation.spi.ValidationProvider; >> -import java.io.Closeable; >> -import java.io.IOException; >> -import java.io.InputStream; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> -import java.util.Collection; >> -import java.util.HashMap; >> -import java.util.HashSet; >> -import java.util.List; >> -import java.util.Map; >> -import java.util.Set; >> -import java.util.concurrent.CopyOnWriteArrayList; >> + >> +import org.apache.bval.cdi.BValExtension; >> +import org.apache.bval.jsr.parameter.DefaultParameterNameProvider; >> +import org.apache.bval.jsr.resolver.DefaultTraversableResolver; >> +import org.apache.bval.jsr.util.IOs; >> +import org.apache.bval.jsr.xml.ValidationParser; >> +import org.apache.commons.weaver.privilizer.Privileged; >> >> /** >> * Description: used to configure apache-validation for jsr. >> @@ -98,7 +98,7 @@ public class ConfigurationImpl implement >> >> protected Collection<ExecutableType> executableValidation; >> >> - private Collection<BValExtension.Releasable> releasables = new >> CopyOnWriteArrayList<BValExtension.Releasable>(); >> + private Collection<BValExtension.Releasable<?>> releasables = new >> CopyOnWriteArrayList<BValExtension.Releasable<?>>(); >> >> private boolean beforeCdi = false; >> >> @@ -305,27 +305,18 @@ public class ConfigurationImpl implement >> * @throws ValidationException if the ValidatorFactory cannot be built >> */ >> public ValidatorFactory buildValidatorFactory() { >> - if (System.getSecurityManager() == null) { >> - return doPrivBuildValidatorFactory(this); >> - } >> - return AccessController.doPrivileged(new >> PrivilegedAction<ValidatorFactory>() { >> - public ValidatorFactory run() { >> - return >> doPrivBuildValidatorFactory(ConfigurationImpl.this); >> - } >> - }); >> + return doBuildValidatorFactory(); >> } >> >> - public ValidatorFactory doPrivBuildValidatorFactory(final >> ConfigurationImpl impl) { >> + @Privileged >> + private ValidatorFactory doBuildValidatorFactory() { >> prepare(); >> parser.ensureValidatorFactoryCanBeBuilt(); >> - if (provider != null) { >> - return provider.buildValidatorFactory(impl); >> - } else { >> - return findProvider().buildValidatorFactory(impl); >> - } >> + final ValidationProvider<?> useProvider = provider == null ? >> findProvider() : provider; >> + return useProvider.buildValidatorFactory(this); >> } >> >> - public ConfigurationImpl prepare() { >> + private ConfigurationImpl prepare() { >> if (prepared) { >> return this; >> } >> @@ -466,38 +457,19 @@ public class ConfigurationImpl implement >> }; >> } >> >> + @Privileged >> private <T> T newInstance(final Class<T> cls) { >> - if (System.getSecurityManager() == null) { >> - return createInstance(cls); >> - } >> - return AccessController.doPrivileged(new PrivilegedAction<T>() { >> - public T run() { >> - return createInstance(cls); >> - } >> - }); >> - } >> - >> - private <T> T createInstance(final Class<T> cls) { >> try { >> final BValExtension.Releasable<T> releasable = >> BValExtension.inject(cls); >> releasables.add(releasable); >> return releasable.getInstance(); >> } catch (final Exception e) { >> - try { >> - return cls.newInstance(); >> - } catch (final InstantiationException e1) { >> - throw new ValidationException(e1.getMessage(), e1); >> - } catch (final IllegalAccessException e1) { >> - throw new ValidationException(e1.getMessage(), e1); >> - } >> } catch (final NoClassDefFoundError error) { >> - try { >> - return cls.newInstance(); >> - } catch (final InstantiationException e1) { >> - throw new ValidationException(e1.getMessage(), e1); >> - } catch (final IllegalAccessException e1) { >> - throw new ValidationException(e1.getMessage(), e1); >> - } >> + } >> + try { >> + return cls.newInstance(); >> + } catch (final Exception e) { >> + throw new ValidationException(e.getMessage(), e); >> } >> } >> >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintAnnotationAttributes.java >> Wed Oct 1 04:37:36 2014 >> @@ -18,15 +18,17 @@ package org.apache.bval.jsr; >> >> import org.apache.bval.util.reflection.Reflection; >> import org.apache.commons.lang3.reflect.TypeUtils; >> +import org.apache.commons.weaver.privilizer.Privileged; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> >> import javax.validation.Constraint; >> import javax.validation.ConstraintTarget; >> import javax.validation.Payload; >> + >> import java.lang.annotation.Annotation; >> import java.lang.reflect.Method; >> import java.lang.reflect.Type; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> import java.util.Map; >> import java.util.concurrent.ConcurrentHashMap; >> import java.util.concurrent.ConcurrentMap; >> @@ -40,27 +42,27 @@ public enum ConstraintAnnotationAttribut >> /** >> * "message" >> */ >> - MESSAGE(false, "message"), >> + MESSAGE("message"), >> >> /** >> * "groups" >> */ >> - GROUPS(false, "groups"), >> + GROUPS("groups"), >> >> /** >> * "payload" >> */ >> - PAYLOAD(false, "payload"), >> + PAYLOAD("payload"), >> >> /** >> * "validationAppliesTo" >> */ >> - VALIDATION_APPLIES_TO(true, "validationAppliesTo"), >> + VALIDATION_APPLIES_TO("validationAppliesTo"), >> >> /** >> * "value" for multi-valued constraints >> */ >> - VALUE(true, "value"); >> + VALUE("value"); >> >> @SuppressWarnings("unused") >> private static class Types { >> @@ -72,11 +74,9 @@ public enum ConstraintAnnotationAttribut >> } >> >> private final Type type; >> - private final boolean permitNullDefaultValue; >> private final String attributeName; >> >> - private ConstraintAnnotationAttributes(final boolean >> permitNullDefaultValue, final String name) { >> - this.permitNullDefaultValue = permitNullDefaultValue; >> + private ConstraintAnnotationAttributes(final String name) { >> this.attributeName = name; >> try { >> this.type = >> Types.class.getDeclaredField(getAttributeName()).getGenericType(); >> @@ -133,6 +133,7 @@ public enum ConstraintAnnotationAttribut >> >> public <C extends Annotation> Worker<C> analyze(final Class<C> clazz) >> { >> if (clazz.getName().startsWith("javax.validation.constraint.")) >> { // cache only APIs classes to avoid memory leaks >> + @SuppressWarnings("unchecked") >> Worker<C> w = Worker.class.cast(WORKER_CACHE.get(clazz)); >> if (w == null) { >> w = new Worker<C>(clazz); >> @@ -154,6 +155,8 @@ public enum ConstraintAnnotationAttribut >> throw new RuntimeException("Impossible normally"); >> } >> } >> + >> + @Privilizing(@CallTo(Reflection.class)) >> public class Worker<C extends Annotation> { >> >> public final Method method; >> @@ -180,7 +183,7 @@ public enum ConstraintAnnotationAttribut >> if (found != null) { >> return found; >> } >> - final Method m = >> Reflection.INSTANCE.getPublicMethod(constraintType, attributeName); >> + final Method m = >> Reflection.getPublicMethod(constraintType, attributeName); >> if (m == null) { >> cache.putIfAbsent(attributeName, NULL_METHOD); >> return null; >> @@ -199,17 +202,13 @@ public enum ConstraintAnnotationAttribut >> return method != null && method != NULL_METHOD; >> } >> >> - public Object read(final Annotation constraint) { >> - if (System.getSecurityManager() == null) { >> - return doInvoke(constraint); >> - } >> - return AccessController.doPrivileged(new >> PrivilegedAction<Object>() { >> - public Object run() { >> - return doInvoke(constraint); >> - } >> - }); >> + public <T> T read(final Annotation constraint) { >> + @SuppressWarnings("unchecked") >> + final T result = (T) doInvoke(constraint); >> + return result; >> } >> >> + @Privileged >> private Object doInvoke(final Annotation constraint) { >> try { >> return method.invoke(constraint); >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintDefaults.java >> Wed Oct 1 04:37:36 2014 >> @@ -18,12 +18,9 @@ >> */ >> package org.apache.bval.jsr; >> >> -import javax.validation.ConstraintValidator; >> import java.io.IOException; >> import java.io.InputStream; >> import java.lang.annotation.Annotation; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> import java.util.HashMap; >> import java.util.LinkedList; >> import java.util.Map; >> @@ -32,10 +29,17 @@ import java.util.StringTokenizer; >> import java.util.logging.Level; >> import java.util.logging.Logger; >> >> +import javax.validation.ConstraintValidator; >> + >> +import org.apache.bval.util.reflection.Reflection; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> + >> /** >> * Description: Provides access to the default constraints/validator >> implementation classes built into the framework. >> * These are configured in DefaultConstraints.properties.<br/> >> */ >> +@Privilizing(@CallTo(Reflection.class)) >> public class ConstraintDefaults { >> private static final Logger log = >> Logger.getLogger(ConstraintDefaults.class.getName()); >> private static final String DEFAULT_CONSTRAINTS = >> @@ -101,31 +105,11 @@ public class ConstraintDefaults { >> while (tokens.hasMoreTokens()) { >> final String eachClassName = tokens.nextToken(); >> >> - Class<?> constraintValidatorClass; >> - if (System.getSecurityManager() == null) { >> - try { >> - constraintValidatorClass = >> Class.forName(eachClassName, true, classloader); >> - } catch (final ClassNotFoundException e) { >> - log.log(Level.SEVERE, String.format("Cannot >> find class %s", eachClassName), e); >> - constraintValidatorClass = null; >> - } >> - } else { >> - constraintValidatorClass = >> AccessController.doPrivileged(new PrivilegedAction<Class<?>>() { >> - public Class<?> run() { >> - try { >> - return Class.forName(eachClassName, >> true, classloader); >> - } catch (final ClassNotFoundException e) { >> - log.log(Level.SEVERE, >> String.format("Cannot find class %s", eachClassName), e); >> - return null; >> - } >> - } >> - }); >> - } >> - >> - if (constraintValidatorClass != null) { >> - classes.add(constraintValidatorClass); >> + try { >> + classes.add(Reflection.getClass(classloader, >> eachClassName)); >> + } catch (Exception e) { >> + log.log(Level.SEVERE, String.format("Cannot find >> class %s", eachClassName), e); >> } >> - >> } >> >> loadedConstraints.put((String) entry.getKey(), >> classes.toArray(new Class[classes.size()])); >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/ConstraintValidation.java >> Wed Oct 1 04:37:36 2014 >> @@ -234,7 +234,7 @@ public class ConstraintValidation<T exte >> } >> >> private <A extends Annotation, T> ConstraintValidator<A, ? super >> T> getConstraintValidator(A annotation, >> - >> Class<? extends ConstraintValidator<A, ?>>[] >> constraintClasses, Class<?> owner, AccessStrategy access) { >> + Class<? extends ConstraintValidator<A, ?>>[] >> constraintClasses, Class<?> owner, AccessStrategy access) { >> if (constraintClasses != null && constraintClasses.length > 0) { >> Type type = determineTargetedType(owner, access); >> >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultMessageInterpolator.java >> Wed Oct 1 04:37:36 2014 >> @@ -19,8 +19,11 @@ package org.apache.bval.jsr; >> import org.apache.bval.el.MessageEvaluator; >> import org.apache.bval.util.reflection.Reflection; >> import org.apache.commons.lang3.ArrayUtils; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> >> import javax.validation.MessageInterpolator; >> + >> import java.util.Locale; >> import java.util.Map; >> import java.util.MissingResourceException; >> @@ -37,6 +40,7 @@ import java.util.regex.Pattern; >> * into human-readable messages. It uses ResourceBundles to find the >> messages. >> * This class is threadsafe.<br/> >> */ >> +@Privilizing(@CallTo(Reflection.class)) >> public class DefaultMessageInterpolator implements MessageInterpolator { >> private static final Logger log = >> Logger.getLogger(DefaultMessageInterpolator.class.getName()); >> private static final boolean LOG_FINEST = >> log.isLoggable(Level.FINEST); >> @@ -168,7 +172,7 @@ public class DefaultMessageInterpolator >> */ >> private ResourceBundle getFileBasedResourceBundle(Locale locale) { >> ResourceBundle rb = null; >> - final ClassLoader classLoader = >> Reflection.INSTANCE.getClassLoader(DefaultMessageInterpolator.class); >> + final ClassLoader classLoader = >> Reflection.getClassLoader(DefaultMessageInterpolator.class); >> if (classLoader != null) { >> rb = loadBundle(classLoader, locale, >> USER_VALIDATION_MESSAGES + " not found by thread >> local classloader"); >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultValidationProviderResolver.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultValidationProviderResolver.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultValidationProviderResolver.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultValidationProviderResolver.java >> Wed Oct 1 04:37:36 2014 >> @@ -17,19 +17,23 @@ >> package org.apache.bval.jsr; >> >> >> -import javax.validation.ValidationException; >> -import javax.validation.ValidationProviderResolver; >> -import javax.validation.spi.ValidationProvider; >> import java.io.BufferedReader; >> import java.io.IOException; >> import java.io.InputStreamReader; >> import java.net.URL; >> -import java.security.AccessController; >> -import java.security.PrivilegedAction; >> import java.util.ArrayList; >> import java.util.Enumeration; >> import java.util.List; >> >> +import javax.validation.ValidationException; >> +import javax.validation.ValidationProviderResolver; >> +import javax.validation.spi.ValidationProvider; >> + >> +import org.apache.bval.util.reflection.Reflection; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> + >> +@Privilizing(@CallTo(Reflection.class)) >> public class DefaultValidationProviderResolver implements >> ValidationProviderResolver { >> >> //TODO - Spec recommends caching per classloader >> @@ -49,7 +53,7 @@ public class DefaultValidationProviderRe >> // find all service provider cfgs >> Enumeration<URL> cfgs = cl.getResources(SPI_CFG); >> while (cfgs.hasMoreElements()) { >> - URL url = cfgs.nextElement(); >> + final URL url = cfgs.nextElement(); >> BufferedReader br = null; >> try { >> br = new BufferedReader(new >> InputStreamReader(url.openStream()), 256); >> @@ -60,27 +64,11 @@ public class DefaultValidationProviderRe >> if (!line.startsWith("#")) { >> try { >> // try loading the specified class >> - final Class<?> provider = >> cl.loadClass(line); >> + @SuppressWarnings("rawtypes") >> + final Class<? extends >> ValidationProvider> providerType = >> + >> cl.loadClass(line).asSubclass(ValidationProvider.class); >> // create an instance to return >> - final ValidationProvider<?> vp; >> - if (System.getSecurityManager() == null) { >> - try { >> - vp = (ValidationProvider<?>) >> provider.newInstance(); >> - } catch (final Exception ex) { >> - throw new >> ValidationException("Cannot instantiate : " + provider, ex); >> - } >> - } else { >> - vp = >> AccessController.doPrivileged(new >> PrivilegedAction<ValidationProvider<?>>() { >> - public ValidationProvider<?> >> run() { >> - try { >> - return >> (ValidationProvider<?>) provider.newInstance(); >> - } catch (final Exception ex) { >> - throw new >> ValidationException("Cannot instantiate : " + provider, ex); >> - } >> - } >> - }); >> - } >> - providers.add(vp); >> + >> >> providers.add(Reflection.newInstance(providerType.asSubclass(ValidationProvider.class))); >> >> } catch (ClassNotFoundException e) { >> throw new ValidationException("Failed >> to load provider " + >> @@ -89,12 +77,12 @@ public class DefaultValidationProviderRe >> } >> line = br.readLine(); >> } >> - br.close(); >> } catch (IOException e) { >> throw new ValidationException("Error trying to >> read " + url, e); >> } finally { >> - if (br != null) >> + if (br != null) { >> br.close(); >> + } >> } >> } >> } catch (IOException e) { >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/JsrMetaBeanFactory.java >> Wed Oct 1 04:37:36 2014 >> @@ -32,12 +32,15 @@ import org.apache.bval.util.AccessStrate >> import org.apache.bval.util.FieldAccess; >> import org.apache.bval.util.MethodAccess; >> 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.ConstraintDeclarationException; >> import javax.validation.GroupDefinitionException; >> import javax.validation.GroupSequence; >> import javax.validation.groups.ConvertGroup; >> import javax.validation.groups.Default; >> + >> import java.io.Serializable; >> import java.lang.annotation.Annotation; >> import java.lang.annotation.ElementType; >> @@ -55,6 +58,7 @@ import java.util.logging.Logger; >> * Description: process the class annotations for JSR303 constraint >> validations to build the MetaBean with information >> * from annotations and JSR303 constraint mappings (defined in xml)<br/> >> */ >> +@Privilizing(@CallTo(Reflection.class)) >> public class JsrMetaBeanFactory implements MetaBeanFactory { >> /** Shared log instance */ >> // of dubious utility as it's static :/ >> @@ -87,8 +91,8 @@ public class JsrMetaBeanFactory implemen >> processGroupSequence(beanClass, metabean); >> >> // process class, superclasses and interfaces >> - List<Class<?>> classSequence = new ArrayList<Class<?>>(); >> - ClassHelper.fillFullClassHierarchyAsList(classSequence, >> beanClass); >> + final List<Class<?>> classSequence = >> + ClassHelper.fillFullClassHierarchyAsList(new >> ArrayList<Class<?>>(), beanClass); >> >> // start with superclasses and go down the hierarchy so that >> // the child classes are processed last to have the chance to >> @@ -126,7 +130,7 @@ public class JsrMetaBeanFactory implemen >> >> final Collection<String> missingValid = new ArrayList<String>(); >> >> - final Field[] fields = >> Reflection.INSTANCE.getDeclaredFields(beanClass); >> + final Field[] fields = Reflection.getDeclaredFields(beanClass); >> for (final Field field : fields) { >> MetaProperty metaProperty = >> metabean.getProperty(field.getName()); >> // create a property for those fields for which there is not >> yet a >> @@ -147,7 +151,7 @@ public class JsrMetaBeanFactory implemen >> } >> } >> } >> - final Method[] methods = >> Reflection.INSTANCE.getDeclaredMethods(beanClass); >> + final Method[] methods = Reflection.getDeclaredMethods(beanClass); >> for (final Method method : methods) { >> if (method.isSynthetic() || method.isBridge()) { >> continue; >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/resolver/DefaultTraversableResolver.java >> Wed Oct 1 04:37:36 2014 >> @@ -18,14 +18,18 @@ package org.apache.bval.jsr.resolver; >> >> import org.apache.bval.util.reflection.Reflection; >> import org.apache.commons.lang3.ClassUtils; >> +import org.apache.commons.weaver.privilizer.Privilizing; >> +import org.apache.commons.weaver.privilizer.Privilizing.CallTo; >> >> import javax.validation.Path; >> import javax.validation.TraversableResolver; >> + >> import java.lang.annotation.ElementType; >> import java.util.logging.Level; >> import java.util.logging.Logger; >> >> /** @see javax.validation.TraversableResolver */ >> +@Privilizing(@CallTo(Reflection.class)) >> public class DefaultTraversableResolver implements >> TraversableResolver, CachingRelevant { >> private static final Logger log = >> Logger.getLogger(DefaultTraversableResolver.class.getName()); >> private static final boolean LOG_FINEST = >> log.isLoggable(Level.FINEST); >> @@ -71,9 +75,9 @@ public class DefaultTraversableResolver >> /** Tries to load detect and load JPA. */ >> @SuppressWarnings("unchecked") >> private void initJpa() { >> - final ClassLoader classLoader = getClassLoader(); >> + final ClassLoader classLoader = >> Reflection.getClassLoader(DefaultTraversableResolver.class); >> try { >> - Reflection.INSTANCE.getClass(classLoader, >> PERSISTENCE_UTIL_CLASSNAME); >> + Reflection.getClass(classLoader, PERSISTENCE_UTIL_CLASSNAME); >> if (LOG_FINEST) { >> log.log(Level.FINEST, String.format("Found %s on >> classpath.", PERSISTENCE_UTIL_CLASSNAME)); >> } >> @@ -101,9 +105,4 @@ public class DefaultTraversableResolver >> public boolean needsCaching() { >> return jpaTR != null && >> CachingTraversableResolver.needsCaching(jpaTR); >> } >> - >> - private static ClassLoader getClassLoader() >> - { >> - return >> Reflection.INSTANCE.getClassLoader(DefaultTraversableResolver.class); >> - } >> } >> >> Modified: >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/util/ClassHelper.java >> URL: >> http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/util/ClassHelper.java?rev=1628598&r1=1628597&r2=1628598&view=diff >> >> ============================================================================== >> --- >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/util/ClassHelper.java >> (original) >> +++ >> bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/util/ClassHelper.java >> Wed Oct 1 04:37:36 2014 >> @@ -43,6 +43,7 @@ public class ClassHelper { >> * The current list of classes in the hierarchy. >> * @param clazz >> */ >> + @Deprecated >> static public List<Class<?>> >> fillFullClassHierarchyAsList(List<Class<?>> allClasses, Class<?> >> clazz) { >> if (clazz == null || clazz == Object.class || clazz == >> Serializable.class || clazz == Cloneable.class) { >> return allClasses; >> @@ -58,26 +59,4 @@ public class ClassHelper { >> return allClasses; >> } >> >> - /** >> - * @deprecated Will be removed for security reasons. >> - * >> - * Perform ClassUtils.getClass functions with Java 2 Security enabled. >> - */ >> - @Deprecated >> - public static Class<?> getClass(String className) throws >> ClassNotFoundException { >> - return getClass(className, true); >> - } >> - >> - /** >> - * @deprecated Will be removed for security reasons. >> - * >> - * Perform ClassUtils.getClass functions with Java 2 Security enabled. >> - */ >> - @Deprecated >> - public static Class<?> getClass(String className, boolean >> initialize) throws ClassNotFoundException { >> - ClassLoader loader = >> Thread.currentThread().getContextClassLoader(); >> - if (loader == null) >> - loader = ClassHelper.class.getClassLoader(); >> - return ClassUtils.getClass(loader, className, initialize); >> - } >> } >>
