1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 package org.apache.hc.core5.util;
29
30 import java.lang.reflect.Method;
31 import java.security.AccessController;
32 import java.security.PrivilegedAction;
33
34 import org.apache.hc.core5.annotation.Internal;
35
36 @Internal
37 public final class ReflectionUtils {
38
39 public static void callSetter(final Object object, final String setterName, final Class<?> type, final Object value) {
40 try {
41 final Class<?> clazz = object.getClass();
42 final Method method = clazz.getMethod("set" + setterName, type);
43 setAccessible(method);
44 method.invoke(object, value);
45 } catch (final Exception ignore) {
46 }
47 }
48
49 public static <T> T callGetter(final Object object, final String getterName, final Class<T> resultType) {
50 try {
51 final Class<?> clazz = object.getClass();
52 final Method method = clazz.getMethod("get" + getterName);
53 setAccessible(method);
54 return resultType.cast(method.invoke(object));
55 } catch (final Exception ignore) {
56 return null;
57 }
58 }
59
60 private static void setAccessible(final Method method) {
61 AccessController.doPrivileged(new PrivilegedAction<Object>() {
62 @Override
63 public Object run() {
64 method.setAccessible(true);
65 return null;
66 }
67 });
68 }
69
70 public static int determineJRELevel() {
71 final String s = System.getProperty("java.version");
72 final String[] parts = s.split("\\.");
73 if (parts.length > 0) {
74 try {
75 final int majorVersion = Integer.parseInt(parts[0]);
76 if (majorVersion > 1) {
77 return majorVersion;
78 } else if (majorVersion == 1 && parts.length > 1) {
79 return Integer.parseInt(parts[1]);
80 }
81 } catch (final NumberFormatException ignore) {
82 }
83 }
84 return 7;
85 }
86
87 }