Java: Accessing properties file inside a war
Solution 1
Properties props = new Properties();
props.load(this.getClass().getResourceAsStream("/com/company/config/file.properties"));
works when I'm in debug mode. I can see the values in the debugger, but I get a NullPointerException right after executing the "props.load" line and before going into the light below it.
That's a different issue. At least now I know this is the way to access the config file.
Thank you for your help.
Solution 2
If you are in a war, your classpath "current directory" is "WEB-INF/classes". Simply go up two levels.
getResourceAsStream("../../com/company/config/configfile.properties");
It is horrible but it works. At least, it works under tomcat, jboss and geronimo and It works today.
P.S. Your directory structure is not very clear. Perhaps it is:
getResourceAsStream("../../com.company.config/configfile.properties");
Solution 3
Check the location of the properties file in WAR file.
If it is in WEB-INF/classes directory under com/company/config directory
getResourceAsStream("com/company/config/configfile.properties")
should work
or getResourceAsStream(" This should work if the config file is not under WEB-INF/classes directoy
Also try using getClass().getClassLoader().getResourceAsStream.
Solution 4
Are you sure the file is being included in your war file? A lot of times, the war build process will filter out non .class files.
del.ave
Updated on July 05, 2022Comments
-
del.ave almost 2 years
I already searched StackOverflow for "properties inside war", but none of the results worked for my case.
I am using Eclipse Galileo and GlassFish v3 to develop a set of web services. I am using a "dynamic web project" with the following structure
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
I want to access the "configfile.properties" inside one of the source files in "java_code_pkg1". I am using the Spring Framework and this file will be instantiated once the application starts on the server.
I have tried the following with no luck
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.
Is it possible to access a file when it's not under the
WEB-INF/classes
path? if so then how? -
del.ave almost 14 yearsYes the file is there. I can see it if I browse the Glassfish directory structure.
-
Snekse almost 11 yearsThanks for the hack. Worked well for having a war file load a properties file located in the containing ear. Any suggestions for loading property files located in a sibling war file with an indeterminate full name?
-
andcoz almost 11 yearsMumble, I suppose you can not. The application server should isolate wars from each other and it should not let you to access a file in a sibling war. Obviously ways to circumvent or relax the AS security policies exist but they are AS dependent.