2016-04-26 2 views
1

Я пытаюсь получить доступ к внешнему методу барабана третьей части с помощью отражения.Получить ресурс от ClassLoader с ведущей косой чертой

1) я добавить внешний баночку путь к классам с помощью «addUrl» метод системного класса загрузчика

2) я получить тип класса, метод, то я вызвать метод и все это работает

Я декомпилировать часть внешней банки:

public class Deploy 
{ 
    ... 

    public static Deploy init() 
    { 
     InputStream i = Deploy.class 
     .getClassLoader() 
     .getResourceAsStream(
     "/com/example/props"); 
    } 
} 

Использование компонента третьей части, этот вызов работает, потому что он правильно считывает файл «реквизит». Но в моем коде он возвращает null, а именно: «/ com/example/props» Я пробовал: «com/example/props» без косой черты и работает.

Как я могу сделать, чтобы этот код работал в моем приложении? Любой workaroud? (Я должен назвать его через отражения)

Благодаря

ответ

0
  1. Если вы предполагая класс JVM загрузчик является URLClassLoader, то следует помнить, что JDK не гарантирует это, и это, скорее всего, не будет true с Java 9 (JEP 261).

  2. URLClassLoader.getResourceAsStream не должен передаваться ведущим «/», поэтому это может быть ошибка в стороннем JAR. Ваш лучший вариант - загрузить сторонний JAR в пользовательский ClassLoader (например, ваш собственный подкласс URLClassLoader), который может обрабатывать этот ведущий «/» (например, переопределять getResourceAsStream, удалять «/» и делегировать URLClassLoader).