You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ri...@apache.org on 2006/05/03 01:19:18 UTC

svn commit: r399080 - /geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/Session.java

Author: rickmcguire
Date: Tue May  2 16:19:15 2006
New Revision: 399080

URL: http://svn.apache.org/viewcvs?rev=399080&view=rev
Log:
GERONIMO-1968 Session getProvider() resolution not properly implementing search order.



Modified:
    geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/Session.java

Modified: geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/Session.java
URL: http://svn.apache.org/viewcvs/geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/Session.java?rev=399080&r1=399079&r2=399080&view=diff
==============================================================================
--- geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/Session.java (original)
+++ geronimo/specs/trunk/geronimo-spec-javamail/src/main/java/javax/mail/Session.java Tue May  2 16:19:15 2006
@@ -209,16 +209,26 @@
      */
     public Provider getProvider(String protocol) throws NoSuchProviderException {
         ProviderInfo info = getProviderInfo();
-        Provider provider;
+        Provider provider = null;
         String providerName = properties.getProperty("mail." + protocol + ".class");
         if (providerName != null) {
             provider = (Provider) info.byClassName.get(providerName);
-        } else {
+            if (debug) {
+                writeDebug("DEBUG: new provider loaded: " + provider.toString());
+            }
+        }
+
+        // if not able to locate this by class name, just grab a registered protocol.
+        if (provider == null) {
             provider = (Provider) info.byProtocol.get(protocol);
         }
+
         if (provider == null) {
             throw new NoSuchProviderException("Unable to locate provider for protocol: " + protocol);
         }
+        if (debug) {
+            writeDebug("DEBUG: getProvider() returning provider " + provider.toString());
+        }
         return provider;
     }
 
@@ -446,7 +456,7 @@
         }
     }
 
-    private static ProviderInfo getProviderInfo() {
+    private ProviderInfo getProviderInfo() {
         ClassLoader cl = getClassLoader();
         ProviderInfo info = (ProviderInfo) providersByClassLoader.get(cl);
         if (info == null) {
@@ -473,7 +483,7 @@
         return cl;
     }
 
-    private static ProviderInfo loadProviders(ClassLoader cl) {
+    private ProviderInfo loadProviders(ClassLoader cl) {
         // we create a merged map from reading all of the potential address map entries.  The locations
         // searched are:
         //   1.   java.home/lib/javamail.address.map
@@ -493,6 +503,10 @@
             Enumeration e = cl.getResources("META-INF/javamail.default.providers");
             while (e.hasMoreElements()) {
                 URL url = (URL) e.nextElement();
+                if (debug) {
+                    writeDebug("Loading javamail.default.providers from " + url.toString());
+                }
+
                 InputStream is = url.openStream();
                 try {
                     loadProviders(info, is);
@@ -512,6 +526,9 @@
             InputStream is = new FileInputStream(file);
             try {
                 loadProviders(info, is);
+                if (debug) {
+                    writeDebug("Loaded lib/javamail.providers from " + file.toString());
+                }
             } finally{
                 is.close();
             }
@@ -525,6 +542,9 @@
             Enumeration e = cl.getResources("META-INF/javamail.providers");
             while (e.hasMoreElements()) {
                 URL url = (URL) e.nextElement();
+                if (debug) {
+                    writeDebug("Loading META-INF/javamail.providers from " + url.toString());
+                }
                 InputStream is = url.openStream();
                 try {
                     loadProviders(info, is);
@@ -541,7 +561,7 @@
         return info;
     }
 
-    private static void loadProviders(ProviderInfo info, InputStream is) throws IOException {
+    private void loadProviders(ProviderInfo info, InputStream is) throws IOException {
         BufferedReader reader = new BufferedReader(new InputStreamReader(is));
         String line;
         while ((line = reader.readLine()) != null) {
@@ -579,6 +599,10 @@
                 //todo should we log a warning?
                 continue;
             }
+
+            if (debug) {
+                writeDebug("DEBUG: loading new provider protocol=" + protocol + ", className=" + className + ", vendor=" + vendor + ", version=" + version);
+            }
             Provider provider = new Provider(protocol, className, type, vendor, version);
             if (!info.byClassName.containsKey(className)) {
                 info.byClassName.put(className, provider);
@@ -696,6 +720,15 @@
         }
 
         return addressMap;
+    }
+
+    /**
+     * Private convenience routine for debug output.
+     *
+     * @param msg    The message to write out to the debug stream.
+     */
+    private void writeDebug(String msg) {
+        debugOut.println(msg);
     }