From: Aaron Madlon-K. <aar...@ma...> - 2012-10-11 01:55:10
|
(Resending to bypass "non-user limbo"; moderators, feel free to reject my previous message) Hello all. I've encountered a problem with some Java code that occurs only in Jython. The following works just fine when run as plain Java, so I'm wondering if someone can help me understand what's going on. Environment: Windows 7 x64, Jython 2.5.3, Java 1.6 or 1.7 I have a Java class with an associated resource. I load the resource like so: URL url = getClass().getResource("somefile"); try { URI uri = url.toURI(); // Do stuff with URI catch ( URISyntaxException e ) { // Uh oh } When run on Java, the URL-to-URI conversion always works fine. url.toString() and uri.toString() give the same value, something like: jar:file:/C:/Users/username/path/to/jar/project.jar!/path/to/resource/somefile However, when I run the same bit of code in Jython, url.toURI() throws a URISyntaxException with the following message: Illegal character in opaque part at index 11: jar:file:C:\Users\username\path\to\jar\project.jar!/path/to/resource/somefile Note that the illegal character is the Windows directory separator. Our current workaround, which does solve the problem but is very ugly in my opinion, is this: URI uri = new URI(url.toString().replace('\\', '/')); Why is class.getResource() returning a path with Windows directory separators if it's just going to choke on the path later? Note that there are no custom manipulations of classpaths or class loaders in project. Colleagues with similar setups claim that they can't replicate this issue, but it happens without fail on my machine. Can anyone shed some light on this? Thanks, Aaron Madlon-Kay |