Java: Accessing properties file inside a war

44,167

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.

Share:
44,167
del.ave
Author by

del.ave

Updated on July 05, 2022

Comments

  • del.ave
    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
    del.ave almost 14 years
    Yes the file is there. I can see it if I browse the Glassfish directory structure.
  • Snekse
    Snekse almost 11 years
    Thanks 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
    andcoz almost 11 years
    Mumble, 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.