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: <mben...@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: comm...@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);
- }
}