If you read the properties file using the stream produced by the method ClassLoader.getResourceAsStream the file will be found in the jar if the jar is in the classpath used by the ClassLoader.

Thus,
 Configuration conf = ....
 InputStream stream = conf.getClass().getClassLoader()
     .getResourceAsStream("data/config/stock.properties");
should give the stream you need (or this.getClass().... if used inside the constructor of Configuration).

Jeff

Clark Dorman wrote:

My web service needs to read a properties file but cannot find it.  The
properties file is currently in the jar containing the web service, so
the jar contains things like:

        com.ncc.wrap.Configuration.class
        ....
        com.ncc.wrap.StockService.class
        ...
        data/config/stock.properties

The Configuration class reads the properties and the StockService class
uses them.  When I run it as a normal jar, Configuration can find the
properties file (the jar is in the classpath), but running under Axis, I
get an exception that it cannot find the properties file.  How do I tell
Configuration to find the file?  The error I get in Tomcat's log is:

com.ncc.wrap.WRAPException: Unable to open file:
data/config/stock.properties
        at com.ncc.wrap.Configuration.initialize(Configuration.java:160)


I have tried to use a servlet to help.  The ConfigurationSerlet.java
class has a function:

 public void init()
   {
       ServletContext sc = getServletConfig().getServletContext();
       try
       {
           Configuration.initialize(sc);
       }
       catch (Exception ex)
       {
           ex.printStackTrace();
       }
}
and I add to the Axis web.xml the following:


 <servlet>
     <servlet-name>WRAPConfiguration</servlet-name>
     <servlet-class>com.ncc.wrap.ConfigurationServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
 </servlet>

and change Configuration.java to include a function that takes a servlet
context in the initialization:

        String resource = "/" + DEFAULT_CONFIG_FILE;
           InputStream is = sc.getResourceAsStream( resource );
logger.info(" input stream was: " + is + ". Resource was: "
+                                       resource);
           logger.info("servlet context" + sc );

           wrapProperties.load(is);

However, the problem with this is that the InputStream 'is' is null.
I've tried lots of variations but no luck.
Any help would be greatly appreciated.

Clark


Reply via email to