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: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]