Try using this file for loading resources.
Currently it loads only as properties and String but you may choose to
return anyway you want.
import java.util.Properties;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.ByteArrayOutputStream;
/**
* Uses the classloader to load resources from the file system
*/
public class ResourceLoader
{
/**
* Useful int to define a buffer size
*/
private static final int aBuffSize = 123123;
/**
* inputstream reader int
*/
private static int k;
/**
* Useful array for copying data
*/
private static byte[] buff = new byte[aBuffSize];
/**
* The XML String to return
*/
private static String strXml;
/**
* Returns the resource as a java.util.Properties object
* @param resourceBundleName String
* @param strPath String
* @throws IOException
* @return Properties
*/
public static final Properties getPropertiesFromResourceBundle(
String resourceBundleName,
String strPath )
throws IOException
{
InputStream inputStream = null;
Properties properties = null;
try
{
// fetch the properties file as a stream
try
{
inputStream = getResourceAsStream(
resourceBundleName,
strPath );
}
catch ( IOException objIoe )
{
throw objIoe;
}
// if the resource was found, load it into the
result Properties object
if( inputStream != null )
{
try
{
properties = new Properties();
properties.load( inputStream );
}
catch( IOException e )
{
StringBuffer strBuff = new
StringBuffer(
"CPSConfigurationManager.getPropertiesFromResourceBundle() caught
IOException when trying to load properties file " );
strBuff.append( resourceBundleName
);
strBuff.append( ": " );
strBuff.append( e.getMessage() );
throw new IOException(
strBuff.toString() );
}
}
}
catch(IOException ioe)
{
throw ioe;
}
finally {
try
{
if(inputStream != null)
{
inputStream.close();
}
}
catch( IOException ex )
{
throw ex;
}
}
return properties;
} // end of method getPropertiesFromResourceBundle()
/**
* Returns the resource as a String object
* @param resourceBundleName String
* @param strPath String
* @throws IOException
* @return String
*/
public static final String getXmlFromResourceBundle(
String resourceBundleName,
String strPath ) throws IOException
{
OutputStream outputStream = null;
InputStream inputStream = null;
try {
// fetch the xml file as a stream
try {
inputStream = getResourceAsStream(
resourceBundleName,
strPath );
}
catch ( IOException objIoe )
{
throw objIoe;
}
// if the resource was found, load it
if( inputStream != null )
{
try
{
// I wish I could just do this:
strXml = inputStream.toString();
outputStream = new
ByteArrayOutputStream(aBuffSize);
synchronized ( outputStream )
{
while (
(k=inputStream.read(buff) ) != -1)
{
outputStream.write(
buff, 0, k);
}
// I can now grab the string I
want
strXml =
outputStream.toString();
outputStream.close();
return strXml;
} // end of synchronized block
// That was a lot of work to pull a
String out of an inputStream.
}
catch( IOException e )
{
throw new IOException(
"PSConfigurationManager.getPropertiesFromResourceBundle() caught IOException
when trying to load properties file " + e.getMessage() );
}
}
}
catch( IOException ioe )
{
throw ioe;
}
finally
{
try
{
inputStream.close();
}
catch( IOException ex )
{
throw ex;
}
}
return "";
} // end of method getPropertiesFromResourceBundle()
/**
* Returns the resource as a stream. Uses this class classloader to
find the resource
* relative to this class. Since this class is loaded by the
classloader of the
* calling class (say servlet), the resource will be searched
realtive to the calling
* class
*/
private static final InputStream getResourceAsStream( String
resourceBundleName,
String strPath )
throws IOException
{
InputStream inputStream = null;
try {
// null safety check
if( resourceBundleName == null || strPath == null)
{
throw new IOException(
"ResourceLoader.getResourceAsStream() called with null filename" );
}
StringBuffer resourceBundlePath = new
StringBuffer(strPath);
resourceBundlePath.append("/");
resourceBundlePath.append( resourceBundleName );
ClassLoader loader =
ResourceLoader.class.getClassLoader();
inputStream = loader.getResourceAsStream(
resourceBundlePath.toString() );
}
catch( IOException ioe )
{
inputStream.close();
throw ioe;
}
return inputStream;
} // end of method getResourceAsStream
}
-----Original Message-----
From: Rakesh Patel [mailto:[EMAIL PROTECTED]
Sent: Monday, January 20, 2003 11:30 AM
To: [EMAIL PROTECTED]
Subject: Solution for finding images in a WAR file
Hi,
I have found a solution that I think works (have not got access to a Unix
environment to confirm this) but I did not hard-code any window/unix
specific paths.
Here's a snippet of code I used:
ServletContext scntxt = this.getServletContext();
String pathToFile = scntxt.getRealPath("/WEB-INF"); // or whatever relative
to web app root eg /images
String imagePath = "file:" + pathToFile;
org.apache.fop.configuration.Configuration.put("baseDir",imagePath);
as you can see, all my images are in web_app_root/WEB-INF.
The corresponding xml data file looks like this:
<HTRelitiveRef HTRRKey="2" HTRRType="Picture" HTRRID="/centurion.jpg"
HTRRLink="" HTRRVisible="F">centurion</HTRelitiveRef>
I hope this saves others the problem of finding the solution across many
posts!
Thanks
Rakesh
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]