Author: davsclaus
Date: Wed May  7 21:41:55 2008
New Revision: 654409

URL: http://svn.apache.org/viewvc?rev=654409&view=rev
Log:
CAMEL-335
- MailConsumer only starts to poll when its connected and can reconnect if 
needed. Tested SSL with gmail, see documentation on wiki.

Modified:
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
    
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
    
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentTest.java

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java?rev=654409&r1=654408&r2=654409&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConfiguration.java
 Wed May  7 21:41:55 2008
@@ -144,6 +144,18 @@
         return properties;
     }
 
+   /**
+     * Is the used protocol to be secure or not
+     */
+    public boolean isSecureProtocol() {
+        return this.protocol.equalsIgnoreCase("smtps") || 
this.protocol.equalsIgnoreCase("pop3s")
+               || this.protocol.equalsIgnoreCase("imaps");
+    }
+
+    public String getMailStoreLogInformation() {
+        return "MailStore [" + protocol + "//" + host + ":" + port + "] 
folder=[" + folderName + "]";
+    }
+
     // Properties
     // 
-------------------------------------------------------------------------
 
@@ -325,4 +337,5 @@
     public void setConnectionTimeout(long connectionTimeout) {
         this.connectionTimeout = connectionTimeout;
     }
+
 }

Modified: 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java?rev=654409&r1=654408&r2=654409&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailConsumer.java
 Wed May  7 21:41:55 2008
@@ -52,23 +52,14 @@
     @Override
     protected void doStart() throws Exception {
         super.doStart();
-
-        MailConfiguration config = endpoint.getConfiguration();
-        store = sender.getSession().getStore(config.getProtocol());
-        store.connect(config.getHost(), config.getPort(), 
config.getUsername(), config.getPassword());
-
-        folder = store.getFolder(config.getFolderName());
-        if (folder == null || !folder.exists()) {
-            throw new FolderNotFoundException(folder, "Folder not found or 
invalid: " + config.getFolderName());
-        }
     }
 
     @Override
     protected void doStop() throws Exception {
-        if (folder.isOpen()) {
+        if (folder != null && folder.isOpen()) {
             folder.close(true);
         }
-        if (store.isConnected()) {
+        if (store != null && store.isConnected()) {
             store.close();
         }
 
@@ -76,9 +67,11 @@
     }
 
     protected void poll() throws Exception {
+        ensureIsConnected();
+
         if (store == null || folder == null) {
-            throw new IllegalStateException("MailConsumer did not start 
properly. Camel does not have access to the MailStore or MailFolder."
-                + " Check log files for errors reported during starting this 
component");
+            throw new IllegalStateException("MailConsumer did not connect 
properly to the MailStore: " +
+                endpoint.getConfiguration().getMailStoreLogInformation());
         }
 
         if (LOG.isDebugEnabled()) {
@@ -121,6 +114,25 @@
         }
     }
 
+    protected void ensureIsConnected() throws MessagingException {
+        MailConfiguration config = endpoint.getConfiguration();
+
+        if (store == null || !store.isConnected()) {
+            store = sender.getSession().getStore(config.getProtocol());
+            if (LOG.isDebugEnabled()) {
+                LOG.debug("Connecting to MailStore at host " + 
config.getHost() + " on port " + config.getPort());
+            }
+            store.connect(config.getHost(), config.getPort(), 
config.getUsername(), config.getPassword());
+        }
+
+        if (folder == null) {
+            folder = store.getFolder(config.getFolderName());
+            if (folder == null || !folder.exists()) {
+                throw new FolderNotFoundException(folder, "Folder not found or 
invalid: " + config.getFolderName());
+            }
+        }
+    }
+
     /**
      * Process all the messages
      */

Modified: 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentTest.java
URL: 
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentTest.java?rev=654409&r1=654408&r2=654409&view=diff
==============================================================================
--- 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentTest.java
 (original)
+++ 
activemq/camel/trunk/components/camel-mail/src/test/java/org/apache/camel/component/mail/MailComponentTest.java
 Wed May  7 21:41:55 2008
@@ -110,7 +110,7 @@
 
     public void testManyConfigurations() throws Exception {
         MailEndpoint endpoint = resolveMandatoryEndpoint("smtp://[EMAIL 
PROTECTED]:30/subject?password=secret"
-            + "&[EMAIL 
PROTECTED]&DeleteProcessedMessages=false&defaultEncoding=iso-8859-1&folderName=riders");
+            + "&[EMAIL 
PROTECTED]&deleteProcessedMessages=false&defaultEncoding=iso-8859-1&folderName=riders");
         MailConfiguration config = endpoint.getConfiguration();
         assertEquals("getProtocol()", "smtp", config.getProtocol());
         assertEquals("getHost()", "myhost", config.getHost());


Reply via email to