Доступ к внешнему ресурсу с помощью ClassLoader.getResourceFromStream в WebSphere - PullRequest
0 голосов
/ 04 августа 2020

Я работаю с локальным сервером WebSphere, настроенным в IntelliJ Idea, и приложение, над которым я работаю, использует стороннюю библиотеку, которая загружает файл свойств с:

ThirdPartyClass.class.getClassLoader().getResourceAsStream(fileNameParameter);

Он использует загрузчик bootstrapClassLoader по умолчанию.

Мне было поручено убедиться, что файл свойств находится в каталоге конфигурации, чтобы его можно было редактировать без развертывания изменения кода. Мой проект выглядит примерно так:

ProjectName
    Configs
        my.properties
    src
        java (sources root)
            packages, .java files, etc
        main (resources root)
            schemas, web docs, etc

Я пробовал несколько способов заставить его работать, но он всегда возвращает null. Поскольку я изначально думал, что он идет из стороннего пакета библиотеки, я попытался добавить несколько .. \ к пути к файлу, но потом я узнал, что этот метод загружается из пути к классам, поэтому я вытащил

String test = System.getProperty("java.class.path");

и после проверки мой путь к классам состоит из каталогов websphere и jar-файлов внутри них:

C: \ Users \ me \ Programs \ IBM \ AppServer \ profiles \ AppSrv01 / properties C: \ Users \ me \ Programs \ IBM \ AppServer \ AppSrv01 / properties и несколько файлов jar в C: \ Users \ me \ Programs \ IBM \ AppServer / lib /

Так что в качестве теста я застрял файл в C: \ Users \ me \ Programs \ IBM \ AppServer \ AppSrv01 / properties, затем попытался захватить его только с его именем файла (my.properties), но все равно не смог до него добраться. Я также пробовал переместить файл в директорию sr c и в основную директорию, но, что бы я ни делал, мне просто не удается найти файл.

Я знаю, что этот метод обычно используется для захвата ресурсов из файла jar, но, насколько я понимаю, кажется, что можно получить доступ к моему файлу извне, если он находится в каталоге в пути к классам ... но, по-видимому, нет, поскольку это не не работает.

У меня есть абсолютный путь на моем жестком диске, и я буду указывать этот путь на сервере; есть ли способ получить путь, который ClassLoader.getResourceFromStream () хочет с этой информацией? В противном случае, есть ли очевидная ошибка, которую я делаю с URL-адресом ресурса?

1 Ответ

0 голосов
/ 04 августа 2020

Я думаю, ваш fileNameParameter просто должен начинаться с /, чтобы указать, что он находится на уровне root пути к классам. В противном случае поиск будет производиться относительно класса, из которого он загружен, т.е. пакета ThirdPartyClass в вашем примере.

...