Konstantin,

On 4/27/16 7:27 AM, Konstantin Kolinko wrote:
> 2016-04-27 14:00 GMT+03:00 Violeta Georgieva <miles...@gmail.com>:
>> Hi,
>>
>> I have a question about difference in the behaviour of
>> org.apache.catalina.loader.WebappClassLoaderBase.getResource(String).
>> I'm investigating the issue reported here [1].
>>
>> In Tomcat 8+ when WebappClassLoaderBase.getResource is invoked with a path
>> that represents a jar resource and starts with a slash
>> (classpath:/schema/shibboleth-2.0-services.xsd) this resource will be
>> served.
>> In
>> org.apache.catalina.webresources.AbstractArchiveResourceSet.getResource(String)
>> it is clearly stated that when the path starts with a slash then this
>> leading slash will be removed.
>>
>> In Tomcat 7 WebappClassLoaderBase.getResource, such resource will not be
>> found. If I remove the leading slash everything is OK.
>>
>> Is that difference intentional or I can apply a change for removing the
>> leading slash in Tomcat 7 WebappClassLoaderBase?
>>
>> Thanks a lot,
>> Violeta
>>
>> [1] http://marc.info/?t=146170035100001&r=1&w=2
> 
> 
> 1.) webresources API is a one thing. It should perform consistently
> across all webresource implementation.
> 
> (IIRC in Tomcat 7 JNDI resources API  was too forgiving of leading
> slashes, leading to some inconsistencies such as duplicate entries in
> resource cache.  I think that that has already been fixed in TC7 by
> doing normalization before looking up into file system & caching.  A
> discussion was ~2 years ago)
> 
> 2.) webresources API is also used by Servet API calls. Here we have
> org.apache.catalina.core.ApplicationContext GET_RESOURCE_REQUIRE_SLASH
> 
> http://tomcat.apache.org/tomcat-7.0-doc/config/systemprops.html#Specification
> http://tomcat.apache.org/tomcat-8.0-doc/config/systemprops.html#Specification
> 
> 3.) WebappClassLoader.getResource() shall be consistent with Java API
> of java.lang.ClassLoader.getResource()
> 
> http://docs.oracle.com/javase/8/docs/api/java/lang/ClassLoader.html#getResource-java.lang.String-
> 
> It just says:
> [q]
> The name of a resource is a '/'-separated path name that identifies
> the resource.
> [/q]
> 
> Unfortunately, this is unclear about leading slashes. (Maybe some
> experimenting with classloaders provided by JRE,  or reading the Java
> Lang Spec clarifies this.)  This likely was also discussed 2-3 years
> ago.
> 
> 4. Beware of similar-named method Class.getResource()
> 
> http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getResource%28java.lang.String%29
> 
> This method differentiates names starting with '/' or without it as
> absolute vs relative resource names.
> 
> [q]
> If the name begins with a '/' ('\u002f'), then the absolute name of
> the resource is the portion of the name following the '/'.
> [/q]
> 
> I think that the above fragment hints that the resource name in
> ClassLoader,getResource() should not start with '/'.
> 
> 
> I think that changing WebappClassLoader.getResource() to accept
> resource names starting with '/' might be wrong.

I almost always use resource paths with a leading slash. For Tomcat to
explicitly NOT support them would be very strange indeed.

-chris

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscr...@tomcat.apache.org
For additional commands, e-mail: dev-h...@tomcat.apache.org

Reply via email to