billbarker    01/12/27 22:13:22

  Modified:    src/share/org/apache/tomcat/util/net
                        StreamHandlerFactory.java
  Log:
  It is really great when you learn to read :)
  
  I had totally misunderstood the java.net.URL javadocs, so this wasn't working at 
all.  This shouldn't effect any outstanding bugs (due to a weird combination of bugs 
in the previous version, that prevented this class from doing much of anything).  
However, it will now hopefully work as advertised.
  
  TODO: make the loading of this configurable.
  
  Revision  Changes    Path
  1.7       +18 -18    
jakarta-tomcat/src/share/org/apache/tomcat/util/net/StreamHandlerFactory.java
  
  Index: StreamHandlerFactory.java
  ===================================================================
  RCS file: 
/home/cvs/jakarta-tomcat/src/share/org/apache/tomcat/util/net/StreamHandlerFactory.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StreamHandlerFactory.java 2001/12/27 07:10:11     1.6
  +++ StreamHandlerFactory.java 2001/12/28 06:13:22     1.7
  @@ -76,7 +76,7 @@
        */
       public static final String SYS_PROTOCOLS = "java.protocol.handler.pkgs";
       private String protocolString = null;
  -    private Hashtable protocols = new Hashtable();
  +    private Vector protocols = null;
       private Jdk11Compat jdk11Compat = Jdk11Compat.getJdkCompat();
   
       public StreamHandlerFactory() {
  @@ -96,21 +96,28 @@
       public  URLStreamHandler createURLStreamHandler(String protoS) {
        if("jar".equalsIgnoreCase(protoS) || "file".equalsIgnoreCase(protoS) )
            return null;
  -     if(protocolString != System.getProperty(SYS_PROTOCOLS))
  -         loadProtocols();
  +     // The following is broken in a sandbox. 
  +     // Maybe fix with privileged, but probably not. 
  +     // LoadOnStartups have done their thing before we're set.
  +     //if(protocolString != System.getProperty(SYS_PROTOCOLS))
  +     //    loadProtocols();
        ClassLoader acl = jdk11Compat.getContextClassLoader();
        if(acl == null)
            acl = getClass().getClassLoader();
        Class phldrC = null;
  -     String phldrCN = (String)protocols.get(protoS);
  -     if(phldrCN != null) {
  -         try {
  -             phldrC = acl.loadClass(phldrCN);
  -         } catch(ClassNotFoundException cnfex){
  +     if(protocols != null) {
  +         Enumeration e = protocols.elements();
  +         while(e.hasMoreElements()) {
  +             String phldrPK = (String)e.nextElement();
  +             try {
  +                 phldrC = acl.loadClass(phldrPK+"."+protoS+".Handler");
  +                 break;
  +             } catch(ClassNotFoundException cnfex){
  +             }
            }
        }
        if(phldrC == null){
  -         phldrCN = "sun.net.www.protocol." + protoS + ".Handler";
  +         String phldrCN = "sun.net.www.protocol." + protoS + ".Handler";
            try {
                phldrC = acl.loadClass(phldrCN);
            } catch(ClassNotFoundException cnfex) {
  @@ -135,19 +142,12 @@
        if(protocolString == System.getProperty(SYS_PROTOCOLS)) 
            return;
        String protocolS = System.getProperty(SYS_PROTOCOLS);
  -     protocols.clear();
        if(protocolS != null) {
  +         protocols = new Vector();
            StringTokenizer tok = new StringTokenizer(protocolS,"|");
            while(tok.hasMoreTokens()) {
                String protStr = tok.nextToken();
  -             int hpos = protStr.lastIndexOf(".Handler");
  -             if(hpos >= 0) {
  -                 protStr = protStr.substring(0,hpos);
  -                 int npos = protStr.lastIndexOf('.');
  -                 String prot = protStr.substring(hpos+1);
  -                 String protC = protStr.substring(0,hpos);
  -                 protocols.put(prot,protC);
  -             }
  +             protocols.addElement(protStr);
            }
        }
        protocolString = protocolS;
  
  
  

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to