[jboss-cvs] JBossAS SVN: r102974 - in projects/jboss-reflect/trunk: src/main and 13 other directories.

jboss-cvs-commits at lists.jboss.org jboss-cvs-commits at lists.jboss.org
Thu Mar 25 14:27:57 EDT 2010


Author: kabir.khan at jboss.com
Date: 2010-03-25 14:27:56 -0400 (Thu, 25 Mar 2010)
New Revision: 102974

Added:
   projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/SecurityActions.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistAccessController.java
   projects/jboss-reflect/trunk/src/main/resources/
   projects/jboss-reflect/trunk/src/main/resources/org/
   projects/jboss-reflect/trunk/src/main/resources/org/jboss/
   projects/jboss-reflect/trunk/src/main/resources/org/jboss/test/
   projects/jboss-reflect/trunk/src/main/resources/org/jboss/test/classinfo/
   projects/jboss-reflect/trunk/src/main/resources/org/jboss/test/classinfo/test/
   projects/jboss-reflect/trunk/src/main/resources/org/jboss/test/classinfo/test/IntrospectionEnumUnitTestCase.properties
Modified:
   projects/jboss-reflect/trunk/.classpath
   projects/jboss-reflect/trunk/pom.xml
   projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/AbstractBeanInfoFactory.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/AnnotationValueFactory.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/SecurityActions.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistConstructorInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistFieldInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistHelper.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistMethodInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistParameterizedClassInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistReflectionFactory.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfoFactoryImpl.java
   projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/SecurityActions.java
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/ContainerTest.java
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoTestSuite.java
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoUtilTestCase.java
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/AbstractClassInfoTest.java
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/ByteArrayUnitTestCase.java
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistHelperTestCase.java
   projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistUtilTestCase.java
Log:
[JBREFLECT-109] Fixes and test with a security manager present

Modified: projects/jboss-reflect/trunk/.classpath
===================================================================
--- projects/jboss-reflect/trunk/.classpath	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/.classpath	2010-03-25 18:27:56 UTC (rev 102974)
@@ -1,6 +1,7 @@
 <classpath>
   <classpathentry kind="src" path="src/test/java" output="target/test-classes" including="**/*.java"/>
   <classpathentry kind="src" path="src/main/java" including="**/*.java"/>
+  <classpathentry kind="src" path="src/main/resources" excluding="**/*.java"/>
   <classpathentry kind="output" path="target/classes"/>
   <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
   <classpathentry kind="con" path="org.maven.ide.eclipse.MAVEN2_CLASSPATH_CONTAINER"/>

Modified: projects/jboss-reflect/trunk/pom.xml
===================================================================
--- projects/jboss-reflect/trunk/pom.xml	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/pom.xml	2010-03-25 18:27:56 UTC (rev 102974)
@@ -40,12 +40,6 @@
           <includes>
             <include>org/jboss/test/**/*TestCase.java</include>
           </includes>
-          <excludes>
-            <!--  Enable once JBREFLECT-2 is fixed -->
-            <exclude>**/JavassistBeanInfoUtilTestCase.java</exclude>
-            <exclude>**/JavassistFieldAccessRestrictionTestCase.java</exclude>
-            <exclude>**/JavassistMethodAccessRestrictionTestCase.java</exclude>
-          </excludes>
           <useSystemClassLoader>true</useSystemClassLoader>
         </configuration>
       </plugin>

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/AbstractBeanInfoFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/AbstractBeanInfoFactory.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/AbstractBeanInfoFactory.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -124,7 +124,7 @@
       return getBeanInfo(classAdapter, BeanAccessMode.STANDARD);
    }
 
