Author: veithen
Date: Sun Oct 5 08:00:36 2008
New Revision: 701805
URL: http://svn.apache.org/viewvc?rev=701805&view=rev
Log:
MailTransportListener: Split the processMail method into several methods to
improve readability. (No functional changes)
Modified:
webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailTransportListener.java
Modified:
webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailTransportListener.java
URL:
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailTransportListener.java?rev=701805&r1=701804&r2=701805&view=diff
==============================================================================
---
webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailTransportListener.java
(original)
+++
webservices/commons/trunk/modules/transport/modules/mail/src/main/java/org/apache/axis2/transport/mail/MailTransportListener.java
Sun Oct 5 08:00:36 2008
@@ -23,6 +23,7 @@
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.context.ConfigurationContext;
+import org.apache.axis2.context.MessageContext;
import org.apache.axis2.description.AxisOperation;
import org.apache.axis2.description.AxisService;
import org.apache.axis2.description.Parameter;
@@ -34,7 +35,14 @@
import org.apache.axis2.transport.base.ManagementSupport;
import org.apache.axis2.transport.base.ParamUtils;
-import javax.mail.*;
+import javax.mail.Flags;
+import javax.mail.Folder;
+import javax.mail.Header;
+import javax.mail.Message;
+import javax.mail.MessagingException;
+import javax.mail.Multipart;
+import javax.mail.Session;
+import javax.mail.Store;
import javax.mail.internet.AddressException;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
@@ -237,36 +245,10 @@
private void processMail(Message message, PollTableEntry entry)
throws MessagingException, IOException {
- if (message instanceof MimeMessage) {
- MimeMessage mimeMessage = (MimeMessage) message;
- if (mimeMessage.getContent() instanceof Multipart) {
- Multipart mp = (Multipart) mimeMessage.getContent();
- for (int i=0; i<mp.getCount(); i++) {
- MimeBodyPart mbp = (MimeBodyPart) mp.getBodyPart(i);
- int size = mbp.getSize();
- if (size != -1) {
- metrics.incrementBytesReceived(size);
- }
- }
- } else {
- int size = mimeMessage.getSize();
- if (size != -1) {
- metrics.incrementBytesReceived(size);
- }
- }
- }
+ updateMetrics(message);
// populate transport headers using the mail headers
- Map trpHeaders = new HashMap();
- try {
- Enumeration e = message.getAllHeaders();
- while (e.hasMoreElements()) {
- Header h = (Header) e.nextElement();
- if (entry.retainHeader(h.getName())) {
- trpHeaders.put(h.getName(), h.getValue());
- }
- }
- } catch (MessagingException ignore) {}
+ Map trpHeaders = getTransportHeaders(message, entry);
// FIXME: we should already skip these messages in the checkMail method
// some times the mail server sends a special mail message which is
not relavent
@@ -298,7 +280,86 @@
log.debug("Processing message as Content-Type : " + contentType);
}
- org.apache.axis2.context.MessageContext msgContext =
createMessageContext();
+ MessageContext msgContext = createMessageContext(entry);
+
+ MailOutTransportInfo outInfo = buildOutTransportInfo(message, entry);
+
+ // save out transport information
+ msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, outInfo);
+
+ // set message context From
+ if (outInfo.getFromAddress() != null) {
+ msgContext.setFrom(
+ new EndpointReference(MailConstants.TRANSPORT_PREFIX +
+ outInfo.getFromAddress().getAddress()));
+ }
+
+ // save original mail message id message context MessageID
+ msgContext.setMessageID(outInfo.getRequestMessageID());
+
+ // set the message payload to the message context
+ MailUtils.getInstace().setSOAPEnvelope(message, msgContext,
contentType);
+
+ String soapAction = (String) trpHeaders.get(BaseConstants.SOAPACTION);
+ if (soapAction == null && message.getSubject() != null &&
+ message.getSubject().startsWith(BaseConstants.SOAPACTION)) {
+ soapAction =
message.getSubject().substring(BaseConstants.SOAPACTION.length());
+ if (soapAction.startsWith(":")) {
+ soapAction = soapAction.substring(1).trim();
+ }
+ }
+
+ handleIncomingMessage(
+ msgContext,
+ trpHeaders,
+ soapAction,
+ contentType
+ );
+
+ if (log.isDebugEnabled()) {
+ log.debug("Processed message : " + message.getMessageNumber() +
+ " :: " + message.getSubject());
+ }
+ }
+
+ private void updateMetrics(Message message) throws IOException,
MessagingException {
+ if (message instanceof MimeMessage) {
+ MimeMessage mimeMessage = (MimeMessage) message;
+ if (mimeMessage.getContent() instanceof Multipart) {
+ Multipart mp = (Multipart) mimeMessage.getContent();
+ for (int i=0; i<mp.getCount(); i++) {
+ MimeBodyPart mbp = (MimeBodyPart) mp.getBodyPart(i);
+ int size = mbp.getSize();
+ if (size != -1) {
+ metrics.incrementBytesReceived(size);
+ }
+ }
+ } else {
+ int size = mimeMessage.getSize();
+ if (size != -1) {
+ metrics.incrementBytesReceived(size);
+ }
+ }
+ }
+ }
+
+ private Map getTransportHeaders(Message message, PollTableEntry entry) {
+ Map trpHeaders = new HashMap();
+ try {
+ Enumeration e = message.getAllHeaders();
+ while (e.hasMoreElements()) {
+ Header h = (Header) e.nextElement();
+ if (entry.retainHeader(h.getName())) {
+ trpHeaders.put(h.getName(), h.getValue());
+ }
+ }
+ } catch (MessagingException ignore) {}
+ return trpHeaders;
+ }
+
+ // TODO: the same code is used by other transports; the method should be
moved to Abstract(Polling)TransportListener
+ private MessageContext createMessageContext(PollTableEntry entry) throws
AxisFault {
+ MessageContext msgContext = createMessageContext();
if (entry.getServiceName() != null) {
AxisService service =
cfgCtx.getAxisConfiguration().getService(entry.getServiceName());
@@ -317,7 +378,11 @@
msgContext.setSoapAction("urn:" +
operation.getName().getLocalPart());
}
}
+ return msgContext;
+ }
+ private MailOutTransportInfo buildOutTransportInfo(Message message,
+ PollTableEntry entry) throws MessagingException {
MailOutTransportInfo outInfo = new
MailOutTransportInfo(entry.getEmailAddress());
// determine reply address
@@ -350,43 +415,7 @@
} else if (message instanceof MimeMessage && ((MimeMessage)
message).getMessageID() != null) {
outInfo.setRequestMessageID(((MimeMessage)
message).getMessageID());
}
-
- // save out transport information
- msgContext.setProperty(Constants.OUT_TRANSPORT_INFO, outInfo);
-
- // set message context From
- if (outInfo.getFromAddress() != null) {
- msgContext.setFrom(
- new EndpointReference(MailConstants.TRANSPORT_PREFIX +
- outInfo.getFromAddress().getAddress()));
- }
-
- // save original mail message id message context MessageID
- msgContext.setMessageID(outInfo.getRequestMessageID());
-
- // set the message payload to the message context
- MailUtils.getInstace().setSOAPEnvelope(message, msgContext,
contentType);
-
- String soapAction = (String) trpHeaders.get(BaseConstants.SOAPACTION);
- if (soapAction == null && message.getSubject() != null &&
- message.getSubject().startsWith(BaseConstants.SOAPACTION)) {
- soapAction =
message.getSubject().substring(BaseConstants.SOAPACTION.length());
- if (soapAction.startsWith(":")) {
- soapAction = soapAction.substring(1).trim();
- }
- }
-
- handleIncomingMessage(
- msgContext,
- trpHeaders,
- soapAction,
- contentType
- );
-
- if (log.isDebugEnabled()) {
- log.debug("Processed message : " + message.getMessageNumber() +
- " :: " + message.getSubject());
- }
+ return outInfo;
}
/**