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