Author: davsclaus
Date: Sun Apr 27 03:23:31 2008
New Revision: 651913
URL: http://svn.apache.org/viewvc?rev=651913&view=rev
Log:
CAMEL-335
- Default port number for protocols
- Username can be set using URI parameter
- Use of URI fragment removed (no other components use it at all, and it was
not documented, and had mixed purpose)
- imaps protocol added
Added:
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
(with props)
activemq/camel/trunk/components/camel-mail/src/main/resources/META-INF/services/org/apache/camel/component/imaps
Modified:
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
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/MailEndpoint.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/MailBinding.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java?rev=651913&r1=651912&r2=651913&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
(original)
+++
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailBinding.java
Sun Apr 27 03:23:31 2008
@@ -41,6 +41,7 @@
* @version $Revision$
*/
public class MailBinding {
+
public void populateMailMessage(MailEndpoint endpoint, MimeMessage
mimeMessage, Exchange exchange) {
try {
appendHeadersFromCamel(mimeMessage, exchange, exchange.getIn());
@@ -62,9 +63,8 @@
mimeMessage.setText(exchange.getIn().getBody(String.class));
}
} catch (Exception e) {
- throw new RuntimeMailException(
- "Failed to populate body due to: "
+ e + ". Exchange: " + exchange,
- e);
+ throw new RuntimeMailException("Failed to populate body due to: "
+ e.getMessage() +
+ ". Exchange: " + exchange, e);
}
}
@@ -74,15 +74,13 @@
/**
* Extracts the body from the Mail message
- *
- * @param exchange
- * @param message
*/
public Object extractBodyFromMail(MailExchange exchange, Message message) {
try {
return message.getContent();
} catch (Exception e) {
- throw new RuntimeMailException("Failed to extract body due to: " +
e + ". Message: " + message, e);
+ throw new RuntimeMailException("Failed to extract body due to: " +
e.getMessage() +
+ ". Exchange: " + exchange + ". Message: " + message, e);
}
}
@@ -129,7 +127,7 @@
textBodyPart.setContent(exchange.getIn().getBody(String.class),
"text/plain");
multipart.addBodyPart(textBodyPart);
- BodyPart messageBodyPart = null;
+ BodyPart messageBodyPart;
Set<Map.Entry<String, DataHandler>> entries =
camelMessage.getAttachments().entrySet();
for (Map.Entry<String, DataHandler> entry : entries) {
@@ -170,8 +168,7 @@
}
/**
- * Strategy to allow filtering of attachments which are put on the Mail
- * message
+ * Strategy to allow filtering of attachments which are put on the Mail
message
*/
protected boolean shouldOutputAttachment(org.apache.camel.Message
camelMessage, String headerName,
DataHandler headerValue) {
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=651913&r1=651912&r2=651913&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
Sun Apr 27 03:23:31 2008
@@ -29,19 +29,23 @@
* @version $Revision$
*/
public class MailConfiguration implements Cloneable {
- private String defaultEncoding;
- private String host;
+
+ public static final String DEFAULT_FOLDER_NAME = "INBOX";
+ public static final String DEFAULT_FROM = "[EMAIL PROTECTED]";
+
private Properties javaMailProperties;
- private String password;
private String protocol;
- private Session session;
- private String username;
+ private String host;
private int port = -1;
+ private String username;
+ private String password;
+ private Session session;
+ private String defaultEncoding;
+ private String from = DEFAULT_FROM;
private String destination;
- private String from = "[EMAIL PROTECTED]";
+ private String folderName = DEFAULT_FOLDER_NAME;
private boolean deleteProcessedMessages = true;
- private String folderName = "INBOX";
- private boolean ignoreUriScheme;
+ private boolean ignoreUriScheme = false;
public MailConfiguration() {
}
@@ -69,27 +73,23 @@
setProtocol(scheme);
}
}
+
String userInfo = uri.getUserInfo();
if (userInfo != null) {
setUsername(userInfo);
+
+ // set default destination to [EMAIL PROTECTED] for backwards
compatibility
+ // can be overridden by URI parameters
+ setDestination(userInfo + "@" + host);
}
+
int port = uri.getPort();
if (port >= 0) {
setPort(port);
- }
-
- // we can either be invoked with
- // mailto:address
- // or
- // smtp:[EMAIL PROTECTED]:port/[EMAIL PROTECTED]
-
- String fragment = uri.getFragment();
- if (fragment == null || fragment.length() == 0) {
- fragment = userInfo + "@" + host;
} else {
- setFolderName(fragment);
+ // resolve default port if no port number was provided
+ setPort(MailUtils.getDefaultPortForProtocol(uri.getScheme()));
}
- setDestination(fragment);
}
public JavaMailConnection createJavaMailConnection(MailEndpoint
mailEndpoint) {
@@ -97,7 +97,6 @@
if (defaultEncoding != null) {
answer.setDefaultEncoding(defaultEncoding);
}
- // answer.setDefaultFileTypeMap(fileTypeMap);
if (host != null) {
answer.setHost(host);
}
Modified:
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java?rev=651913&r1=651912&r2=651913&view=diff
==============================================================================
---
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
(original)
+++
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailEndpoint.java
Sun Apr 27 03:23:31 2008
@@ -53,6 +53,7 @@
public Consumer<MailExchange> createConsumer(Processor processor) throws
Exception {
JavaMailConnection connection =
configuration.createJavaMailConnection(this);
String protocol = getConfiguration().getProtocol();
+ // TODO: Why do we change protocol from smtp to pop3?
if (protocol.equals("smtp")) {
protocol = "pop3";
}
Added:
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java?rev=651913&view=auto
==============================================================================
---
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
(added)
+++
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
Sun Apr 27 03:23:31 2008
@@ -0,0 +1,81 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.component.mail;
+
+/**
+ * Mail utility class.
+ * <p>
+ * Parts of the code copied from Apache ServiceMix.
+ *
+ * @version $Revision$
+ */
+public class MailUtils {
+
+ public static final int DEFAULT_PORT_SMTP = 25;
+ public static final int DEFAULT_PORT_SMTPS = 465;
+ public static final int DEFAULT_PORT_POP3 = 110;
+ public static final int DEFAULT_PORT_POP3S = 995;
+ public static final int DEFAULT_PORT_NNTP = 119;
+ public static final int DEFAULT_PORT_IMAP = 143;
+ public static final int DEFAULT_PORT_IMAPS = 993;
+
+ public static final String PROTOCOL_SMTP = "smtp";
+ public static final String PROTOCOL_SMTPS = "smtps";
+ public static final String PROTOCOL_POP3 = "pop3";
+ public static final String PROTOCOL_POP3S = "pop3s";
+ public static final String PROTOCOL_NNTP = "nntp";
+ public static final String PROTOCOL_IMAP = "imap";
+ public static final String PROTOCOL_IMAPS = "imaps";
+
+ private MailUtils() {
+ }
+
+ /**
+ * Returns the default port for a given protocol.
+ * <p>
+ * If a protocol could not successfully be determined the default port
number for SMTP protocol is returned.
+ *
+ * @param protocol the protocol
+ * @return the default port
+ */
+ public static int getDefaultPortForProtocol(final String protocol) {
+ int port = DEFAULT_PORT_SMTP;
+
+ if (protocol != null) {
+ if (protocol.equalsIgnoreCase(PROTOCOL_IMAP)) {
+ port = DEFAULT_PORT_IMAP;
+ } else if (protocol.equalsIgnoreCase(PROTOCOL_IMAPS)) {
+ port = DEFAULT_PORT_IMAPS;
+ } else if (protocol.equalsIgnoreCase(PROTOCOL_NNTP)) {
+ port = DEFAULT_PORT_NNTP;
+ } else if (protocol.equalsIgnoreCase(PROTOCOL_POP3)) {
+ port = DEFAULT_PORT_POP3;
+ } else if (protocol.equalsIgnoreCase(PROTOCOL_POP3S)) {
+ port = DEFAULT_PORT_POP3S;
+ } else if (protocol.equalsIgnoreCase(PROTOCOL_SMTP)) {
+ port = DEFAULT_PORT_SMTP;
+ } else if (protocol.equalsIgnoreCase(PROTOCOL_SMTPS)) {
+ port = DEFAULT_PORT_SMTPS;
+ } else {
+ port = DEFAULT_PORT_SMTP;
+ }
+ }
+
+ return port;
+ }
+
+}
Propchange:
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange:
activemq/camel/trunk/components/camel-mail/src/main/java/org/apache/camel/component/mail/MailUtils.java
------------------------------------------------------------------------------
svn:keywords = Rev Date
Added:
activemq/camel/trunk/components/camel-mail/src/main/resources/META-INF/services/org/apache/camel/component/imaps
URL:
http://svn.apache.org/viewvc/activemq/camel/trunk/components/camel-mail/src/main/resources/META-INF/services/org/apache/camel/component/imaps?rev=651913&view=auto
==============================================================================
---
activemq/camel/trunk/components/camel-mail/src/main/resources/META-INF/services/org/apache/camel/component/imaps
(added)
+++
activemq/camel/trunk/components/camel-mail/src/main/resources/META-INF/services/org/apache/camel/component/imaps
Sun Apr 27 03:23:31 2008
@@ -0,0 +1,18 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership.
+# The ASF licenses this file to You under the Apache License, Version 2.0
+# (the "License"); you may not use this file except in compliance with
+# the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+class=org.apache.camel.component.mail.MailComponent
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=651913&r1=651912&r2=651913&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
Sun Apr 27 03:23:31 2008
@@ -25,44 +25,76 @@
public class MailComponentTest extends ContextTestSupport {
public void testMailEndpointsAreConfiguredProperlyWhenUsingSmtp() throws
Exception {
- MailEndpoint endpoint = resolveMandatoryEndpoint("smtp://[EMAIL
PROTECTED]:30/subject");
+ MailEndpoint endpoint = resolveMandatoryEndpoint("smtp://[EMAIL
PROTECTED]:25/subject");
MailConfiguration config = endpoint.getConfiguration();
assertEquals("getProtocol()", "smtp", config.getProtocol());
assertEquals("getHost()", "myhost", config.getHost());
- assertEquals("getPort()", 30, config.getPort());
+ assertEquals("getPort()", 25, config.getPort());
assertEquals("getUsername()", "james", config.getUsername());
assertEquals("getDestination()", "[EMAIL PROTECTED]",
config.getDestination());
assertEquals("folder", "INBOX", config.getFolderName());
}
public void testMailEndpointsAreConfiguredProperlyWhenUsingImap() throws
Exception {
- MailEndpoint endpoint = resolveMandatoryEndpoint("imap://[EMAIL
PROTECTED]:30/subject");
+ MailEndpoint endpoint = resolveMandatoryEndpoint("imap://[EMAIL
PROTECTED]:143/subject");
MailConfiguration config = endpoint.getConfiguration();
assertEquals("getProtocol()", "imap", config.getProtocol());
assertEquals("getHost()", "myhost", config.getHost());
- assertEquals("getPort()", 30, config.getPort());
+ assertEquals("getPort()", 143, config.getPort());
assertEquals("getUsername()", "james", config.getUsername());
assertEquals("getDestination()", "[EMAIL PROTECTED]",
config.getDestination());
assertEquals("folder", "INBOX", config.getFolderName());
}
public void testMailEndpointsAreConfiguredProperlyWhenUsingPop() throws
Exception {
- MailEndpoint endpoint = resolveMandatoryEndpoint("pop3://[EMAIL
PROTECTED]:30/subject");
+ MailEndpoint endpoint = resolveMandatoryEndpoint("pop3://[EMAIL
PROTECTED]:110/subject");
MailConfiguration config = endpoint.getConfiguration();
assertEquals("getProtocol()", "pop3", config.getProtocol());
assertEquals("getHost()", "myhost", config.getHost());
- assertEquals("getPort()", 30, config.getPort());
+ assertEquals("getPort()", 110, config.getPort());
assertEquals("getUsername()", "james", config.getUsername());
assertEquals("getDestination()", "[EMAIL PROTECTED]",
config.getDestination());
assertEquals("folder", "INBOX", config.getFolderName());
}
- public void testDefaultConfiguration() throws Exception {
+ public void testDefaultSMTPConfiguration() throws Exception {
MailEndpoint endpoint = resolveMandatoryEndpoint("smtp://[EMAIL
PROTECTED]");
MailConfiguration config = endpoint.getConfiguration();
assertEquals("getProtocol()", "smtp", config.getProtocol());
assertEquals("getHost()", "myhost", config.getHost());
- assertEquals("getPort()", -1, config.getPort());
+ assertEquals("getPort()", MailUtils.DEFAULT_PORT_SMTP,
config.getPort());
+ assertEquals("getUsername()", "james", config.getUsername());
+ assertEquals("getDestination()", "[EMAIL PROTECTED]",
config.getDestination());
+ assertEquals("folder", "INBOX", config.getFolderName());
+ assertEquals("encoding", null, config.getDefaultEncoding());
+ assertEquals("from", "[EMAIL PROTECTED]", config.getFrom());
+ assertEquals("password", "secret", config.getPassword());
+ assertEquals(true, config.isDeleteProcessedMessages());
+ assertEquals(false, config.isIgnoreUriScheme());
+ }
+
+ public void testDefaultPOP3Configuration() throws Exception {
+ MailEndpoint endpoint = resolveMandatoryEndpoint("pop3://[EMAIL
PROTECTED]");
+ MailConfiguration config = endpoint.getConfiguration();
+ assertEquals("getProtocol()", "pop3", config.getProtocol());
+ assertEquals("getHost()", "myhost", config.getHost());
+ assertEquals("getPort()", MailUtils.DEFAULT_PORT_POP3,
config.getPort());
+ assertEquals("getUsername()", "james", config.getUsername());
+ assertEquals("getDestination()", "[EMAIL PROTECTED]",
config.getDestination());
+ assertEquals("folder", "INBOX", config.getFolderName());
+ assertEquals("encoding", null, config.getDefaultEncoding());
+ assertEquals("from", "[EMAIL PROTECTED]", config.getFrom());
+ assertEquals("password", "secret", config.getPassword());
+ assertEquals(true, config.isDeleteProcessedMessages());
+ assertEquals(false, config.isIgnoreUriScheme());
+ }
+
+ public void testDefaultIMAPConfiguration() throws Exception {
+ MailEndpoint endpoint = resolveMandatoryEndpoint("imap://[EMAIL
PROTECTED]");
+ MailConfiguration config = endpoint.getConfiguration();
+ assertEquals("getProtocol()", "imap", config.getProtocol());
+ assertEquals("getHost()", "myhost", config.getHost());
+ assertEquals("getPort()", MailUtils.DEFAULT_PORT_IMAP,
config.getPort());
assertEquals("getUsername()", "james", config.getUsername());
assertEquals("getDestination()", "[EMAIL PROTECTED]",
config.getDestination());
assertEquals("folder", "INBOX", config.getFolderName());
@@ -74,8 +106,8 @@
}
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");
+ MailEndpoint endpoint = resolveMandatoryEndpoint("smtp://[EMAIL
PROTECTED]:30/subject?password=secret"
+ + "&[EMAIL
PROTECTED]&DeleteProcessedMessages=false&defaultEncoding=iso-8859-1&folderName=riders");
MailConfiguration config = endpoint.getConfiguration();
assertEquals("getProtocol()", "smtp", config.getProtocol());
assertEquals("getHost()", "myhost", config.getHost());
@@ -87,6 +119,38 @@
assertEquals("from", "[EMAIL PROTECTED]", config.getFrom());
assertEquals("password", "secret", config.getPassword());
assertEquals(false, config.isDeleteProcessedMessages());
+ assertEquals(false, config.isIgnoreUriScheme());
+ }
+
+ public void testDestination() {
+ MailEndpoint endpoint = resolveMandatoryEndpoint("smtp://[EMAIL
PROTECTED]:25/?password=secret&[EMAIL PROTECTED]&folderName=XXX");
+ MailConfiguration config = endpoint.getConfiguration();
+ assertEquals("getProtocol()", "smtp", config.getProtocol());
+ assertEquals("getHost()", "myhost", config.getHost());
+ assertEquals("getPort()", 25, config.getPort());
+ assertEquals("getUsername()", "james", config.getUsername());
+ assertEquals("getDestination()", "[EMAIL PROTECTED]",
config.getDestination());
+ assertEquals("folder", "XXX", config.getFolderName());
+ assertEquals("encoding", null, config.getDefaultEncoding());
+ assertEquals("from", "[EMAIL PROTECTED]", config.getFrom());
+ assertEquals("password", "secret", config.getPassword());
+ assertEquals(true, config.isDeleteProcessedMessages());
+ assertEquals(false, config.isIgnoreUriScheme());
+ }
+
+ public void testNoUserInfoButUsername() {
+ MailEndpoint endpoint =
resolveMandatoryEndpoint("smtp://myhost:25/?password=secret&username=james");
+ MailConfiguration config = endpoint.getConfiguration();
+ assertEquals("getProtocol()", "smtp", config.getProtocol());
+ assertEquals("getHost()", "myhost", config.getHost());
+ assertEquals("getPort()", 25, config.getPort());
+ assertEquals("getUsername()", "james", config.getUsername());
+ assertEquals("getDestination()", null, config.getDestination());
+ assertEquals("folder", "INBOX", config.getFolderName());
+ assertEquals("encoding", null, config.getDefaultEncoding());
+ assertEquals("from", "[EMAIL PROTECTED]", config.getFrom());
+ assertEquals("password", "secret", config.getPassword());
+ assertEquals(true, config.isDeleteProcessedMessages());
assertEquals(false, config.isIgnoreUriScheme());
}