[ http://mc4j.org/jira/browse/STS-376?page=all ]
Ben Gunter resolved STS-376.
----------------------------
Fix Version/s: Release 1.5
Resolution: Fixed
Leading slashes are trimmed before calling ClassLoader.getResource(...) or
ClassLoader.getResourceAsStream(...)
> MockServletContext.getResource() doesn't seem to work
> -----------------------------------------------------
>
> Key: STS-376
> URL: http://mc4j.org/jira/browse/STS-376
> Project: Stripes
> Issue Type: Bug
> Components: Context Management
> Affects Versions: Release 1.4.3
> Environment: OS X 104.9 + Eclipse 3.2
> Reporter: Andrew Jaquith
> Assigned To: Ben Gunter
> Fix For: Release 1.5
>
> Attachments: CustomMockServletContext.java
>
>
> I have a snippet of code in my unit tests that attemps to load a resource
> relative to the webroot. Calling MockServletContext.getResource to try to
> obtain this resource fails when the resource name begins with a slash (/),
> which the servlet specification says it must.
> I determined by trial and error that the following code snippet, in which the
> servlet context is in fact a MockServletContext, works as expected:
> url = m_engine.getServletContext().getResource( "WEB-INF/web.xml"
> );
> ...although it is *wrong*. From the ServletContext.getResource(String)
> JavaDoc (J2EE 1.3):
> "Returns a URL to the resource that is mapped to a specified path. The path
> must begin with a "/" and is interpreted as relative to the current context
> root."
> The code that SHOULD work, but does not, is this:
> url = m_engine.getServletContext().getResource(
> "/WEB-INF/web.xml" );
> The root cause of this issue appears to be how MockServletContext actually
> looks up resources. The source code looks like this:
> /** Uses the current classloader to fetch the resource if it can. */
> public URL getResource(String name) throws MalformedURLException {
> return
> Thread.currentThread().getContextClassLoader().getResource(name);
> }
> I believe what is happening is that the servlet context expects a leading
> slash, and if one is supplied it is retained and passed on to the
> classloader's getResource() method. This will cause the file name to be
> interepreted as an absolute path.
> Recommended fix: inside MockServletContext.getResource, trim the leading
> slash if one was passed.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://mc4j.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
-------------------------------------------------------------------------
This SF.net email is sponsored by: Splunk Inc.
Still grepping through log files to find problems? Stop.
Now Search log events and configuration files using AJAX and a browser.
Download your FREE copy of Splunk now >> http://get.splunk.com/
_______________________________________________
Stripes-development mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/stripes-development