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((PrivilegedAction<Object>) () -> {
62 method.setAccessible(true);
63 return null;
64 });
65 }
66
67 public static int determineJRELevel() {
68 final String s = System.getProperty("java.version");
69 final String[] parts = s.split("\\.");
70 if (parts.length > 0) {
71 try {
72 final int majorVersion = Integer.parseInt(parts[0]);
73 if (majorVersion > 1) {
74 return majorVersion;
75 } else if (majorVersion == 1 && parts.length > 1) {
76 return Integer.parseInt(parts[1]);
77 }
78 } catch (final NumberFormatException ignore) {
79 }
80 }
81 return 7;
82 }
83
84 }