[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