You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@bval.apache.org by mb...@apache.org on 2014/10/01 06:37:37 UTC

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...

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);
-    }
 }



Re: Fwd: 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...

Posted by Matt Benson <gu...@gmail.com>.
On Sat, Dec 6, 2014 at 12:32 PM, Romain Manni-Bucau
<rm...@gmail.com> wrote:
> Sure, default code shouldn't change. BTW I wonder why these
> regressions were introduced? Any idea?
>

My assumption had been that types to be validated should be public,
but a reread of section 4.1 of the BV1.1 spec shows no such
restriction. The TCK validates private classes and my recent
Reflection/accessible changes did not support these. This has been
fixed.

Additionally, I am having no trouble building with 1.8.0-ea-b124 on
Ubuntu Linux.

Matt

>
> 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 <gu...@gmail.com>:
>> 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" <rm...@gmail.com> 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:  <mb...@apache.org>
>>> 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: commits@bval.apache.org
>>>
>>>
>>> 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);
>>> -    }
>>>  }
>>>

Re: Fwd: 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...

Posted by Romain Manni-Bucau <rm...@gmail.com>.
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 <gu...@gmail.com>:
> 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" <rm...@gmail.com> 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:  <mb...@apache.org>
>> 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: commits@bval.apache.org
>>
>>
>> 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);
>> -    }
>>  }
>>

Re: Fwd: 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...

Posted by Matt Benson <gu...@gmail.com>.
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" <rm...@gmail.com> 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:  <mb...@apache.org>
> 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: commits@bval.apache.org
>
>
> 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);
> -    }
>  }
>

Re: 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...

Posted by Romain Manni-Bucau <rm...@gmail.com>.
works fine with:

Apache Maven 3.2.2 (45f7c06d68e745d05611f7fd14efb6594181933e;
2014-06-17T15:51:42+02:00)
Maven home: /home/rmannibucau/softwares/apache-maven-3.2.2
Java version: 1.7.0_67, vendor: Oracle Corporation
Java home: /home/rmannibucau/softwares/jdk1.7.0_67/jre
Default locale: fr_FR, platform encoding: UTF-8
OS name: "linux", version: "3.13.0-40-generic", arch: "amd64", family: "unix"


Romain Manni-Bucau
@rmannibucau
http://www.tomitribe.com
http://rmannibucau.wordpress.com
https://github.com/rmannibucau


