You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sa...@apache.org on 2006/09/08 15:38:05 UTC

svn commit: r441493 - in /webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail: EMailSender.java EmailReceiver.java MailTransportSender.java MailWorker.java SimpleMailListener.java

Author: saminda
Date: Fri Sep  8 06:38:05 2006
New Revision: 441493

URL: http://svn.apache.org/viewvc?view=rev&rev=441493
Log:
1. Fixed SimpleMaillistener and MailTransportSender to work with 
soap11/12. 
2. Fixed helper classed such as EMailSender/Receriver to cope with 
SOAP11/12 spce's smtp binding
3.Fixed mail worker

//TODO Fixing test cases 

Modified:
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EmailReceiver.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailTransportSender.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailWorker.java
    webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java?view=diff&rev=441493&r1=441492&r2=441493
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java Fri Sep  8 06:38:05 2006
@@ -18,7 +18,11 @@
 package org.apache.axis2.transport.mail;
 
 import org.apache.axis2.AxisFault;
+import org.apache.axis2.context.MessageContext;
 import org.apache.axis2.transport.mail.server.MailSrvConstants;
+import org.apache.axiom.om.OMOutputFormat;
+import org.apache.axiom.soap.SOAP11Constants;
+import org.apache.axiom.soap.SOAP12Constants;
 
 import javax.mail.Authenticator;
 import javax.mail.Flags;
@@ -37,6 +41,7 @@
     private String password;
     private String smtpPort;
     private String user;
+    private MessageContext messageContext;
 
     public EMailSender(String user, String host, String smtpPort, String password) {
         this.user = user;
@@ -45,15 +50,19 @@
         this.password = password;
     }
 
+    public void setMessageContext(MessageContext messageContext) {
+        this.messageContext = messageContext;
+    }
+
     public static void main(String[] args) throws Exception {
         String user = "hemapani";
         String host = "127.0.0.1";
         String smtpPort = "25";
         String password = "hemapani";
         EMailSender sender = new EMailSender(user, host, smtpPort, password);
+        OMOutputFormat format = new OMOutputFormat();
 
-        sender.send("Testing mail sending", "hemapani@127.0.0.1", "Hellp, testing",
-                MailSrvConstants.DEFAULT_CHAR_SET);
+        sender.send("Testing mail sending", "hemapani@127.0.0.1", "Hellp, testing", format);
 
         EmailReceiver receiver = new EmailReceiver(user, host, "110", password);
 
@@ -75,11 +84,11 @@
         receiver.disconnect();
     }
 
