org.bouncycastle.jsse.provider.ReflectionUtil Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of impersonator Show documentation
Show all versions of impersonator Show documentation
Spoof TLS/JA3/JA4 and HTTP/2 fingerprints in Java
The newest version!
package org.bouncycastle.jsse.provider;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.security.AccessController;
import java.security.PrivilegedAction;
class ReflectionUtil
{
static Method findMethod(Method[] methods, String name)
{
if (methods != null)
{
for (Method m : methods)
{
if (m.getName().equals(name))
{
return m;
}
}
}
return null;
}
static boolean hasMethod(Method[] methods, String name)
{
return null != findMethod(methods, name);
}
static Class> getClass(final String className)
{
if (null == className)
{
return null;
}
return AccessController.doPrivileged(new PrivilegedAction>()
{
public Class> run()
{
try
{
ClassLoader classLoader = ReflectionUtil.class.getClassLoader();
Class> clazz = (null == classLoader)
? Class.forName(className)
: classLoader.loadClass(className);
return clazz;
}
catch (Exception e)
{
}
return null;
}
});
}
static Constructor getDeclaredConstructor(final String className, final Class>... parameterTypes)
{
if (null == className)
{
return null;
}
return AccessController.doPrivileged(new PrivilegedAction>()
{
public Constructor run()
{
try
{
ClassLoader classLoader = ReflectionUtil.class.getClassLoader();
@SuppressWarnings("unchecked")
Class clazz = (Class)((null == classLoader)
? Class.forName(className)
: classLoader.loadClass(className));
if (null != clazz)
{
return clazz.getDeclaredConstructor(parameterTypes);
}
}
catch (Exception e)
{
}
return null;
}
});
}
static Method getMethod(final String className, final String methodName, final Class>... parameterTypes)
{
if (null == className || null == methodName)
{
return null;
}
return AccessController.doPrivileged(new PrivilegedAction()
{
public Method run()
{
try
{
ClassLoader classLoader = ReflectionUtil.class.getClassLoader();
Class> clazz = (null == classLoader)
? Class.forName(className)
: classLoader.loadClass(className);
if (null != clazz)
{
return clazz.getMethod(methodName, parameterTypes);
}
}
catch (Exception e)
{
}
return null;
}
});
}
static Method[] getMethods(final String className)
{
if (null == className)
{
return null;
}
return AccessController.doPrivileged(new PrivilegedAction()
{
public Method[] run()
{
try
{
ClassLoader classLoader = ReflectionUtil.class.getClassLoader();
Class> clazz = (null == classLoader)
? Class.forName(className)
: classLoader.loadClass(className);
if (null != clazz)
{
return clazz.getMethods();
}
}
catch (Exception e)
{
}
return null;
}
});
}
static Integer getStaticInt(final String className, final String fieldName)
{
return AccessController.doPrivileged(new PrivilegedAction()
{
public Integer run()
{
try
{
ClassLoader classLoader = ReflectionUtil.class.getClassLoader();
Class> clazz = (null == classLoader)
? Class.forName(className)
: classLoader.loadClass(className);
if (null != clazz)
{
Field field = clazz.getField(fieldName);
if (null != field)
{
Class> fieldType = field.getType();
if (int.class == fieldType)
{
return field.getInt(null);
}
}
}
}
catch (Exception e)
{
}
return null;
}
});
}
static Integer getStaticIntOrDefault(final String className, final String fieldName, int defaultValue)
{
Integer value = getStaticInt(className, fieldName);
return null == value ? defaultValue : value.intValue();
}
static Object invokeGetter(final Object obj, final Method method)
{
return invokeMethod(obj, method);
}
static Object invokeMethod(final Object obj, final Method method, final Object... args)
{
return AccessController.doPrivileged(new PrivilegedAction