We have ORP/classpath running with some business applications like Jigsaw and 
Tomcat, and we found limitations of classpath's URL/URLStreamHandler to handle 
all kinds of url formats, especially file, jar protocols. 
We have worked out some ad hoc solutions like
  http://www.mail-archive.com/[email protected]/msg03664.html and 
http://www.mail-archive.com/[email protected]/msg03727.html). 

The original author of URLStreamHandler, Aaron, points out that it's not wise to do 
all 
the protocol specific parsing in parseURL. We agree with him, and we suggest some 
changes like the following:

1. In URL.java:
public
URL(URL context, String url, URLStreamHandler ph) throws MalformedURLException
{  ... ...
    if ( context == null ){
        this.ph.parseURL(this, url, start, end);
    } else {
        some ad hoc combination of context and url.
    }
}
We suggest that whatever context will be, call ph.parseURL(), then it's clear and non-
redundant, and can delegate some protocol-specific parsing jobs to protocol handlers.

2. In URLStreamHandler.java
protected void
parseURL(URL url, String url_string, int start, int end){
}
Will be changed to do normal tasks required by java library documentation, i.e, 
parsing 
suppose the protocol is http, and do tasks like canonicaling "through the removal of 
directory changes made by occurences of ".." and ".". For a more detailed description 
of 
URL parsing"(Classpath's current implementation even hasn't addressed this problem).
Also,
protected String toExternalForm(URL u){
}
will suppose a output for normal protocol.

3. Let non-http protocol handlers do parseURL themselves.
That's to say, let gnu/java/net/protocol/*/Handler.java override toExternalForm. These 
protocols includes file, jar etc.

4. If the protocol is somewhat specific in output format, like jar, override 
toExternalForm.
That's to say, let gnu/java/net/protocol/jar/Handler.java override toExternalForm.
 

_______________________________________________
Classpath mailing list
[EMAIL PROTECTED]
http://mail.gnu.org/mailman/listinfo/classpath

Reply via email to