LoadService error in getClassPathResource when file location contains '+' -------------------------------------------------------------------------
Key: JRUBY-4663 URL: http://jira.codehaus.org/browse/JRUBY-4663 Project: JRuby Issue Type: Bug Components: Core Classes/Modules Affects Versions: JRuby 1.4 Environment: OS X 10.6.2 Reporter: Garrett Conaty Discovered during deployment of jruby-rack webapps. Was getting no such file to load -- rack from vendor/rack.rb which contained this: "$LOAD_PATH << File.dirname(__FILE__) + '/#{rack_dir}'; require 'rack'" Here's where it found vendor/rack.rb in the first place LoadService: found: jar:file:/Users/garrett/java/jetty-7+++.0.1/webapps/merbtest/WEB-INF/lib/jruby-rack-0.9.7-SNAPSHOT.jar!/vendor/rack.rb Notice the + in the name. TMP dirs under OS X tend to have +, so I first noticed when deploying an unexploded .war file. When this gets passed to ExternalScript.load there was a fix for JRUBY-1965 which basically does java.net.URLDecoder.decode(name, "ISO-8859-1") on the file:/ part, which is incorrect as URLDecoder is too aggressive on the decoding (meant to be used for HTML forms) and converts the + to a space. However, the intention is correct as it fixes the issue when spaces are in the path. I've attached a patch which fixes both issues and fixes this case. Effectively in LoadService.getClassPathResource, decode the path with path = loc.toURI().getSchemeSpecificPart(); which removes the "jar:" section and also decodes the "file:/" section properly, then passes this on to the LoadServiceResource constructor. I believe this may also be the issue for JRUBY-4227 but haven't verified. -- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://jira.codehaus.org/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira --------------------------------------------------------------------- To unsubscribe from this list, please visit: http://xircles.codehaus.org/manage_email