summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Gothel <[email protected]>2013-10-01 10:30:08 +0200
committerSven Gothel <[email protected]>2013-10-01 10:30:08 +0200
commit1a8d2c627dbab5234aea72a458c00b6bba28add0 (patch)
tree90390174812b2d743725e7339ee449bc09642f77
parent506ae5e9fd258db7bfe737999e769477a32643a7 (diff)
Fix Bug 844: Cannot ctor URI w/ scheme alone, use string-based concatenation native URI root and jar file.
-rw-r--r--src/java/com/jogamp/common/jvm/JNILibLoaderBase.java10
-rw-r--r--src/java/com/jogamp/common/util/IOUtil.java25
-rw-r--r--src/java/com/jogamp/common/util/JarUtil.java13
-rw-r--r--src/junit/com/jogamp/common/util/TestTempJarCache.java2
4 files changed, 43 insertions, 7 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
diff --git a/src/junit/com/jogamp/common/util/TestTempJarCache.java b/src/junit/com/jogamp/common/util/TestTempJarCache.java
index e357a2e..29fe4c5 100644
--- a/src/junit/com/jogamp/common/util/TestTempJarCache.java
+++ b/src/junit/com/jogamp/common/util/TestTempJarCache.java
@@ -203,7 +203,7 @@ public class TestTempJarCache extends JunitTracer {
final ClassLoader cl = getClass().getClassLoader();
URI jarUriRoot = JarUtil.getJarSubURI(TempJarCache.class.getName(), cl);
- jarUriRoot = IOUtil.getDirname(jarUriRoot);
+ jarUriRoot = IOUtil.getURIDirname(jarUriRoot);
URI nativeJarURI = JarUtil.getJarFileURI(jarUriRoot, nativeJarName);