2014-11-18 11:29 GMT+03:00 Mark Thomas <ma...@apache.org>:
> On 17/11/2014 22:47, Ignacio Ocampo wrote:
>> Hi all,
>>
>> I'm using a third part library for NTLM authentication, one of their
>> requeriments is to set: System.setProperty("java.protocol.handler.pkgs",
>> "jespa");
>>
>> But, it does not take any effect, I see Tomcat 7 source code here:
>>
>> https://github.com/apache/tomcat70/blob/051a1dfd4c2943a8e8001c6be88d208cac72faff/java/org/apache/catalina/loader/WebappLoader.java#L561
>>
>>         // Register a stream handler factory for the JNDI protocol
>>         URLStreamHandlerFactory streamHandlerFactory =
>>                 DirContextURLStreamHandlerFactory.getInstance();
>>         if (first) {
>>             first = false;
>>             try {
>> *                URL.setURLStreamHandlerFactory(streamHandlerFactory);*
>>             } catch (Exception e) {
>>                 // Log and continue anyway, this is not critical
>>                 log.error("Error registering jndi stream handler", e);
>>             } catch (Throwable t) {
>>                 ExceptionUtils.handleThrowable(t);
>>                 // This is likely a dual registration
>>                 log.info("Dual registration of jndi stream handler: "
>>                          + t.getMessage());
>>             }
>>         }
>>
>> And I see *URL.setURLStreamHandlerFactory *documentation at:
>> https://docs.oracle.com/javase/7/docs/api/java/net/URL.html#setURLStreamHandlerFactory(java.net.URLStreamHandlerFactory)
>>
>> public static void setURLStreamHandlerFactory(URLStreamHandlerFactory
>> <https://docs.oracle.com/javase/7/docs/api/java/net/URLStreamHandlerFactory.html>
>> fac)
>>
>> Sets an application's URLStreamHandlerFactory. This method can be called at
>> most once in a given Java Virtual Machine.
>>
>> The URLStreamHandlerFactory instance is used to construct a stream protocol
>> handler from a protocol name.
>> I tried set -Djava.protocol.handler.pkgs=jespa in catalina.sh and put my
>> jars in jdk/lib, jdk/jre/lib, tomcat/lib, tomcat/webapps/ROOT/WEB-INF/lib,
>> but nothing.
>>
>> I hope your comments.
>
> Yes, this is a problem that isn't addressed in Tomcat 7.
>
> It is addressed in Tomcat 8 (and 9) where we add a Tomcat specific
> factory. This factory avoids the problem of only being able to call
> setURLStreamHandlerFactory() once by adding the Tomcat specific factory
> which allows additional handler factories to be added.


1. It is possible to inject user's URL factories into
DirContextURLStreamHandlerFactory of Tomcat 7. See static method added
in
http://svn.apache.org/r1078601
https://issues.apache.org/bugzilla/show_bug.cgi?id=26701

2. java.protocol.handler.pkgs  shall work, but it have been a long
time since I last experimented with that.

> I tried set -Djava.protocol.handler.pkgs= jespa in catalina.sh

3. Exactly how you did it?
4. Modifying catalina.sh is usually a bad thing.
Modifications shall go into a "$CATALINA_BASE/bin/setenv.sh" file.

> and put my jars in jdk/lib, jdk/jre/lib,

5. Are those the Java version that you are using?  Are they visible to
the class loader (e.g can you load the class in any test JSP page?)

>  tomcat/lib, tomcat/webapps/ROOT/WEB-INF/lib,
but nothing.

Is your webapp the ROOT one?

If it cannot be in $CATALINA_BASE/lib then put it elsewhere and add it
to CLASSPATH variable in setenv.sh.


6.  Is "jespa" the correct value for that property?  It shall be a
correct Java package name.

Best regards,
Konstantin Kolinko

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@tomcat.apache.org
For additional commands, e-mail: users-h...@tomcat.apache.org

Reply via email to