238 |
CodeSource getCodeSource() |
CodeSource getCodeSource() |
239 |
{ |
{ |
240 |
Certificate[] certs = getCertificates(); |
Certificate[] certs = getCertificates(); |
241 |
if (certs != null) |
if (certs == null) |
242 |
return loader.noCertCodeSource; |
return loader.noCertCodeSource; |
243 |
else |
else |
244 |
return new CodeSource(loader.baseURL, certs); |
return new CodeSource(loader.baseURL, certs); |
272 |
} |
} |
273 |
|
|
274 |
/** |
/** |
|
* Returns the given URL with a canonicalized file path name when it |
|
|
* is has the file protocol. Otherwise (or when the file part of the |
|
|
* URL couldn't be canonicalized) it returns the original String. |
|
|
* It makes sure that if the original file part ended with a file |
|
|
* separator that the new file part also ends with a separator. |
|
|
*/ |
|
|
static URL getCanonicalFileURL(URL url) |
|
|
{ |
|
|
if ("file".equals(url.getProtocol())) |
|
|
{ |
|
|
try |
|
|
{ |
|
|
String f = url.getFile(); |
|
|
File file = new File(f).getCanonicalFile(); |
|
|
String cf = file.toString(); |
|
|
String sep = File.separator; |
|
|
if (f.endsWith(sep) && !cf.endsWith(sep)) |
|
|
{ |
|
|
cf += "/"; |
|
|
} |
|
|
url = new URL("file", "", cf); |
|
|
} |
|
|
catch (IOException ignore) |
|
|
{ |
|
|
} |
|
|
} |
|
|
return url; |
|
|
} |
|
|
|
|
|
/** |
|
275 |
* A <code>JarURLLoader</code> is a type of <code>URLLoader</code> |
* A <code>JarURLLoader</code> is a type of <code>URLLoader</code> |
276 |
* only loading from jar url. |
* only loading from jar url. |
277 |
*/ |
*/ |
278 |
final static class JarURLLoader extends URLLoader |
final static class JarURLLoader extends URLLoader |
279 |
{ |
{ |
280 |
final JarFile jarfile; // The canonical jar file for this url |
final JarFile jarfile; // The jar file for this url |
281 |
final URL baseJarURL; // Base jar: url for all resources loaded from jar |
final URL baseJarURL; // Base jar: url for all resources loaded from jar |
282 |
|
|
283 |
public JarURLLoader(URLClassLoader classloader, URL baseURL) |
public JarURLLoader(URLClassLoader classloader, URL baseURL) |
284 |
{ |
{ |
285 |
super(classloader, getCanonicalFileURL(baseURL)); |
super(classloader, baseURL); |
286 |
|
|
287 |
// cache url prefix for all resources in this jar url |
// cache url prefix for all resources in this jar url |
288 |
String external = baseURL.toExternalForm(); |
String external = baseURL.toExternalForm(); |
465 |
*/ |
*/ |
466 |
final static class FileURLLoader extends URLLoader |
final static class FileURLLoader extends URLLoader |
467 |
{ |
{ |
468 |
File dir; //the canonical file for this file url |
File dir; //the file for this file url |
469 |
|
|
470 |
FileURLLoader(URLClassLoader classloader, URL url) |
FileURLLoader(URLClassLoader classloader, URL url) |
471 |
{ |
{ |
472 |
super(classloader, getCanonicalFileURL(url)); |
super(classloader, url); |
473 |
dir = new File(baseURL.getFile()); |
dir = new File(baseURL.getFile()); |
474 |
} |
} |
475 |
|
|
477 |
Resource getResource(String name) |
Resource getResource(String name) |
478 |
{ |
{ |
479 |
File file = new File(dir, name); |
File file = new File(dir, name); |
|
try |
|
|
{ |
|
|
file = file.getCanonicalFile(); |
|
|
} |
|
|
catch (IOException ignore) |
|
|
{ |
|
|
} |
|
480 |
if (file.exists() && !file.isDirectory()) |
if (file.exists() && !file.isDirectory()) |
481 |
return new FileResource(this, name, file); |
return new FileResource(this, name, file); |
482 |
return null; |
return null; |