[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