Я уже искал StackOverflow "свойства в войне", но ни один из результатов не работал на мой случай.
Я использую Eclipse Galileo и GlassFish v3 для разработки ряда веб-сервисов. Я использую "динамический веб-проект" со следующей структурой
Src
-java_code_pkg_1
-java_code_pkg_2
-com.company.config
--configfile.properties WebContent
-META-INF
-WEB-INF
--log4jProperties
--web.xml
--applicationContext.xml
--app-servlet.xml
Я хочу получить доступ к "configfile.properties" в одном из исходных файлов в "java_code_pkg1". Я использую Платформу Spring, и этот файл инстанцируют, после того как приложение запускается на сервере.
Я попробовал следующее без удачи
getResourceAsStream("/com.company.config/configfile.properties");
getResourceAsStream("/com/company/config/configfile.properties");
getResourceAsStream("com/company/config/configfile.properties");
getResourceAsStream("/configfile.properties");
getResourceAsStream("configfile.properties");
getResourceBundle(..) didn't work either.
Действительно ли возможно получить доступ к файлу, когда это не находится под путем WEB-INF/classes? раз так затем, как?
Спасибо
Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/com/company/config/file.properties"));
работает, когда я нахожусь в режиме отладки. Я могу видеть значения в отладчике, но получаю исключение NullPointerException сразу после выполнения строки «props.load» и перед тем, как перейти к свету под ней.
Это другой вопрос. По крайней мере, теперь я знаю, что это способ доступа к файлу конфигурации.
Спасибо за вашу помощь.
Если вы участвуете в войне, ваш "текущий каталог" пути к классам - "WEB-INF / classes". Просто поднимитесь на два уровня.
getResourceAsStream("../../com/company/config/configfile.properties");
Это ужасно, но работает. По крайней мере, он работает под tomcat, jboss и geronimo и работает сегодня .
П.С. Ваша структура каталогов не очень ясна. Возможно, это так:
getResourceAsStream("../../com.company.config/configfile.properties");
Вы уверены, что файл включается в ваш военный файл? Во многих случаях процесс сборки войны отфильтровывает файлы не .class.
Каков путь после его развертывания на сервере? Сканер можно использовать для ручного чтения в ресурсе. Из файла Java в пакете, создав новый Файл(".. /applications/") получит файл, указывающий на {glassfish install}\domains\{domain name}\applications. Может быть, вы могли бы изменить этот путь к файлу, чтобы направить вас туда, куда вам нужно идти?