powerbroker commented on code in PR #34: URL: https://github.com/apache/geronimo-xbean/pull/34#discussion_r1045307959
########## xbean-finder/src/main/java/org/apache/xbean/finder/archive/JarArchive.java: ########## @@ -41,22 +43,52 @@ public class JarArchive implements Archive { private final JarFile jar; private final MJarSupport mjar = new MJarSupport(); - public JarArchive(ClassLoader loader, URL url) { + public JarArchive(ClassLoader loader, URL url){ // if (!"jar".equals(url.getProtocol())) throw new IllegalArgumentException("not a jar url: " + url); + this.loader = loader; + this.url = url; + File jf; + int idx; + + /* + * True URL.getPath(...) wiping out protocol prefixes: + * + * 1. 'jar:file:/c:/temp/...' -> 'jar' + 'file:/c:/temp/...' + * 2. 'file:/c:/temp/...' -> 'file' + '/c:/temp/...' + * + * assuming we accept 'file:/...${xxx.jar}!/' URLs + * AND 'zip:file:/...!/' would be cool too, if + * allowed by new URL(...) + */ try { - this.loader = loader; - this.url = url; - URL u = url; - - String jarPath = url.getFile(); - if (jarPath.contains("!")) { - jarPath = jarPath.substring(0, jarPath.lastIndexOf("!")); - u = new URL(jarPath); + // Underlying JarFile(...) requires RandomAccessFile, + // so only local file URLs here... + while(!"file".equalsIgnoreCase(url.getProtocol())) { Review Comment: > > jar:foo:file is actually prohibited by new URL(), why not allow this impossible scenario? > > Prohibited by who? Thing is that we actually only support `jar` and `file`, now you allow `jar:(whatever:)*file` - this is allowed by `URL` and `URLHandler` API. Don't think it is what we want so we should just unwrap once or let the caller unwrap it more before passing the path to the archive IMHO. i cannot do e.g. new URL("jar:foa:file:/c:/Temp"), but - wow - can new URL("http:rtsp:ftp:jar:file:/c:/Temp")! that's technically bullshit, but you're right - possible. btw, absolhuck-o-lutely have no idea why don't URL.getProtocol() just say once "jar:file" instead of nesting URLs. or, if nesting, not to be e.g. "file:/usr/lib.jar:jar:/inner/file.txt"! > Nested jar support is done through other `Archive` implementation like https://github.com/Talend/component-runtime/blob/master/component-runtime-manager/src/main/java/org/talend/sdk/component/runtime/manager/xbean/NestedJarArchive.java but it requires some knowledge about the enclosing structure so better to not try to be too clever there IMHO. yep, too clever with restrictions as well ;) can't shake the feeling that this is what I'm doing... -- This is an automated message from the Apache Git Service. To respond to the message, please log on to GitHub and use the URL above to go to the specific comment. To unsubscribe, e-mail: dev-unsubscr...@geronimo.apache.org For queries about this service, please contact Infrastructure at: us...@infra.apache.org