2014-12-06 15:51 GMT+01:00 Daniel Cunha <da...@gmail.com>:
> I have a same problem with JDK 7.
>
> On Sat, Dec 6, 2014 at 12:57 PM, Romain Manni-Bucau <rm...@gmail.com>
> wrote:
>
>> Yep
>>
>> Not an issue afaik
>> Le 6 déc. 2014 13:41, "Roman Stumm" <ro...@gmx.de> a écrit :
>>
>> > I can compile the trunk with java7, but not with java8:
>> >
>> > [ERROR] Failed to execute goal org.apache.maven.plugins:
>> > maven-compiler-plugin:2.3.2:compile (default-compile) on project
>> > bval-jsr303: Compilation failure: Compilation failure:
>> > [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
>> > main/java/org/apache/bval/jsr303/ConstraintValidation.java:[141,8] error:
>> > reference to validate is ambiguous
>> > [ERROR]
>> > [ERROR] L extends ValidationListener declared in method
>> > <L>validate(ValidationContext<L>)
>> > [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
>> > main/java/org/apache/bval/jsr303/ConstraintValidation.java:[180,35]
>> > error: reference to validate is ambiguous
>> > [ERROR]
>> > [ERROR] L extends ValidationListener declared in method
>> > <L>validate(ValidationContext<L>)
>> > [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
>> > main/java/org/apache/bval/jsr303/ConstraintValidation.java:[197,24]
>> > error: reference to validate is ambiguous
>> > [ERROR]
>> > [ERROR] L extends ValidationListener declared in method
>> > <L>validate(ValidationContext<L>)
>> > [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
>> >
>> main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java:[209,26]
>> > error: reference to validate is ambiguous
>> >
>> > Am 06.12.14 13:12, schrieb Daniel Cunha:
>> >
>> >> I try see something here.
>> >>
>> >> But I have a problem.. my laptop not build bval.
>> >> The build stop in Building Apache BVal :: bval-jsr 1.1.0-alpha-SNAPSHOT
>> >>
>> >> Linux 3.13.0 32bits
>> >> 4GB ram
>> >> JDK 1.8.0_25
>> >>
>> >> On Sat, Dec 6, 2014 at 8:08 AM, Romain Manni-Bucau <
>> rmannibucau@gmail.com
>> >> >
>> >> 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:  <mb...@apache.org>
>> >>> 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: commits@bval.apache.org
>> >>>
>> >>>
>> >>> 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.BeanDe
>> >>
>> >> ...
>>
>
>
>
> --
> Daniel Cunha (soro) <http://www.cejug.net>
> Blog: http://www.danielsoro.com.br
> Twitter: https://twitter.com/dvlc_
> GitHub: https://github.com/danielsoro
> LinkedIn:  http://www.linkedin.com/in/danielvlcunha

Re: 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...

Posted by Daniel Cunha <da...@gmail.com>.
I have a same problem with JDK 7.

On Sat, Dec 6, 2014 at 12:57 PM, Romain Manni-Bucau <rm...@gmail.com>
wrote:

> Yep
>
> Not an issue afaik
> Le 6 déc. 2014 13:41, "Roman Stumm" <ro...@gmx.de> a écrit :
>
> > I can compile the trunk with java7, but not with java8:
> >
> > [ERROR] Failed to execute goal org.apache.maven.plugins:
> > maven-compiler-plugin:2.3.2:compile (default-compile) on project
> > bval-jsr303: Compilation failure: Compilation failure:
> > [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
> > main/java/org/apache/bval/jsr303/ConstraintValidation.java:[141,8] error:
> > reference to validate is ambiguous
> > [ERROR]
> > [ERROR] L extends ValidationListener declared in method
> > <L>validate(ValidationContext<L>)
> > [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
> > main/java/org/apache/bval/jsr303/ConstraintValidation.java:[180,35]
> > error: reference to validate is ambiguous
> > [ERROR]
> > [ERROR] L extends ValidationListener declared in method
> > <L>validate(ValidationContext<L>)
> > [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
> > main/java/org/apache/bval/jsr303/ConstraintValidation.java:[197,24]
> > error: reference to validate is ambiguous
> > [ERROR]
> > [ERROR] L extends ValidationListener declared in method
> > <L>validate(ValidationContext<L>)
> > [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
> >
> main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java:[209,26]
> > error: reference to validate is ambiguous
> >
> > Am 06.12.14 13:12, schrieb Daniel Cunha:
> >
> >> I try see something here.
> >>
> >> But I have a problem.. my laptop not build bval.
> >> The build stop in Building Apache BVal :: bval-jsr 1.1.0-alpha-SNAPSHOT
> >>
> >> Linux 3.13.0 32bits
> >> 4GB ram
> >> JDK 1.8.0_25
> >>
> >> On Sat, Dec 6, 2014 at 8:08 AM, Romain Manni-Bucau <
> rmannibucau@gmail.com
> >> >
> >> 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:  <mb...@apache.org>
> >>> 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: commits@bval.apache.org
> >>>
> >>>
> >>> 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.BeanDe
> >>
> >> ...
>



-- 
Daniel Cunha (soro) <http://www.cejug.net>
Blog: http://www.danielsoro.com.br
Twitter: https://twitter.com/dvlc_
GitHub: https://github.com/danielsoro
LinkedIn:  http://www.linkedin.com/in/danielvlcunha

Re: 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...

Posted by Romain Manni-Bucau <rm...@gmail.com>.
Yep

Not an issue afaik
Le 6 déc. 2014 13:41, "Roman Stumm" <ro...@gmx.de> a écrit :

> I can compile the trunk with java7, but not with java8:
>
> [ERROR] Failed to execute goal org.apache.maven.plugins:
> maven-compiler-plugin:2.3.2:compile (default-compile) on project
> bval-jsr303: Compilation failure: Compilation failure:
> [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
> main/java/org/apache/bval/jsr303/ConstraintValidation.java:[141,8] error:
> reference to validate is ambiguous
> [ERROR]
> [ERROR] L extends ValidationListener declared in method
> <L>validate(ValidationContext<L>)
> [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
> main/java/org/apache/bval/jsr303/ConstraintValidation.java:[180,35]
> error: reference to validate is ambiguous
> [ERROR]
> [ERROR] L extends ValidationListener declared in method
> <L>validate(ValidationContext<L>)
> [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
> main/java/org/apache/bval/jsr303/ConstraintValidation.java:[197,24]
> error: reference to validate is ambiguous
> [ERROR]
> [ERROR] L extends ValidationListener declared in method
> <L>validate(ValidationContext<L>)
> [ERROR] /Users/roman/projects/apache/bval-trunk/bval-jsr303/src/
> main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java:[209,26]
> error: reference to validate is ambiguous
>
> Am 06.12.14 13:12, schrieb Daniel Cunha:
>
>> I try see something here.
>>
>> But I have a problem.. my laptop not build bval.
>> The build stop in Building Apache BVal :: bval-jsr 1.1.0-alpha-SNAPSHOT
>>
>> Linux 3.13.0 32bits
>> 4GB ram
>> JDK 1.8.0_25
>>
>> On Sat, Dec 6, 2014 at 8:08 AM, Romain Manni-Bucau <rmannibucau@gmail.com
>> >
>> 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:  <mb...@apache.org>
>>> 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: commits@bval.apache.org
>>>
>>>
>>> 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.BeanDe
>>
>> ...

Re: 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...

Posted by Roman Stumm <ro...@gmx.de>.
I can compile the trunk with java7, but not with java8:

[ERROR] Failed to execute goal 
org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile 
(default-compile) on project bval-jsr303: Compilation failure: 
Compilation failure:
[ERROR] 
/Users/roman/projects/apache/bval-trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidation.java:[141,8] 
error: reference to validate is ambiguous
[ERROR]
[ERROR] L extends ValidationListener declared in method 
<L>validate(ValidationContext<L>)
[ERROR] 
/Users/roman/projects/apache/bval-trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidation.java:[180,35] 
error: reference to validate is ambiguous
[ERROR]
[ERROR] L extends ValidationListener declared in method 
<L>validate(ValidationContext<L>)
[ERROR] 
/Users/roman/projects/apache/bval-trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/ConstraintValidation.java:[197,24] 
error: reference to validate is ambiguous
[ERROR]
[ERROR] L extends ValidationListener declared in method 
<L>validate(ValidationContext<L>)
[ERROR] 
/Users/roman/projects/apache/bval-trunk/bval-jsr303/src/main/java/org/apache/bval/jsr303/extensions/MethodValidatorImpl.java:[209,26] 
error: reference to validate is ambiguous

Am 06.12.14 13:12, schrieb Daniel Cunha:
> I try see something here.
>
> But I have a problem.. my laptop not build bval.
> The build stop in Building Apache BVal :: bval-jsr 1.1.0-alpha-SNAPSHOT
>
> Linux 3.13.0 32bits
> 4GB ram
> JDK 1.8.0_25
>
> On Sat, Dec 6, 2014 at 8:08 AM, Romain Manni-Bucau <rm...@gmail.com>
> 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:  <mb...@apache.org>
>> 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: commits@bval.apache.org
>>
>>
>> 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);
>> -    }
>>   }
>>
>
>


Re: 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...

Posted by Daniel Cunha <da...@gmail.com>.
I try see something here.

But I have a problem.. my laptop not build bval.
The build stop in Building Apache BVal :: bval-jsr 1.1.0-alpha-SNAPSHOT

Linux 3.13.0 32bits
4GB ram
JDK 1.8.0_25

On Sat, Dec 6, 2014 at 8:08 AM, Romain Manni-Bucau <rm...@gmail.com>
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:  <mb...@apache.org>
> 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: commits@bval.apache.org
>
>
> 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);
> -    }
>  }
>



-- 
Daniel Cunha (soro) <http://www.cejug.net>
Blog: http://www.danielsoro.com.br
Twitter: https://twitter.com/dvlc_
GitHub: https://github.com/danielsoro
LinkedIn:  http://www.linkedin.com/in/danielvlcunha

Fwd: 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...

Posted by Romain Manni-Bucau <rm...@gmail.com>.
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:  <mb...@apache.org>
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: commits@bval.apache.org


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);
-    }
 }