[jboss-cvs] JBossAS SVN: r59391 - in projects/aop/trunk/aop/src: main/org/jboss/aop/annotation main/org/jboss/aop/reflection test/org/jboss/test/aop/bridgemethodnotwoven test/org/jboss/test/aop/jdk15base test/org/jboss/test/aop/regression/jbaop316annotationsinwrapperonly

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Fri Jan 5 18:18:52 EST 2007


Author: kabir.khan at jboss.com
Date: 2007-01-05 18:18:44 -0500 (Fri, 05 Jan 2007)
New Revision: 59391

Modified:
   projects/aop/trunk/aop/src/main/org/jboss/aop/annotation/AnnotationElement.java
   projects/aop/trunk/aop/src/main/org/jboss/aop/reflection/ReflectionAspect.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/bridgemethodnotwoven/BridgeMethodTestCase.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/jdk15base/AOPTester.java
   projects/aop/trunk/aop/src/test/org/jboss/test/aop/regression/jbaop316annotationsinwrapperonly/AnnotationsInWrapperMethodOnlyTestCase.java
Log:
Add privileged blocks for failing tests - more recent versions of JDK 5 seem to have stricter security checks

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/annotation/AnnotationElement.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/annotation/AnnotationElement.java	2007-01-05 22:17:58 UTC (rev 59390)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/annotation/AnnotationElement.java	2007-01-05 23:18:44 UTC (rev 59391)
@@ -21,10 +21,13 @@
   */
 package org.jboss.aop.annotation;
 
-import java.lang.annotation.Annotation;
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 
 /**
  * Bridge/portability class for resolving annotations in JDK 1.4 and JDK1.5
@@ -46,7 +49,14 @@
     */
    public static Object getVisibleAnnotation(Method method, Class annotation)
    {
-      return method.getAnnotation(annotation);
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.getVisibleAnnotation(method, annotation);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.getVisibleAnnotation(method, annotation);
+      }
    }
 
    /**
@@ -59,7 +69,14 @@
     */
    public static Object getVisibleAnnotation(Constructor con, Class annotation)
    {
-      return con.getAnnotation(annotation);
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.getVisibleAnnotation(con, annotation);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.getVisibleAnnotation(con, annotation);
+      }
    }
 
    /**
@@ -72,7 +89,14 @@
     */
    public static Object getVisibleAnnotation(Field field, Class annotation)
    {
-      return field.getAnnotation(annotation);
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.getVisibleAnnotation(field, annotation);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.getVisibleAnnotation(field, annotation);
+      }
    }
 
    /**
@@ -85,46 +109,359 @@
     */
    public static Object getVisibleAnnotation(Class clazz, Class annotation)
    {
-      return clazz.getAnnotation(annotation);
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.getVisibleAnnotation(clazz, annotation);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.getVisibleAnnotation(clazz, annotation);
+      }
    }
 
    public static boolean isVisibleAnnotationPresent(Class clazz, Class annotation)
    {
-      return clazz.isAnnotationPresent(annotation);
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.isVisibleAnnotationPresent(clazz, annotation);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.isVisibleAnnotationPresent(clazz, annotation);
+      }
    }
 
    public static boolean isVisibleAnnotationPresent(Method m, Class annotation)
    {
-      return m.isAnnotationPresent(annotation);
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.isVisibleAnnotationPresent(m, annotation);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.isVisibleAnnotationPresent(m, annotation);
+      }
    }
 
    public static boolean isVisibleAnnotationPresent(Field f, Class annotation)
    {
-      return f.isAnnotationPresent(annotation);
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.isVisibleAnnotationPresent(f, annotation);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.isVisibleAnnotationPresent(f, annotation);
+      }
    }
 
    public static boolean isVisibleAnnotationPresent(Constructor con, Class annotation)
    {
-      return con.isAnnotationPresent(annotation);
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.isVisibleAnnotationPresent(con, annotation);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.isVisibleAnnotationPresent(con, annotation);
+      }
    }
 
    public static Object[] getVisibleAnnotations(Class clazz) throws Exception
    {
-      return clazz.getAnnotations();
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.getVisibleAnnotations(clazz);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.getVisibleAnnotations(clazz);
+      }
    }
 
    public static Object[] getVisibleAnnotations(Method m) throws Exception
    {
-      return m.getAnnotations();
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.getVisibleAnnotations(m);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.getVisibleAnnotations(m);
+      }
    }
    
    public static Object[] getVisibleAnnotations(Field f) throws Exception
    {
-      return f.getAnnotations();
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.getVisibleAnnotations(f);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.getVisibleAnnotations(f);
+      }
    }
    
    public static Object[] getVisibleAnnotations(Constructor c) throws Exception
    {
-      return c.getAnnotations();
+      if (System.getSecurityManager() == null)
+      {
+         return AnnotationElementAction.NON_PRIVILEGED.getVisibleAnnotations(c);
+      }
+      else
+      {
+         return AnnotationElementAction.PRIVILEGED.getVisibleAnnotations(c);
+      }
    }
