final private InputStream getResourceForward(
String name) {
InputStream is =
handler.servletClassLoader.getResourceAsStream(
name);
if (is != null)
return is;
return parent.getResourceAsStream(name);
}
public synchronized InputStream
getResourceAsStream(String name) {
String unslashedName = name;
InputStream is = null;
if (name.startsWith("/"))
unslashedName = name.substring(1);
byte[] buf = null;
if (resources != null)
buf = (byte[])resources.get(unslashedName);
if (buf != null)
return new ByteArrayInputStream(buf);
ByteArrayOutputStream baos =
new ByteArrayOutputStream();
String remoteLoc = jarURL + "/" + unslashedName;
try {
URL url = new URL(remoteLoc);
is = url.openStream();
int i;
while((i = is.read()) != -1)
baos.write(i);
buf = baos.toByteArray();
if (resources == null)
resources = new HashMap();
resources.put(name, buf);
}
catch(Exception e) {
return getResourceForward(unslashedName);
}
return new ByteArrayInputStream(buf);
}