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