Where in this Javadoc do you find -anything- about relative paths or .
for current directory? The only thing it says that the path name is /
separated. I do not think that because there are file systems that
accept a . and .. you can imply that this should also support relative
paths ...
/**
* Finds the resource with the given name. A resource is some data
* (images, audio, text, etc) that can be accessed by class code in a way
* that is independent of the location of the code.
*
* <p> The name of a resource is a '<tt>/</tt>'-separated path name that
* identifies the resource.
*
* <p> This method will first search the parent class loader for the
* resource; if the parent is <tt>null</tt> the path of the class loader
* built-in to the virtual machine is searched. That failing, this method
* will invoke [EMAIL PROTECTED] #findResource(String)} to find the
resource. </p>
*
* @param name
* The resource name
*
* @return A <tt>URL</tt> object for reading the resource, or
* <tt>null</tt> if the resource could not be found or the invoker
* doesn't have adequate privileges to get the resource.
*
* @since 1.1
*/
Too see the difference, look at the Javadoc for URLs:
* Otherwise, the path is treated as a relative path and is appended to the
* context path, as described in RFC2396. Also, in this case,
* the path is canonicalized through the removal of directory
* changes made by occurences of ".." and ".".
Kind regards,
Peter Kriens
TW> Stefano Lenzi <[EMAIL PROTECTED]> wrote on 09/18/2007 07:06:58 AM:
>> The OSGi Specification states that the Bundle.getResource(String)
>> behavior should be equal to the ClassLoader.getResource(String) which on
>> Sun JDK 6 update 1 (my configuration) it's able to resolve resource
>> containing '.' and '..'.
TW> Are you running this code within an IDE where the classes are loaded out
TW> of an output folder instead of a JAR file? When I test on JDK 6 relative
TW> paths do not work for JARs. I suspect directory classpaths within the IDE
TW> work because the URLClassloader simply creates File objects with the path
TW> which do the normalization for them but JarFile.getEntry does not
TW> handle normalization for jars.
>>
>> The code which I used in tests is more or less the following:
>>
>> package tests.resource;
>>
>> import java.net.URL;
>>
>> public class TestResourceLoading{
>>
>> public static void main(String args[]){
>> ClassLoader loader =
>> Thread.currentThread().getContextClassLoader();
>> URL url =
>> loader.getResource(".././resource/TestResourceLoading.class");
TW> What does ../. indicate here for a classloader? Go up one directory from
TW> what reference point? In an OSGi environment this would be meaningless
TW> because the location of the bundle classpath content is not exposed and
TW> cannot be used as a reference point for the relative paths.
>> System.out.println("Loading "+url);
>> }
>> }
>>
>> The javadoc for
>> > ClassLoader.getResource also makes no mention that the resource name
TW> can
>> > have relative resource path segments (e.g. '.' or '..') and that the
>> > classloader must normalize the resource path when searching.
>>
>> Did you mean that JavaDoc of ClassLoader.getResource(String) states that
>> the programmer must normalize the resource-path before invoking the
>> method? Because I've looked at the JavaDoc of ClassLoader and
>> ClassLoader.getResource(String) and I couldn't find any information
>> about that.
TW> I mean the JavaDoc for ClassLoader.getResource(String). It does not
TW> make it clear that the ClassLoader implementation must perform
TW> normalization on the given resource path. In many classloaders
TW> relative paths do not make sense because there is no good reference
TW> point for the "root" of the classloader to base relative paths off of.
TW> Tom
--
Peter Kriens Tel +33467542167
9C, Avenue St. Drézéry AOL,Yahoo: pkriens
34160 Beaulieu, France ICQ 255570717
Skype pkriens Fax +1 8153772599