-    public void send(String subject, String targetEmail, String message, String charSet)
+    public void send(String subject, String targetEmail, String message, OMOutputFormat format)
             throws AxisFault {
         try {
-            final PasswordAuthentication authentication = new PasswordAuthentication(user,
-                    password);
+            final PasswordAuthentication authentication =
+                    new PasswordAuthentication(user, password);
             Properties props = new Properties();
 
             props.put("mail.user", user);
@@ -99,14 +108,24 @@
             msg.addRecipient(Message.RecipientType.TO, new InternetAddress(targetEmail));
             msg.setSubject(subject);
 
-            if (charSet == null) {
-                charSet = MailSrvConstants.DEFAULT_CHAR_SET;
+            String contentType = format.getContentType() != null ? format.getContentType() :
+                                 MailSrvConstants.DEFAULT_CONTENT_TYPE;
+            if (contentType.indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) {
+                if (messageContext.getSoapAction() != null) {
+                    msg.setHeader(MailSrvConstants.HEADER_SOAP_ACTION,
+                                  messageContext.getSoapAction());
+                    msg.setHeader("Content-Transfer-Encoding", "QUOTED-PRINTABLE");
+                }
+            }
+            if (contentType.indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) {
+                if (messageContext.getSoapAction() != null) {
+                    msg.setContent(message,
+                                   contentType + "; charset=" + format.getCharSetEncoding() +
+                                   " ; action=" + messageContext.getSoapAction());
+                }
+            } else {
+                msg.setContent(message, contentType + "; charset=" + format.getCharSetEncoding());
             }
-
-            msg.addHeaderLine("Content-Type: " + MailSrvConstants.DEFAULT_CONTENT_TYPE
-                    + "; charset=" + charSet);
-            msg.setText(message);
-            msg.setHeader("Content-Transfer-Encoding", MailSrvConstants.DEFAULT_CHAR_SET_ENCODING);
             Transport.send(msg);
         } catch (AddressException e) {
             throw new AxisFault(e);

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EmailReceiver.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EmailReceiver.java?view=diff&rev=441493&r1=441492&r2=441493
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EmailReceiver.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/EmailReceiver.java Fri Sep  8 06:38:05 2006
@@ -72,7 +72,9 @@
             props.put("mail.host", host);
             props.put("mail.store.protocol", "pop3");
             props.put("mail.transport.protocol", "smtp");
-            props.put("mail.pop3.port", popPort);
+            if (Integer.parseInt(popPort) != 110) {
+                props.put("mail.pop3.port", popPort);
+            }
 
             Session session = Session.getInstance(props, new Authenticator() {
                 protected PasswordAuthentication getPasswordAuthentication() {

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailTransportSender.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailTransportSender.java?view=diff&rev=441493&r1=441492&r2=441493
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailTransportSender.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailTransportSender.java Fri Sep  8 06:38:05 2006
@@ -17,10 +17,6 @@
 
 package org.apache.axis2.transport.mail;
 
-import java.io.ByteArrayOutputStream;
-import java.io.IOException;
-import java.io.OutputStream;
-
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axiom.soap.SOAPEnvelope;
@@ -35,6 +31,10 @@
 import org.apache.axis2.transport.mail.server.MailSrvConstants;
 import org.apache.axis2.util.Utils;
 
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.OutputStream;
+
 public class MailTransportSender extends AbstractTransportSender {
 	
     private static final long serialVersionUID = -2858556361961169381L;
@@ -44,6 +44,8 @@
     private String password;
     private String user;
     private TransportOutDescription transportOut;
+    // assosiation with OMOutputFormat
+    private OMOutputFormat format = new OMOutputFormat();
 
     public void init(ConfigurationContext confContext, TransportOutDescription transportOut)
     throws AxisFault {
@@ -77,7 +79,8 @@
 
             if ((user != null) && (host != null) && (password != null) && (smtpPort != null)) {
 
-            	   EMailSender sender = new EMailSender(user, host, smtpPort, password);
+            	EMailSender sender = new EMailSender(user, host, smtpPort, password);
+                sender.setMessageContext(msgContext);
 
                 String eprAddress = msgContext.getTo().getAddress();
 
@@ -85,8 +88,10 @@
                 String charSet =
                         (String) msgContext.getProperty(Constants.Configuration.CHARACTER_SET_ENCODING);
                 if (charSet == null) {
-                    charSet = MailSrvConstants.DEFAULT_CHAR_SET;
+                    charSet = MessageContext.DEFAULT_CHAR_SET_ENCODING;// Since we are deleaing only SOAP and XML messages here
                 }
+                format.setSOAP11(msgContext.isSOAP11());
+                format.setCharSetEncoding(charSet);
 
                 int mailNameIndex = eprAddress.indexOf("mail:");
                 if (mailNameIndex > -1){
@@ -107,8 +112,7 @@
                 		email = email.substring(emailColon + 1);
                 }
                 
-                sender.send(subject, email, new String(byteArrayOutputStream.toByteArray()),
-                        charSet);
+                sender.send(subject, email, new String(byteArrayOutputStream.toByteArray()),format);
             } else {
                 if (user == null) {
                     throw new AxisFault(Messages.getMessage("canNotBeNull", "User"));

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailWorker.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailWorker.java?view=diff&rev=441493&r1=441492&r2=441493
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailWorker.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/MailWorker.java Fri Sep  8 06:38:05 2006
@@ -25,6 +25,7 @@
 import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 import org.apache.axis2.AxisFault;
 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.TransportInDescription;
@@ -32,6 +33,7 @@
 import org.apache.axis2.engine.AxisEngine;
 import org.apache.axis2.i18n.Messages;
 import org.apache.axis2.transport.mail.server.MailSrvConstants;
+import org.apache.axis2.transport.TransportUtils;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -42,7 +44,7 @@
 import java.io.ByteArrayInputStream;
 
 public class MailWorker implements Runnable {
-	private static final Log log = LogFactory.getLog(MailWorker.class);
+    private static final Log log = LogFactory.getLog(MailWorker.class);
     private ConfigurationContext configContext = null;
     private MimeMessage mimeMessage;
 
@@ -66,9 +68,11 @@
         // create and initialize a message context
         try {
             TransportInDescription transportIn =
-                    configContext.getAxisConfiguration().getTransportIn(new QName(Constants.TRANSPORT_MAIL));
+                    configContext.getAxisConfiguration()
+                            .getTransportIn(new QName(Constants.TRANSPORT_MAIL));
             TransportOutDescription transportOut =
-                    configContext.getAxisConfiguration().getTransportOut(new QName(Constants.TRANSPORT_MAIL));
+                    configContext.getAxisConfiguration()
+                            .getTransportOut(new QName(Constants.TRANSPORT_MAIL));
             if ((transportIn != null) && (transportOut != null)) {
                 // create Message Context
                 msgContext = new MessageContext();
@@ -77,40 +81,26 @@
                 msgContext.setTransportOut(transportOut);
                 msgContext.setServerSide(true);
                 msgContext.setProperty(MailSrvConstants.CONTENT_TYPE, mimeMessage.getContentType());
-                msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
-                        mimeMessage.getEncoding());
-                String soapAction = getMailHeader(MailSrvConstants.HEADER_SOAP_ACTION);
-                if (soapAction == null){
-                	soapAction = mimeMessage.getSubject();
-                }
 
-                //msgContext.setWSAAction(soapAction);
-                msgContext.setSoapAction(soapAction);
-                msgContext.setIncomingTransportName(Constants.TRANSPORT_MAIL);
-
-                // TODO add the transport Headers to the Message Context
-                // Create Mail EPR, EPR is constructed using the format, foo@bar/axis2/services/echo and is constructed
-                // using the <to-email-address>/<email-subject>
-/*                InternetAddress[] recepainets = (InternetAddress[]) mimeMessage.getAllRecipients();
-
-                if ((recepainets != null) && (recepainets.length > 0)) {
+                if (TransportUtils.getCharSetEncoding(mimeMessage.getContentType()) != null) {
+                    msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
+                                           TransportUtils.getCharSetEncoding(
+                                                   mimeMessage.getContentType()));
                 } else {
-                    throw new AxisFault(Messages.getMessage("noRecep4Email"));
+                    msgContext.setProperty(Constants.Configuration.CHARACTER_SET_ENCODING,
+                                           MessageContext.DEFAULT_CHAR_SET_ENCODING);
                 }
 
-                // try to assume the reply to value
-                InternetAddress[] replyToAs = (InternetAddress[]) mimeMessage.getAllRecipients();
-
-                if ((replyToAs != null) && (replyToAs.length > 0)) {
-                    String replyTo = replyToAs[0].getAddress();
-
-                    if (replyTo != null) {
-                        msgContext.setReplyTo(new EndpointReference(replyTo));
-                    }
-                }*/
+                msgContext.setIncomingTransportName(Constants.TRANSPORT_MAIL);
+                String soapAction = getMailHeader(MailSrvConstants.HEADER_SOAP_ACTION);
+                msgContext.setSoapAction(soapAction);
+                if (mimeMessage.getSubject() != null) {
+                    msgContext.setTo(new EndpointReference(mimeMessage.getSubject()));
+                }
 
                 // Create the SOAP Message
-                // TODO This can we written better way, to use the streams better
+                // SMTP basically a text protocol, thus, following would be the optimal way to build the
+                // SOAP11/12 body from it.
                 String message = mimeMessage.getContent().toString();
                 ByteArrayInputStream bais =
                         new ByteArrayInputStream(message.getBytes());
@@ -118,11 +108,15 @@
                         StAXUtils.createXMLStreamReader(bais);
                 String soapNamespaceURI = "";
                 if (mimeMessage.getContentType().indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE)
-                        > -1) {
+                    > -1) {
                     soapNamespaceURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
                 } else if (mimeMessage.getContentType().indexOf(
                         SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) {
                     soapNamespaceURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+                } else {
+                    log.warn(
+                            "MailWorker found a message other than text/xml or application/soap+xml");
+                    return;
                 }
 
                 StAXBuilder builder = new StAXSOAPModelBuilder(reader, soapNamespaceURI);
@@ -135,7 +129,7 @@
                 }
             } else {
                 throw new AxisFault(Messages.getMessage("unknownTransport",
-                        Constants.TRANSPORT_MAIL));
+                                                        Constants.TRANSPORT_MAIL));
             }
         } catch (Exception e) {
             try {

Modified: webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java?view=diff&rev=441493&r1=441492&r2=441493
==============================================================================
--- webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java (original)
+++ webservices/axis2/trunk/java/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java Fri Sep  8 06:38:05 2006
@@ -176,7 +176,6 @@
         if (!stopped) {
             String logMessage = "Mail listner is being setup to listen to the address " + user
                     + "@" + host + " On port " + port;
-
             log.info(logMessage);
         }
 
@@ -206,14 +205,10 @@
                 // Waiting for 3 seconds.
                 Thread.sleep(3000);
             } catch (Exception e) {
-
-                log.debug("An error occured when running the mail listner." + e.getMessage(), e);
-
-                break;
+                log.error("Error in SimpleMailListener" + e);
             }
         }
 
-        log.info("Mail listener has been stoped.");
     }
 
     /**
@@ -278,7 +273,7 @@
      * @see org.apache.axis2.transport.TransportListener#replyToEPR(java.lang.String)
      */
     public EndpointReference getEPRForService(String serviceName, String ip) throws AxisFault {
-        return new EndpointReference(Constants.TRANSPORT_MAIL + ":" + replyTo + "/" + configurationContext.getServiceContextPath() + "/" + serviceName);//Constants.TRANSPORT_MAIL + 
+        return new EndpointReference(Constants.TRANSPORT_MAIL + ":" + replyTo + configurationContext.getServiceContextPath() + "/" + serviceName);//Constants.TRANSPORT_MAIL +
     }
 
     public void setDoThreads(boolean value) {



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org