You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by si...@apache.org on 2010/10/28 23:33:02 UTC
svn commit: r1028500 -
/commons/proper/digester/trunk/src/main/java/org/apache/commons/digester/annotations/DigesterLoader.java
Author: simonetripodi
Date: Thu Oct 28 21:33:01 2010
New Revision: 1028500
URL: http://svn.apache.org/viewvc?rev=1028500&view=rev
Log:
declared fields and methods extracted with AccessController.doPrivileged() if possible
Modified:
commons/proper/digester/trunk/src/main/java/org/apache/commons/digester/annotations/DigesterLoader.java
Modified: commons/proper/digester/trunk/src/main/java/org/apache/commons/digester/annotations/DigesterLoader.java
URL: http://svn.apache.org/viewvc/commons/proper/digester/trunk/src/main/java/org/apache/commons/digester/annotations/DigesterLoader.java?rev=1028500&r1=1028499&r2=1028500&view=diff
==============================================================================
--- commons/proper/digester/trunk/src/main/java/org/apache/commons/digester/annotations/DigesterLoader.java (original)
+++ commons/proper/digester/trunk/src/main/java/org/apache/commons/digester/annotations/DigesterLoader.java Thu Oct 28 21:33:01 2010
@@ -21,11 +21,15 @@ import java.lang.annotation.Annotation;
import java.lang.reflect.AnnotatedElement;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
import org.apache.commons.digester.Digester;
import org.apache.commons.digester.Rule;
import org.apache.commons.digester.RuleSet;
import org.apache.commons.digester.annotations.handlers.DefaultLoaderHandler;
+import org.apache.commons.digester.annotations.internal.GetDeclaredFieldsPrivilegedAction;
+import org.apache.commons.digester.annotations.internal.GetDeclaredMethodsPrivilegedAction;
import org.apache.commons.digester.annotations.internal.RuleSetCache;
import org.apache.commons.digester.annotations.reflect.MethodArgument;
import org.apache.commons.digester.annotations.spi.AnnotationRuleProviderFactory;
@@ -142,12 +146,12 @@ public final class DigesterLoader {
handle(target, ruleSet);
// class fields
- for (Field field : target.getDeclaredFields()) {
+ for (Field field : run(new GetDeclaredFieldsPrivilegedAction(target))) {
handle(field, ruleSet);
}
// class methods
- for (Method method : target.getDeclaredMethods()) {
+ for (Method method : run(new GetDeclaredMethodsPrivilegedAction(target))) {
handle(method, ruleSet);
// method args
@@ -218,4 +222,18 @@ public final class DigesterLoader {
}
}
+ /**
+ * Perform action with AccessController.doPrivileged() if possible.
+ *
+ * @param action - the action to run
+ * @return result of running the action
+ */
+ private static <T> T run(PrivilegedAction<T> action) {
+ if (System.getSecurityManager() != null) {
+ return AccessController.doPrivileged(action);
+ } else {
+ return action.run();
+ }
+ }
+
}