You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by Alberto Garoffolo <a....@web-rise.com> on 2002/01/16 15:42:08 UTC

URL cannot load URLStreamHandlers located in the "common/lib" directory (was: Please, need help about Tomcat 4.0.x classloader compatibility with custom protocol definition)

Hi,

----- Original Message -----
From: "Alberto Garoffolo" <a....@web-rise.com>
To: <to...@jakarta.apache.org>
Sent: Monday, January 14, 2002 4:28 PM
Subject: Please, need help about Tomcat 4.0.x classloader compatibility with
custom protocol definition


> Hi,
>
> I' ve a problem defining under Tomcat 4.0.x my own protocol
> handler setting the property "java.protocol.handler.pkgs"
>
> (URL class cannot load URLStreamHandlers located in the "common/lib"
> directory).
>
> My protocol interacts with all my webapps allowing them to
> add their handlers at runtime
> ( for example: protocolname://handler1/ , protocolname://handler2/ ...).
> I' ve implemented this with a singletone object
> (queryied by my implementation of the URLStreamHandler Class) that
> holds the associations handler_name->component_instance.
> Under Tomcat 4 i had to put my protocol jar in the common/lib
> directory to access the same singletone object from all webapps.
>
> Then i've encountered some problems registering the protocol,
> before with "URL.setURLStreamHandlerFactory" because the factory
> was already defined by Tomcat, and after with the property
> "java.protocol.handler.pkgs".
>
> One month ago i solved the problem modifying Tomcat 4.0.1
> to not register the factory if the package "org.apache.naming.resources"
> is specified in the property "java.protocol.handler.pkgs", then i sent
> the patch to tomcat-dev list but no reply
>
>
> Now, having the same problem with Tomcat 4.0.2 b1, i retried to declare
> my protocol setting the "java.protocol.handler.pkgs" property but it still
> doesn't work.
>
> Debugging the application, i found that the ClassLoader used by
java.net.URL
> cannot
> find my URLStreamHandler implementation that is in the common/lib.
>
> This is the "java.net.URL" code that should instantiate the
> URLStreamHandler:
> (packagePrefix is the package found in the property
> "java.protocol.handler.pkgs"
>  and protocol, the requested protocol name )
>
> <code>
>       try {
>             String clsName = packagePrefix + "." + protocol + ".Handler";
>
>             Class cls = null;
>              try {
>                      cls = Class.forName(clsName);
>              } catch (ClassNotFoundException e) {
>
>                     ClassLoader cl = ClassLoader.getSystemClassLoader();
>                     if (cl != null) {
>                            cls = cl.loadClass(clsName);
>                    }
>              }
>              if (cls != null) {
>                        handler  =
>                          (URLStreamHandler)cls.newInstance();
>              }
>       } catch (Exception e) {
>            // any number of exceptions can get thrown here
>       }
> </code>
>
> I think it could be a ClassLoader bug.
>
> Thanks for patience :-)
>
> Thanks in advance for any help.
>
> Ciao,
> Alberto.
>
> P.S.
> Here follows how i patched Tomcat 4.0.1 to not register the
> URLStreamHandlerFactory
> if the package "org.apache.naming.resources" is specified in the property
> "java.protocol.handler.pkgs".
>
> -------------------------------------------------------------------------
> I' ve modified with success my tomcat 4.01 to allow webapps to register
> their protocol handler in this way:
>
> in WebappLoader.java and in StandardLoader.java before setting the factory
i
> check if the property
> "java.protocol.handler.pkgs" contains the package
> "org.apache.naming.resources", in this case it' s not
> necessary to set the Factory because the URL class will use, for the jndi
> protocol, the class named:
> "org.apache.naming.resources" + ".jndi" + ".Handler"; if the proprty isn't
> set i register the Factory.
>
> Then, i' ve modified catalina.sh setting CATALINA_OPTS with value:
>     "-Djava.protocol.handler.pkgs=org.apache.naming.resources"
> -------------------------------------------------------------------------
>


Is there anyone can tell me if what i encountered is a bug in Tomcat or if i
made something wrong?
Are you interested to the patch i post to not register the
URLStreamHandlerFactory?

Best Regards,
Alberto.



--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>