diff options
author | Sven Gothel <[email protected]> | 2013-10-01 10:30:08 +0200 |
---|---|---|
committer | Sven Gothel <[email protected]> | 2013-10-01 10:30:08 +0200 |
commit | 1a8d2c627dbab5234aea72a458c00b6bba28add0 (patch) | |
tree | 90390174812b2d743725e7339ee449bc09642f77 /src/java/com/jogamp | |
parent | 506ae5e9fd258db7bfe737999e769477a32643a7 (diff) |
Fix Bug 844: Cannot ctor URI w/ scheme alone, use string-based concatenation native URI root and jar file.
Diffstat (limited to 'src/java/com/jogamp')
-rw-r--r-- | src/java/com/jogamp/common/jvm/JNILibLoaderBase.java | 10 | ||||
-rw-r--r-- | src/java/com/jogamp/common/util/IOUtil.java | 25 | ||||
-rw-r--r-- | src/java/com/jogamp/common/util/JarUtil.java | 13 |
3 files changed, 42 insertions, 6 deletions
diff --git a/src/java/com/jogamp/common/jvm/JNILibLoaderBase.java b/src/java/com/jogamp/common/jvm/JNILibLoaderBase.java index caa8702..022ec0e 100644 --- a/src/java/com/jogamp/common/jvm/JNILibLoaderBase.java +++ b/src/java/com/jogamp/common/jvm/JNILibLoaderBase.java @@ -156,9 +156,13 @@ public class JNILibLoaderBase { if(TempJarCache.isInitialized()) { final String nativeJarName = nativeJarBasename+"-natives-"+PlatformPropsImpl.os_and_arch+".jar"; msg.append(nativeJarName); - final URI jarUriRoot = IOUtil.getDirname( JarUtil.getJarSubURI( classJarURI ) ); - msg.append(" + ").append(jarUriRoot); - final URI nativeJarURI = JarUtil.getJarFileURI(jarUriRoot, nativeJarName); + final URI jarSubURI = JarUtil.getJarSubURI( classJarURI ); + if(null == jarSubURI) { + throw new IllegalArgumentException("JarSubURI is null of: "+classJarURI); + } + final String jarUriRoot_s = IOUtil.getURIDirname( jarSubURI.toString() ); + msg.append(" + ").append(jarUriRoot_s); + final URI nativeJarURI = JarUtil.getJarFileURI(jarUriRoot_s+nativeJarName); msg.append(" -> ").append(nativeJarURI); if(DEBUG) { System.err.println(msg.toString()); diff --git a/src/java/com/jogamp/common/util/IOUtil.java b/src/java/com/jogamp/common/util/IOUtil.java index 17bf136..6b9eef8 100644 --- a/src/java/com/jogamp/common/util/IOUtil.java +++ b/src/java/com/jogamp/common/util/IOUtil.java @@ -444,7 +444,7 @@ public class IOUtil { * @throws IllegalArgumentException if the URI doesn't match the expected formatting, or is null * @throws URISyntaxException */ - public static URI getDirname(URI uri) throws IllegalArgumentException, URISyntaxException { + public static URI getURIDirname(URI uri) throws IllegalArgumentException, URISyntaxException { if(null == uri) { throw new IllegalArgumentException("URI is null"); } @@ -452,6 +452,25 @@ public class IOUtil { if( DEBUG ) { System.out.println("getURIDirname "+uri+", extForm: "+uriS); } + return new URI( getURIDirname(uriS) ); + } + + /** + * The URI's <code><i>protocol</i>:/some/path/gluegen-rt.jar</code> + * parent dirname URI <code><i>protocol</i>:/some/path/</code> will be returned. + * <p> + * <i>protocol</i> may be "file", "http", etc.. + * </p> + * + * @param uri "<i>protocol</i>:/some/path/gluegen-rt.jar" + * @return "<i>protocol</i>:/some/path/" + * @throws IllegalArgumentException if the URI doesn't match the expected formatting, or is null + * @throws URISyntaxException + */ + public static String getURIDirname(String uriS) throws IllegalArgumentException, URISyntaxException { + if(null == uriS) { + throw new IllegalArgumentException("uriS is null"); + } // from // file:/some/path/gluegen-rt.jar _or_ rsrc:gluegen-rt.jar // to @@ -461,7 +480,7 @@ public class IOUtil { // no abs-path, check for protocol terminator ':' idx = uriS.lastIndexOf(':'); if(0 > idx) { - throw new IllegalArgumentException("URI does not contain protocol terminator ':', in <"+uri+">"); + throw new IllegalArgumentException("URI does not contain protocol terminator ':', in <"+uriS+">"); } } uriS = uriS.substring(0, idx+1); // exclude jar name, include terminal '/' or ':' @@ -469,7 +488,7 @@ public class IOUtil { if( DEBUG ) { System.out.println("getJarURIDirname res: "+uriS); } - return new URI(uriS); + return uriS; } /** diff --git a/src/java/com/jogamp/common/util/JarUtil.java b/src/java/com/jogamp/common/util/JarUtil.java index 145368f..41d68d4 100644 --- a/src/java/com/jogamp/common/util/JarUtil.java +++ b/src/java/com/jogamp/common/util/JarUtil.java @@ -393,6 +393,19 @@ public class JarUtil { } /** + * @param jarSubUriS file:/some/path/gluegen-rt.jar + * @return jar:file:/some/path/gluegen-rt.jar!/ + * @throws IllegalArgumentException null arguments + * @throws URISyntaxException + */ + public static URI getJarFileURI(String jarSubUriS) throws IllegalArgumentException, URISyntaxException { + if(null == jarSubUriS) { + throw new IllegalArgumentException("jarSubURIS is null"); + } + return new URI(IOUtil.JAR_SCHEME, jarSubUriS+"!/", null); + } + + /** * @param jarFileURI jar:file:/some/path/gluegen-rt.jar!/ * @param jarEntry com/jogamp/common/GlueGenVersion.class * @return jar:file:/some/path/gluegen-rt.jar!/com/jogamp/common/GlueGenVersion.class |