Here are my findings.

First, JBoss-3.0 is ok. The problem is in JBoss-3.2 and HEAD.

Second, I found the cause.
The resources we want to load with our custom handlers
through class loaders must be added to the classpath AFTER the
(custom) URLStreamHandlerFactory is setup.

URLClassLoaders hold their URLs.
The URLs created before the custom URLStreamHandlerFactory is set up
have Sun's handler. System class loader is a subclass of the
URLClassLoader. Thus, its URLs have Sun's handler. (It seems to me even
if java.protocol.handler.pkgs is setup. Is it a VM's bug or mine?)

Suppose we attempt to load resource that was in the classpath before
the custom handler factory was setup. The URL for the resource is
constructed with: URL(URL context, String spec).
where the context URL comes from the class loader with Sun's handler.
Then resource's URL's handler is assigned context.handler.
So, it doesn't matter whether the custom handler factory is setup.

alex

Tuesday, January 14, 2003, 9:49:45 PM, you wrote:

SMS> Oh, I now remeber looking at this but I can't remember the context. There
SMS> is a cache of handlers as the URL level. If the file protocol is referenced
SMS> before the custom JBoss handler is available then the default Sun one will
SMS> be used. Is there a difference between 3.0 and 3.2 with regard to when the
SMS> custom protocol handlers are installed? I'll check later today.


SMS> xxxxxxxxxxxxxxxxxxxxxxxx
SMS> Scott Stark
SMS> Chief Technology Officer
SMS> JBoss Group, LLC
SMS> xxxxxxxxxxxxxxxxxxxxxxxx

SMS> ----- Original Message ----- 
SMS> From: "Alex Loubyansky" <[EMAIL PROTECTED]>
SMS> To: "Scott M Stark" <[EMAIL PROTECTED]>
SMS> Sent: Tuesday, January 14, 2003 7:07 AM
SMS> Subject: Re[4]: [JBoss-dev] URLConnection and opened files


>> I'm a bit confused. I wrote a simple standalone test.
>> 
>> - main
>> public static void main(String[] args) throws Exception
>> {
>>    // set handler pkgs
>>    System.out.println("java.protocol.handler.pkgs: " + 
>System.getProperty("java.protocol.handler.pkgs"));
>> 
>>    URL url = new URL("file", null, args[0]);
>>    System.out.println("url: " + url);
>>    URLConnection urlCon = url.openConnection();
>>    System.out.println("connection class: " + urlCon.getClass().getName());
>> 
>>    url = new URL("other", null, args[0]);
>>    System.out.println("url: " + url);
>>    urlCon = url.openConnection();
>>    System.out.println("connection class: " + urlCon.getClass().getName());
>> }
>> 
>> - run
>> java -Djava.protocol.handler.pkgs=org.avoka.test.files.protocol -classpath %cp% 
>org.avoka.test.files.FilesTest build.xml
>> 
>> - output
>> java.protocol.handler.pkgs: org.avoka.test.files.protocol
>> url: file:build.xml
>> connection class: sun.net.www.protocol.file.FileURLConnection
>> url: other:build.xml
>> connection class: org.avoka.test.files.protocol.other.OtherURLConnection
>> 
>> I do have org.avoka.test.files.protocol.file.Handler and
>> org.avoka.test.files.protocol.file.FileURLConnection on the classpath.
>> My file.Handler isn't called. Am I missing something?
>> 
>> This same thing happens with JBoss-3.2 and HEAD but not JBoss-3.0 (my
>> 3.0 is not up to date).
>> 
>> JDK1.3.1_05, J2SDK1.4.0
>> Win2K
>> 
>> Thanks,
>> alex




-------------------------------------------------------
This SF.NET email is sponsored by: Take your first step towards giving 
your online business a competitive advantage. Test-drive a Thawte SSL 
certificate - our easy online guide will show you how. Click here to get 
started: http://ads.sourceforge.net/cgi-bin/redirect.pl?thaw0027en
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to