+   
+   
+   private interface AnnotationElementAction
+   {
+      Object getVisibleAnnotation(Method method, Class annotation);
+
+      Object getVisibleAnnotation(Constructor con, Class annotation);
+
+      Object getVisibleAnnotation(Field field, Class annotation);
+
+      Object getVisibleAnnotation(Class clazz, Class annotation);
+
+      boolean isVisibleAnnotationPresent(Class clazz, Class annotation);
+
+      boolean isVisibleAnnotationPresent(Method m, Class annotation);
+
+      boolean isVisibleAnnotationPresent(Field f, Class annotation);
+
+      boolean isVisibleAnnotationPresent(Constructor con, Class annotation);
+
+      Object[] getVisibleAnnotations(Class clazz) throws Exception;
+
+      Object[] getVisibleAnnotations(Method m) throws Exception;
+      
+      Object[] getVisibleAnnotations(Field f) throws Exception;
+      
+      Object[] getVisibleAnnotations(Constructor c) throws Exception;
+      
+      AnnotationElementAction NON_PRIVILEGED = new AnnotationElementAction()
+      {
+         public Object getVisibleAnnotation(Method method, Class annotation)
+         {
+            return method.getAnnotation(annotation);
+         }
+
+         public Object getVisibleAnnotation(Constructor con, Class annotation)
+         {
+            return con.getAnnotation(annotation);
+         }
+
+         public Object getVisibleAnnotation(Field field, Class annotation)
+         {
+            return field.getAnnotation(annotation);
+         }
+
+         public Object getVisibleAnnotation(Class clazz, Class annotation)
+         {
+            return clazz.getAnnotation(annotation);
+         }
+
+         public boolean isVisibleAnnotationPresent(Class clazz, Class annotation)
+         {
+            return clazz.isAnnotationPresent(annotation);
+         }
+
+         public boolean isVisibleAnnotationPresent(Method m, Class annotation)
+         {
+            return m.isAnnotationPresent(annotation);
+         }
+
+         public boolean isVisibleAnnotationPresent(Field f, Class annotation)
+         {
+            return f.isAnnotationPresent(annotation);
+         }
+
+         public boolean isVisibleAnnotationPresent(Constructor con, Class annotation)
+         {
+            return con.isAnnotationPresent(annotation);
+         }
+
+         public Object[] getVisibleAnnotations(Class clazz) throws Exception
+         {
+            return clazz.getAnnotations();
+         }
+
+         public Object[] getVisibleAnnotations(Method m) throws Exception
+         {
+            return m.getAnnotations();
+         }
+         
+         public Object[] getVisibleAnnotations(Field f) throws Exception
+         {
+            return f.getAnnotations();
+         }
+         
+         public Object[] getVisibleAnnotations(Constructor c) throws Exception
+         {
+            return c.getAnnotations();
+         }
+      };
+      
+
+      AnnotationElementAction PRIVILEGED = new AnnotationElementAction()
+      {
+         public Object getVisibleAnnotation(final Method method, final Class annotation)
+         {
+            return AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return method.getAnnotation(annotation);
+               }
+            });
+         }
+
+         public Object getVisibleAnnotation(final Constructor con, final Class annotation)
+         {
+            return AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return con.getAnnotation(annotation);
+               }
+            });
+         }
+
+         public Object getVisibleAnnotation(final Field field, final Class annotation)
+         {
+            return AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return field.getAnnotation(annotation);
+               }
+            });
+         }
+
+         public Object getVisibleAnnotation(final Class clazz, final Class annotation)
+         {
+            return AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return clazz.getAnnotation(annotation);
+               }
+            });
+         }
+
+         public boolean isVisibleAnnotationPresent(final Class clazz, final Class annotation)
+         {
+            Boolean present = (Boolean)AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return clazz.isAnnotationPresent(annotation) ? Boolean.TRUE : Boolean.FALSE;
+               }
+            });
+            
+            return present.booleanValue();
+         }
+
+         public boolean isVisibleAnnotationPresent(final Method m, final Class annotation)
+         {
+            Boolean present = (Boolean)AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return m.isAnnotationPresent(annotation) ? Boolean.TRUE : Boolean.FALSE;
+               }
+            });
+            
+            return present.booleanValue();
+         }
+
+         public boolean isVisibleAnnotationPresent(final Field f, final Class annotation)
+         {
+            Boolean present = (Boolean)AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return f.isAnnotationPresent(annotation) ? Boolean.TRUE : Boolean.FALSE;
+               }
+            });
+            return present;
+         }
+
+         public boolean isVisibleAnnotationPresent(final Constructor con, final Class annotation)
+         {
+            Boolean present = (Boolean)AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return con.isAnnotationPresent(annotation) ? Boolean.TRUE : Boolean.FALSE;
+               }
+            });
+            return present;
+         }
+
+         public Object[] getVisibleAnnotations(final Class clazz) throws Exception 
+         {
+            try
+            {
+               return (Object[])AccessController.doPrivileged(new PrivilegedExceptionAction()
+               {
+                  public Object run() throws Exception
+                  {
+                     return clazz.getAnnotations();
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               throw e.getException();
+            }
+         }
+
+         public Object[] getVisibleAnnotations(final Method m) throws Exception 
+         {
+            try
+            {
+               return (Object[])AccessController.doPrivileged(new PrivilegedExceptionAction(){
+                  public Object run() throws Exception
+                  {
+                     return m.getAnnotations();
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               throw e.getException();
+            }
+         }
+         
+         public Object[] getVisibleAnnotations(final Field f) throws Exception
+         {
+            try
+            {
+               return (Object[])AccessController.doPrivileged(new PrivilegedExceptionAction(){
+                  public Object run() throws Exception
+                  {
+                     return f.getAnnotations();
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               throw e.getException();
+            }
+         }
+         
+         public Object[] getVisibleAnnotations(final Constructor c) throws Exception
+         {
+            try
+            {
+               return (Object[])AccessController.doPrivileged(new PrivilegedExceptionAction(){
+                  public Object run() throws Exception
+                  {
+                     return c.getAnnotations();
+                  }
+               });
+            }
+            catch (PrivilegedActionException e)
+            {
+               throw e.getException();
+            }
+         }
+      };
+   }
 }

Modified: projects/aop/trunk/aop/src/main/org/jboss/aop/reflection/ReflectionAspect.java
===================================================================
--- projects/aop/trunk/aop/src/main/org/jboss/aop/reflection/ReflectionAspect.java	2007-01-05 22:17:58 UTC (rev 59390)
+++ projects/aop/trunk/aop/src/main/org/jboss/aop/reflection/ReflectionAspect.java	2007-01-05 23:18:44 UTC (rev 59391)
@@ -42,6 +42,10 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Modifier;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -962,7 +966,10 @@
 
          if (advisor == null)
          {
-            foundMethods = clazz.getDeclaredMethods();
+//            foundMethods = GETclazz.getDeclaredMethods();
+            foundMethods = System.getSecurityManager() == null ? 
+                  GetDeclaredMethodsAction.NON_PRIVILEGED.getDeclaredMethods(clazz) :
+                     GetDeclaredMethodsAction.PRIVILEGED.getDeclaredMethods(clazz);
          }
          else
          {
@@ -1463,4 +1470,32 @@
          return false;
       }
    }
+   
+   private interface GetDeclaredMethodsAction
+   {
+      Method[] getDeclaredMethods(Class clazz);
+
+      GetDeclaredMethodsAction NON_PRIVILEGED = new GetDeclaredMethodsAction()
+      {
+         public Method[] getDeclaredMethods(Class clazz)
+         {
+            return clazz.getDeclaredMethods();
+         }
+      };
+      
+
+      GetDeclaredMethodsAction PRIVILEGED = new GetDeclaredMethodsAction()
+      {
+         public Method[] getDeclaredMethods(final Class clazz)
+         {
+            return (Method[])AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return clazz.getDeclaredMethods();
+               }
+            });
+         }
+      };
+   }
+   
 }

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/bridgemethodnotwoven/BridgeMethodTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/bridgemethodnotwoven/BridgeMethodTestCase.java	2007-01-05 22:17:58 UTC (rev 59390)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/bridgemethodnotwoven/BridgeMethodTestCase.java	2007-01-05 23:18:44 UTC (rev 59391)
@@ -21,11 +21,14 @@
   */
 package org.jboss.test.aop.bridgemethodnotwoven;
 
+import java.util.Properties;
+
 import junit.framework.Test;
 import junit.framework.TestSuite;
 import junit.textui.TestRunner;
 
 import org.jboss.aop.proxy.ClassProxyFactory;
+import org.jboss.test.aop.AOPTestDelegate;
 import org.jboss.test.aop.AOPTestWithSetup;
 import org.jboss.test.aop.bridgemethod.POJO;
 import org.jboss.test.aop.bridgemethod.SubPOJO;
@@ -83,7 +86,9 @@
    public void testGenericMethod()
    {
       //doesnt work with jbossretro atm...
-      if(System.getProperty("java.vm.version").startsWith("1.5"))
+      AOPTestDelegate delegate = (AOPTestDelegate)getDelegate();
+      Properties properties = delegate.getSystemProperties();
+      if(((String)properties.get("java.vm.version")).startsWith("1.5"))
       {
          try {
             SuperPOJO superPojo = (SuperPOJO) ClassProxyFactory.newInstance(SubPOJO.class);

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/jdk15base/AOPTester.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/jdk15base/AOPTester.java	2007-01-05 22:17:58 UTC (rev 59390)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/jdk15base/AOPTester.java	2007-01-05 23:18:44 UTC (rev 59391)
@@ -25,6 +25,7 @@
 import junit.framework.TestSuite;
 import junit.textui.TestRunner;
 
+import org.jboss.aop.annotation.AnnotationElement;
 import org.jboss.aop.annotation.factory.duplicate.AnnotationCreator;
 import org.jboss.test.aop.AOPTestWithSetup;
 
@@ -93,7 +94,7 @@
       AnnotatedPOJO pojo = new AnnotatedPOJO();
       if (!SimpleInterceptor.intercepted) throw new RuntimeException("failed to intercept tagged constructor");
 
-      complex c = (complex) AnnotatedPOJO.class.getAnnotation(complex.class);
+      complex c = (complex)AnnotationElement.getVisibleAnnotation(AnnotatedPOJO.class, complex.class);
       printComplex(c);
 
       SimpleInterceptor.intercepted = false;

Modified: projects/aop/trunk/aop/src/test/org/jboss/test/aop/regression/jbaop316annotationsinwrapperonly/AnnotationsInWrapperMethodOnlyTestCase.java
===================================================================
--- projects/aop/trunk/aop/src/test/org/jboss/test/aop/regression/jbaop316annotationsinwrapperonly/AnnotationsInWrapperMethodOnlyTestCase.java	2007-01-05 22:17:58 UTC (rev 59390)
+++ projects/aop/trunk/aop/src/test/org/jboss/test/aop/regression/jbaop316annotationsinwrapperonly/AnnotationsInWrapperMethodOnlyTestCase.java	2007-01-05 23:18:44 UTC (rev 59391)
@@ -23,9 +23,13 @@
 
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Method;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
 import java.util.ArrayList;
 
 import org.jboss.aop.Advised;
+import org.jboss.aop.annotation.AnnotationElement;
+import org.jboss.aop.annotation.PortableAnnotationElement;
 import org.jboss.test.aop.AOPTestWithSetup;
 
 import junit.framework.Test;
@@ -66,7 +70,7 @@
       ArrayList hasParameterAnnotation = new ArrayList();
       for (int i = 0 ; i < methods.length ; i++)
       {
-         if (methods[i].isAnnotationPresent(TestAnnotation.class))
+         if (PortableAnnotationElement.isAnyAnnotationPresent(methods[i], TestAnnotation.class))
          {
             hasAnnotation.add(methods[i].getName());
          }
@@ -90,4 +94,32 @@
       assertTrue("Class was not woven", Advised.class.isAssignableFrom(POJO.class));
    }
 
+   private interface IsAnnotationPresentAction
+   {
+      boolean isAnnotationPresent(Method m, Class clazz);
+
+      IsAnnotationPresentAction NON_PRIVILEGED = new IsAnnotationPresentAction()
+      {
+         public boolean isAnnotationPresent(Method m, Class clazz)
+         {
+            return m.isAnnotationPresent(clazz);
+         }
+      };
+      
+
+      IsAnnotationPresentAction PRIVILEGED = new IsAnnotationPresentAction()
+      {
+         public boolean isAnnotationPresent(final Method m, final Class clazz)
+         {
+            Boolean present = (Boolean)AccessController.doPrivileged(new PrivilegedAction(){
+               public Object run()
+               {
+                  return m.isAnnotationPresent(clazz) ? Boolean.TRUE : Boolean.FALSE;
+               }
+            });
+            return present.booleanValue();
+         }
+      };
+   }
+      
 }




More information about the jboss-cvs-commits mailing list