Я пытаюсь загрузить эластичный поиск RestClient динамически с помощью пользовательского загрузчика классов.Класс загружен успешно, так как я вижу все методы, объявленные в классе (очевидно, печатая их).Однако я не могу загрузить методы, которые передают org.apache.http. * классы в качестве параметров.
Например, когда я делаю это:
URLClassLoader classLoader = new URLClassLoader( new URL[] {
new URL("file:///home/user/Downloads/httpclient-4.5.8.jar"),
new URL("file:///home/user/Downloads/httpasyncclient-4.1.4.jar"),
new URL("file:///home/user/Downloads/httpcore-4.4.11.jar"),
new URL("file:///home/user/Downloads/rest-5.5.3.jar")},
this.getClass().getClassLoader() );
Class<?> restClient = Class.forName("org.elasticsearch.client.RestClient", true, classLoader);
//Object restClassInstance = restClient.newInstance();
Method m[] = restClient.getMethods();
for(int i=0; i < m.length; i++) {
String name = m[i].getName();
Parameter[] params = m[i].getParameters();
Class<?> types[] = m[i].getParameterTypes();
System.out.println("Method Name : "+name);
for(int j=0; j < types.length; j++) {
String param = types[j].getName();
System.out.println("params :: "+param);
}
}
Вывод, который я получаю:
Method Name : builder
params :: [Lorg.apache.http.HttpHost;
Когда я пытаюсь загрузить этот метод, вот так:
Class<?> httpHost = Class.forName("org.apache.http.HttpHost", true, classLoader);
Method restBuilderMethod = restClient.getMethod("builder",httpHost);
Я получаю это исключение:
java.lang.NoSuchMethodException: org.elasticsearch.client.RestClient.builder(org.apache.http.HttpHost)
at java.lang.Class.getMethod(Class.java:1786)
at com.example.demo.controller.TestController.customClassLoaderImpl(TestController.java:63)
at com.example.demo.controller.TestController.main(TestController.java:27)
Из приведенных выше данных я вижу, что при проверке параметров, необходимых для метода построителя, он показывает: [Lorg.apache.http.HttpHost;
Но, за исключением,параметр отображается следующим образом: org.apache.http.HttpHost
Итак, я что-то здесь упускаю?Я ценю, если кто-то хотел бы направить меня в этом отношении.