-   public BeanInfo getBeanInfo(ClassAdapter classAdapter, BeanAccessMode accessMode)
+   public BeanInfo getBeanInfo(final ClassAdapter classAdapter, BeanAccessMode accessMode)
    {
       if (classAdapter == null)
          throw new IllegalArgumentException("Null class adapter.");
@@ -133,7 +133,7 @@
 
       synchronized (cache)
       {
-         ClassLoader cl = classAdapter.getClassLoader();
+         ClassLoader cl = SecurityActions.getClassLoader(classAdapter);         
          ClassInfo classInfo = classAdapter.getClassInfo();
          Map<ClassInfo, Map<BeanAccessMode, BeanInfo>> classInfoMap = cache.get(cl);
          Map<BeanAccessMode, BeanInfo> modeMap = null;

Added: projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/SecurityActions.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/SecurityActions.java	                        (rev 0)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/beans/info/plugins/SecurityActions.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -0,0 +1,49 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.beans.info.plugins;
+
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+
+import org.jboss.classadapter.spi.ClassAdapter;
+
+/**
+ * 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class SecurityActions
+{
+   static ClassLoader getClassLoader(final ClassAdapter classAdapter)
+   {
+      if (System.getSecurityManager() == null)
+         return classAdapter.getClassLoader();
+      
+      return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+      {
+         public ClassLoader run()
+         {
+            return classAdapter.getClassLoader();
+         }
+      });
+   }
+}

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/AnnotationValueFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/AnnotationValueFactory.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/AnnotationValueFactory.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -114,7 +114,7 @@
          {
             try
             {
-               Object val = methods[j].invoke(annotation, null);
+               Object val = SecurityActions.invokeMethod(methods[j], annotation, null);
                TypeInfo typeInfo = methods[j].getReturnType();
                Value value = createValue(annotationHelper, typeInfo, val);
                attributes.put(methods[j].getName(), value);

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/SecurityActions.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/SecurityActions.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/SecurityActions.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -23,7 +23,11 @@
 
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 
+import org.jboss.reflect.spi.MethodInfo;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -67,4 +71,39 @@
          return GetClassLoaderAction.PRIVILEGED.getClassLoader(clazz);
       }
    }
+   
+   static Object invokeMethod(final MethodInfo m, final Object o, final Object...args) throws Throwable
+   {
+      if (System.getSecurityManager() == null)
+         return m.invoke(o, args);
+      else
+      {
+         try
+         {
+            return AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
+            {
+               public Object run() throws Exception
+               {
+                  try
+                  {
+                     return m.invoke(o, args);
+                  }
+                  catch(Exception e)
+                  {
+                     throw e;
+                  }
+                  catch (Throwable e)
+                  {
+                     // AutoGenerated
+                     throw new RuntimeException(e);
+                  }
+               }
+            });
+         }
+         catch (PrivilegedActionException e)
+         {
+            throw e.getException();
+         }
+      }
+   }
 }

Added: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistAccessController.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistAccessController.java	                        (rev 0)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistAccessController.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -0,0 +1,41 @@
+/*
+* JBoss, Home of Professional Open Source.
+* Copyright 2006, Red Hat Middleware LLC, and individual contributors
+* as indicated by the @author tags. See the copyright.txt file in the
+* distribution for a full listing of individual contributors. 
+*
+* This is free software; you can redistribute it and/or modify it
+* under the terms of the GNU Lesser General Public License as
+* published by the Free Software Foundation; either version 2.1 of
+* the License, or (at your option) any later version.
+*
+* This software is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+* Lesser General Public License for more details.
+*
+* You should have received a copy of the GNU Lesser General Public
+* License along with this software; if not, write to the Free
+* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
+* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
+*/ 
+package org.jboss.reflect.plugins.javassist;
+
+import java.lang.reflect.ReflectPermission;
+import java.security.AccessController;
+
+import org.jboss.reflect.spi.MemberInfo;
+
+/**
+ * Utility to 
+ * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
+ * @version $Revision: 1.1 $
+ */
+public class JavassistAccessController
+{
+   public static void checkAccess(MemberInfo info)
+   {
+       if (!info.isPublic() && System.getSecurityManager() != null)
+          AccessController.checkPermission(new ReflectPermission("suppressAccessChecks"));
+   }
+}

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistConstructorInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistConstructorInfo.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistConstructorInfo.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -144,6 +144,9 @@
    {
       if (constructor == null)
          constructor = reflectionFactory.createConstructor(ctConstructor);
+      
+      JavassistAccessController.checkAccess(this);
+      
       return constructor.newInstance(args);
    }
 

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistFieldInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistFieldInfo.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistFieldInfo.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -23,6 +23,12 @@
 
 import java.lang.reflect.Modifier;
 
+import javassist.CtClass;
+import javassist.CtField;
+import javassist.NotFoundException;
+import javassist.bytecode.SignatureAttribute.ClassSignature;
+import javassist.bytecode.SignatureAttribute.ObjectType;
+
 import org.jboss.reflect.plugins.AnnotationHelper;
 import org.jboss.reflect.spi.AnnotationValue;
 import org.jboss.reflect.spi.ClassInfo;
@@ -32,12 +38,6 @@
 import org.jboss.reflect.spi.TypeInfo;
 import org.jboss.util.JBossStringBuilder;
 
-import javassist.CtClass;
-import javassist.CtField;
-import javassist.NotFoundException;
-import javassist.bytecode.SignatureAttribute.ClassSignature;
-import javassist.bytecode.SignatureAttribute.ObjectType;
-
 /**
  * FieldInfo that relies on Javassist to answer reflective queries and to access
  * the represented field.
@@ -125,7 +125,7 @@
          if (type != null)
          {
             ClassSignature sig = JavassistHelper.getClassSignature(ctField.getDeclaringClass());
-            return typeInfo.getFactory().getTypeInfo(typeInfo.getClassLoader(), type, JavassistTypeVariableSpy.createForField(sig));
+            return typeInfo.getFactory().getTypeInfo(typeInfo.getClassLoaderInternal(), type, JavassistTypeVariableSpy.createForField(sig));
          }
          
          CtClass clazz = ctField.getType();
@@ -142,6 +142,9 @@
    {
       if (field == null)
          field = reflectionFactory.createField(ctField);
+      
+      JavassistAccessController.checkAccess(this);
+      
       return field.get(target);
    }
 
@@ -149,6 +152,9 @@
    {
       if (field == null)
          field = reflectionFactory.createField(ctField);
+
+      JavassistAccessController.checkAccess(this);
+
       field.set(target, value);
       return null;
    }
@@ -218,5 +224,5 @@
    {
       ctField.setType(JavassistUtil.toCtClass(type));
       typeInfo.clearFieldCache();
-   }
+   }   
 }

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistHelper.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistHelper.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistHelper.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -225,12 +225,12 @@
     * @param typeInfo the javassist type info
     * @return the parameter types 
     */
-   public static TypeInfo[] createParameterTypes(CtBehavior behavior, MethodSignature sig, JavassistTypeInfo typeInfo)
+   public static TypeInfo[] createParameterTypes(final CtBehavior behavior, final MethodSignature sig, final JavassistTypeInfo typeInfo)
    {
       SignatureAttribute.Type[] types = sig.getParameterTypes();
       TypeInfo[] parameterTypes = new TypeInfo[types.length];
       for (int i = 0 ; i < types.length ; i++)
-         parameterTypes[i] = typeInfo.getFactory().getTypeInfo(typeInfo.getClassLoader(), types[i], JavassistTypeVariableSpy.createForBehavior(behavior, sig));
+         parameterTypes[i] = typeInfo.getFactory().getTypeInfo(typeInfo.getClassLoaderInternal(), types[i], JavassistTypeVariableSpy.createForBehavior(behavior, sig));
       return parameterTypes;
    }
    

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistMethodInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistMethodInfo.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistMethodInfo.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -148,7 +148,7 @@
          if (sig != null)
          {
             if (sig.getReturnType() instanceof BaseType == false)
-               return typeInfo.getFactory().getTypeInfo(typeInfo.getClassLoader(), sig.getReturnType(), JavassistTypeVariableSpy.createForBehavior(ctMethod, sig));
+               return typeInfo.getFactory().getTypeInfo(typeInfo.getClassLoaderInternal(), sig.getReturnType(), JavassistTypeVariableSpy.createForBehavior(ctMethod, sig));
          }
 
          CtClass clazz = ctMethod.getReturnType();
@@ -178,6 +178,9 @@
    {
       if (method == null)
          method = reflectionFactory.createMethod(ctMethod);
+      
+      JavassistAccessController.checkAccess(this);
+      
       return method.invoke(target, args);
    }
 

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistParameterizedClassInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistParameterizedClassInfo.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistParameterizedClassInfo.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -99,10 +99,15 @@
    {
       if (typeArgumentInfos == ClassInfoImpl.UNKNOWN_TYPES && typeArguments != null && typeArguments.length > 0)
       {
+         if (delegate instanceof JavassistTypeInfo == false)
+            throw new IllegalStateException("Delegate is not a javassist one");
+
+         ClassLoader cl = ((JavassistTypeInfo)delegate).getClassLoaderInternal();
          TypeInfo[] infos = new TypeInfo[typeArguments.length];
+         
          for (int i = 0 ; i < typeArguments.length ; i++)
          {
-            infos[i] = factory.createTypeInfoForTypeArgument(typeArguments[i], delegate.getClassLoader(), spy);
+            infos[i] = factory.createTypeInfoForTypeArgument(typeArguments[i], cl, spy);
          }
          typeArgumentInfos = infos;
       }

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistReflectionFactory.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistReflectionFactory.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistReflectionFactory.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -51,7 +51,7 @@
    {
       try
       {
-         MAGIC_ACCESSOR_IMPL = Class.forName("sun.reflect.MagicAccessorImpl");
+         MAGIC_ACCESSOR_IMPL = SecurityActions.classForName("sun.reflect.MagicAccessorImpl");
       }
       catch (ClassNotFoundException e)
       {

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfo.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -27,7 +27,6 @@
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -204,7 +203,7 @@
    public Class<? extends Object> getType()
    {
       if(clazz == null)
-         clazz = JavassistUtil.ctClassToClass(ctClass);
+         clazz = SecurityActions.ctClassToClass(ctClass);
       
       return clazz;
    }
@@ -217,9 +216,14 @@
       if (sm != null)
          sm.checkPermission(GET_CLASSLOADER_PERMISSION);
       
+      return getClassLoaderInternal();
+   }
+
+   ClassLoader getClassLoaderInternal()
+   {
       return JavassistUtil.getClassLoader(ctClass);
    }
-
+   
    public ClassInfo getSuperclass()
    {
       if (isInterface())
@@ -246,7 +250,7 @@
          if (classSig != null)
          {
             ClassType type = classSig.getSuperClass();
-            genericSuperClass = (ClassInfo)factory.getTypeInfo(getClassLoader(), type, JavassistTypeVariableSpy.createForClass(classSig));
+            genericSuperClass = (ClassInfo)factory.getTypeInfo(getClassLoaderInternal(), type, JavassistTypeVariableSpy.createForClass(classSig));
          }
          else
          {
@@ -288,7 +292,7 @@
             ClassType[] types = classSig.getInterfaces();
             for (int i = 0 ; i < types.length ; i++)
             {
-               ClassInfo info = (ClassInfo)factory.getTypeInfo(getClassLoader(), types[i], JavassistTypeVariableSpy.createForClass(classSig));
+               ClassInfo info = (ClassInfo)factory.getTypeInfo(getClassLoaderInternal(), types[i], JavassistTypeVariableSpy.createForClass(classSig));
                if (info instanceof InterfaceInfo == false)
                   throw new IllegalStateException(info + " is not an InterfaceInfo");
                infos[i] = (InterfaceInfo)info; 
@@ -864,7 +868,7 @@
          CtClass collection = ctClass.getClassPool().get(target);
          ClassType type = JavassistHelper.determineType(ctClass, collection, parameter);
          ClassSignature sig = JavassistHelper.getClassSignature(ctClass);
-         return factory.getTypeInfo(getClassLoader(), type, JavassistTypeVariableSpy.createForClass(sig));
+         return factory.getTypeInfo(getClassLoaderInternal(), type, JavassistTypeVariableSpy.createForClass(sig));
       }
       catch (Exception e1)
       {

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfoFactoryImpl.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfoFactoryImpl.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/JavassistTypeInfoFactoryImpl.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -301,7 +301,7 @@
    {
       try
       {
-         ClassLoader cl = clazz.getClassLoader();
+         ClassLoader cl = SecurityActions.getClassLoader(clazz);
          if(cl == null)
             cl = SecurityActions.getContextClassLoader();
          return get(clazz.getName(), cl, clazz);

Modified: projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/SecurityActions.java
===================================================================
--- projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/SecurityActions.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/main/java/org/jboss/reflect/plugins/javassist/SecurityActions.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -25,7 +25,11 @@
 import java.lang.reflect.Method;
 import java.security.AccessController;
 import java.security.PrivilegedAction;
+import java.security.PrivilegedActionException;
+import java.security.PrivilegedExceptionAction;
 
+import javassist.CtClass;
+
 /**
  * 
  * @author <a href="kabir.khan at jboss.com">Kabir Khan</a>
@@ -52,6 +56,22 @@
 
    }
 
+   static ClassLoader getClassLoader(final Class<?> clazz)
+   {
+      if (System.getSecurityManager() == null)
+         return clazz.getClassLoader();
+      else
+      {
+         return AccessController.doPrivileged(new PrivilegedAction<ClassLoader>()
+         {
+            public ClassLoader run()
+            {
+               return clazz.getClassLoader();
+            }
+         });
+      }
+   }
+
    static Constructor<?>[] getDeclaredConstructors(final Class<?> clazz)
    {
       if (System.getSecurityManager() == null)
@@ -83,4 +103,54 @@
          });
       }
    }
+   
+   static Class<?> classForName(final String name) throws ClassNotFoundException
+   {
+      if (System.getSecurityManager() == null)
+         return Class.forName(name);
+      else
+      {
+         try
+         {
+            return AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>()
+            {
+               public Class<?> run() throws Exception
+               {
+                  return Class.forName(name);
+               }
+            });
+         }
+         catch (PrivilegedActionException e)
+         {
+            if (e.getException() instanceof ClassNotFoundException)
+               throw (ClassNotFoundException)e.getException();
+            throw new RuntimeException(e.getException());
+         }
+      }
+   }
+
+   static Class<?> ctClassToClass(final CtClass ctClass)
+   {
+      if (System.getSecurityManager() == null)
+         return JavassistUtil.ctClassToClass(ctClass);
+      else
+      {
+         try
+         {
+            return AccessController.doPrivileged(new PrivilegedExceptionAction<Class<?>>()
+            {
+               public Class<?> run() throws Exception
+               {
+                  return JavassistUtil.ctClassToClass(ctClass);
+               }
+            });
+         }
+         catch (PrivilegedActionException e)
+         {
+            if (e.getException() instanceof RuntimeException)
+               throw (RuntimeException)e.getException();
+            throw new RuntimeException(e.getException());
+         }
+      }
+   }
 }

Added: projects/jboss-reflect/trunk/src/main/resources/org/jboss/test/classinfo/test/IntrospectionEnumUnitTestCase.properties
===================================================================
--- projects/jboss-reflect/trunk/src/main/resources/org/jboss/test/classinfo/test/IntrospectionEnumUnitTestCase.properties	                        (rev 0)
+++ projects/jboss-reflect/trunk/src/main/resources/org/jboss/test/classinfo/test/IntrospectionEnumUnitTestCase.properties	2010-03-25 18:27:56 UTC (rev 102974)
@@ -0,0 +1 @@
+test.Permission.0=java.lang.RuntimePermission, accessClassInPackage.sun.reflect.annotation
\ No newline at end of file

Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/ContainerTest.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/ContainerTest.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/ContainerTest.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -49,7 +49,7 @@
    public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
    {
       AbstractTestDelegate delegate = new AbstractTestDelegate(clazz);
-      //delegate.enableSecurity = true;
+      delegate.enableSecurity = true;
       return delegate;
    }
 }

Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoTestSuite.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoTestSuite.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoTestSuite.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -43,10 +43,15 @@
       TestSuite suite = new TestSuite("BeanInfo Tests");
 
       suite.addTest(BeanInfoUnitTestCase.suite());
+      suite.addTest(JavassistBeanInfoUnitTestCase.suite());
       suite.addTest(BeanInfoUtilTestCase.suite());
+      suite.addTest(JavassistBeanInfoUtilTestCase.suite());
       suite.addTest(BeanInfoCacheTestCase.suite());
+      suite.addTest(JavassistBeanInfoCacheTestCase.suite());
       suite.addTest(FieldAccessRestrictionTestCase.suite());
+      suite.addTest(JavassistFieldAccessRestrictionTestCase.suite());
       suite.addTest(MethodAccessRestrictionTestCase.suite());
+      suite.addTest(JavassistMethodAccessRestrictionTestCase.suite());
 
       return suite;
    }

Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoUtilTestCase.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoUtilTestCase.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/beaninfo/test/BeanInfoUtilTestCase.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -26,6 +26,7 @@
 import org.jboss.beans.info.spi.BeanAccessMode;
 import org.jboss.beans.info.spi.BeanInfo;
 import org.jboss.beans.info.spi.PropertyInfo;
+import org.jboss.test.AbstractTestDelegate;
 import org.jboss.test.beaninfo.support.NestedBean;
 import org.jboss.test.beaninfo.support.PrivateGetterNestedBean;
 import org.jboss.test.beaninfo.support.PrivateMixNestedBean;
@@ -62,6 +63,19 @@
       super(name);
    }
 
+   /**
+    * Default setup with security manager disabled
+    *
+    * @param clazz the class
+    * @return the delegate
+    * @throws Exception for any error
+    */
+   public static AbstractTestDelegate getDelegate(Class<?> clazz) throws Exception
+   {
+      AbstractTestDelegate delegate = new AbstractTestDelegate(clazz);
+      return delegate;
+   }
+
    protected <T extends SetGetHook<T>> void checkSimpleGet(Class<T> clazz, BeanAccessMode mode) throws Throwable
    {
       T parent = clazz.newInstance();

Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/AbstractClassInfoTest.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/AbstractClassInfoTest.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/AbstractClassInfoTest.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -27,6 +27,9 @@
 import java.lang.reflect.Field;
 import java.lang.reflect.Method;
 import java.lang.reflect.Type;
+import java.security.AccessController;
+import java.security.PrivilegedAction;
+import java.security.PrivilegedExceptionAction;
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -89,8 +92,15 @@
       // TODO JBREFLECT-9 fix the serialization
       if (isJavassistTestCase() == false)
       {
-         byte[] bytes = serialize(info);
-         Object deserialized = deserialize(bytes);
+         final byte[] bytes = serialize(info);
+         Object deserialized = AccessController.doPrivileged(new PrivilegedExceptionAction<Object>()
+         {
+            public Object run() throws Exception
+            {
+               return deserialize(bytes);
+            }
+         });
+          
          assertTrue("Not the same object: " + info + " != " + deserialized, info == deserialized);
       }
       
@@ -221,7 +231,13 @@
    {
       TypeInfoFactory factory = getTypeInfoFactory();
       Set<FieldInfo> expected = new HashSet<FieldInfo>();
-      for (Field field : clazz.getDeclaredFields())
+      
+      SecurityManager sm = suspendSecurity();
+      Field[] fields = clazz.getDeclaredFields();
+      if (sm != null)
+         resumeSecurity(sm);
+      
+      for (Field field : fields)
       {
          TypeInfo type = factory.getTypeInfo(field.getGenericType());
          FieldInfo f = new FieldInfoImpl(null, field.getName(), type, field.getModifiers(), classInfo);
@@ -265,7 +281,13 @@
    {
       TypeInfoFactory factory = getTypeInfoFactory();
       Set<MethodInfo> expected = new HashSet<MethodInfo>();
-      for (Method method : clazz.getDeclaredMethods())
+      
+      SecurityManager sm = suspendSecurity();
+      Method[] methods = clazz.getDeclaredMethods();
+      if (sm != null)
+         resumeSecurity(sm);
+      
+      for (Method method : methods)
       {
          TypeInfo returnType = factory.getTypeInfo(method.getReturnType());
          Class<?>[] paramClasses = method.getParameterTypes();
@@ -330,7 +352,13 @@
    {
       TypeInfoFactory factory = getTypeInfoFactory();
       Set<ConstructorInfo> expected = new HashSet<ConstructorInfo>();
-      for (Constructor<?> constructor : clazz.getDeclaredConstructors())
+      
+      SecurityManager sm = suspendSecurity();
+      Constructor<?>[] constructors = clazz.getDeclaredConstructors();
+      if (sm != null)
+         resumeSecurity(sm);
+      
+      for (Constructor<?> constructor : constructors)
       {
          Class<?>[] paramClasses = constructor.getParameterTypes();
          TypeInfo[] paramTypes = new TypeInfo[paramClasses.length];

Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/ByteArrayUnitTestCase.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/ByteArrayUnitTestCase.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/classinfo/test/ByteArrayUnitTestCase.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -61,7 +61,12 @@
    {
       byte[] x = {};
       Class<?>[] parameterTypes = {x.getClass(), int.class, int.class};
+      
+      SecurityManager sm = suspendSecurity();
       Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", parameterTypes);
+      if (sm != null)
+         resumeSecurity(sm);
+      
       assertNotNull(defineClass);
       Class<?>[] types = defineClass.getParameterTypes();
       TypeInfoFactory factory = getTypeInfoFactory();
@@ -77,7 +82,12 @@
    {
       byte[] x = {};
       Class<?>[] parameterTypes = {x.getClass(), int.class, int.class};
+      
+      SecurityManager sm = suspendSecurity();
       Method defineClass = ClassLoader.class.getDeclaredMethod("defineClass", parameterTypes);
+      if (sm != null)
+         resumeSecurity(sm);
+      
       assertNotNull(defineClass);
       Type[] types = defineClass.getGenericParameterTypes();
       TypeInfoFactory factory = getTypeInfoFactory();

Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistHelperTestCase.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistHelperTestCase.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistHelperTestCase.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -35,6 +35,7 @@
 import junit.framework.Test;
 
 import org.jboss.reflect.plugins.javassist.JavassistHelper;
+import org.jboss.test.AbstractTestDelegate;
 import org.jboss.test.ContainerTest;
 import org.jboss.test.plugins.javassist.support.Interface;
 import org.jboss.test.plugins.javassist.support.NumberChild;
@@ -125,7 +126,17 @@
       clazz.addInterface(loadCtClass(Interface.class));
       clazz.getClassFile().addAttribute(new SignatureAttribute(clazz.getClassFile().getConstPool(), "Ljava/lang/Object;Lorg/jboss/test/plugins/javassist/support/Interface<Ljava/lang/String;>;"));
       
+      AbstractTestDelegate delegate = getDelegate();
+      
+      SecurityManager sm = null;
+      if (delegate.enableSecurity)
+         sm = suspendSecurity();
+      
       Class<?> realClass = clazz.toClass();
+      
+      if (sm != null)
+         resumeSecurity(sm);
+      
       assertEquals(1, realClass.getGenericInterfaces().length);
       ParameterizedType type = assertInstanceOf(realClass.getGenericInterfaces()[0], ParameterizedType.class);
       assertEquals(1, type.getActualTypeArguments().length);

Modified: projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistUtilTestCase.java
===================================================================
--- projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistUtilTestCase.java	2010-03-25 17:34:07 UTC (rev 102973)
+++ projects/jboss-reflect/trunk/src/test/java/org/jboss/test/plugins/javassist/test/JavassistUtilTestCase.java	2010-03-25 18:27:56 UTC (rev 102974)
@@ -96,7 +96,15 @@
       {
          CtMethod foo = CtNewMethod.make("public void foo() { }", clazz);
          clazz.addMethod(foo);
+         
+         SecurityManager sm = null;
+         if (getDelegate().enableSecurity)
+            sm = suspendSecurity();
+         
          Class<?> theClass = JavassistUtil.ctClassToClass(clazz);
+         
+         resumeSecurity(sm);
+         
          assertEquals("TestClass", theClass.getName());
       }
       catch (CannotCompileException e)




More information about the jboss-cvs-commits mailing list