Доступ к встроенным ресурсам через пользовательский загрузчик Tomcat Webapp - PullRequest
2 голосов
/ 13 марта 2012

Чтобы загрузить внешние файлы JAR, которые не помещены в папку WEB-INF/lib моего веб-приложения, я написал собственный класс загрузчика, расширив класс org.apache.catalina.loader.WebappLoader.

При запуске он сканирует папку (в моем случае это cataline_home\plugins\) и добавляет все классы / файлы в этой папке в путь к классам моего веб-приложения.

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

Скажем, у меня есть JAR с именем pluginsms.jar, внутри этого JAR у меня есть файл свойств с именем sms.properties, и я использую ResourceBundle resource = ResourceBundle.getBundle("sms"); для чтения этого файла, он прекрасно работает, когда я запускаю его как автономный, но когда я пытаюсь чтобы загрузить его в мое веб-приложение (через пользовательский WebappLoader), оно выдает: Resource Not Found Exception.

Ниже приведен источник моего WebappLoader:

public class PluginLoader extends WebappLoader {

    @Override
    public void setContainer(Container container) {
        StandardContext ctx = (StandardContext) container;

        try {
            File pluginFolder = new File(System.getProperty("catalina.home"),
                    "plugins");

            for (File file : pluginFolder.listFiles()) {
                if (file.isDirectory()) {
                    continue;
                }
                if (file.getName().endsWith(".jar")) {
                    addRepository(file.toURI().toString());
                }
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

        super.setContainer(container);
    }
}

1 Ответ

0 голосов
/ 13 марта 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...