Well Chamil, Its easy for us if you can send us the patch as a *file* so that I can apply it easily.
And since we are using Maven, you can add the dependencies to the correct module project.xml. BTW : If I apply the match, anyhow, the code may break for others due to dependencies. Regards, Eran Chinthaka -----Original Message----- From: Chamil Thanthrimudalige [mailto:[EMAIL PROTECTED] Sent: Thursday, March 03, 2005 3:23 PM To: [email protected] Subject: [Axis2] Mail Transport patch Hi, This is a redone version of the code I submitted before. It was based on the Axis1 mail code. A test case is also included now. Addition to the normal external jars used in axis2 the following jars are needed to run the code, jaf javamail common-net Best Regards, Chamil Thanthrimudalige. www.itambalama.com Index: transport/mail/MailConstants.java =================================================================== --- transport/mail/MailConstants.java (revision 0) +++ transport/mail/MailConstants.java (revision 0) @@ -0,0 +1,25 @@ +/* + * Created on Jan 28, 2005 + * + * TODO To change the template for this generated file go to Window - + * Preferences - Java - Code Style - Code Templates + */ +package org.apache.axis.transport.mail; + +public class MailConstants { + public final static String FROM_ADDRESS = "transport.mail.from"; + + public final static String TO_ADDRESS = "transport.mail.to"; + + public final static String SUBJECT = "transport.mail.subject"; + + public final static String SMTP_HOST = "transport.mail.smtp.host"; + + public final static String POP3_HOST = "transport.mail.pop3.host"; + + public final static String POP3_USERID = "transport.mail.pop3.userid"; + + public final static String POP3_PASSWORD = "transport.mail.pop3.password"; + + public final static String HEADER_SOAP_ACTION = "transport.mail.soapaction"; +} \ No newline at end of file Index: transport/mail/MailTransportSender.java =================================================================== --- transport/mail/MailTransportSender.java (revision 0) +++ transport/mail/MailTransportSender.java (revision 0) @@ -0,0 +1,97 @@ +/* + * Copyright 2001-2004 The Apache Software Foundation. + * + * Licensed 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.axis.transport.mail; + +import java.io.Writer; +import java.net.Socket; + +import org.apache.axis.addressing.EndpointReference; +import org.apache.axis.context.MessageContext; +import org.apache.axis.engine.AxisFault; +import org.apache.axis.transport.AbstractTransportSender; + +public class MailTransportSender extends AbstractTransportSender { + protected Writer out; + + private Socket socket; + + public MailTransportSender() { + + } + + protected Writer obtainOutputStream(MessageContext msgContext) + throws AxisFault { + out = (Writer) msgContext.getProperty(MessageContext.TRANSPORT_WRITER); + if (out == null) { + throw new AxisFault( + "Can not find the suffient information to find end point"); + } else { + return out; + } + + } + + protected Writer obtainOutputStream(MessageContext msgContext, + EndpointReference epr) throws AxisFault { + return obtainOutputStream(msgContext); + } + + protected Writer obtainWriter(MessageContext msgContext) throws AxisFault { + return obtainOutputStream(msgContext); + } + + protected Writer obtainWriter(MessageContext msgContext, + EndpointReference epr) throws AxisFault { + //TODO this is temporay work around + return obtainOutputStream(msgContext); + } + + protected void finalizeSending(MessageContext msgContext) throws AxisFault { + } + + protected void finalizeSending(MessageContext msgContext, Writer writer) throws AxisFault { + } + + protected void startSending(MessageContext msgContext) throws AxisFault { + try { + Writer writer = (Writer) msgContext + .getProperty(MessageContext.TRANSPORT_WRITER); + startSending(msgContext, writer); + } catch (Exception e) { + throw new AxisFault(e.getMessage()); + } + } + + protected void startSending(MessageContext msgContext, Writer writer) throws AxisFault { + try { + writer.write("Content-Type: text/plain; charset=us-ascii\n"); + writer.write("Content-Transfer-Encoding: 7bit\n"); + writer + .write("Accept: application/soap+xml, application/dime, multipart/related, text\n"); + //writer.write("MIME-Version: 1.0\n"); + writer.write("User-Agent: Axis2 M1\n"); + writer.write("Cache-Control: no-cache\n"); + writer.write("Pragma: no-cache\n"); + writer.write("Subject: Re:" + + msgContext.getProperty(MailConstants.SUBJECT) + "\n\n"); + } catch (Exception e) { + throw new AxisFault(e.getMessage()); + } + } + +} + Index: transport/mail/MailClient.java =================================================================== --- transport/mail/MailClient.java (revision 0) +++ transport/mail/MailClient.java (revision 0) @@ -0,0 +1,103 @@ +package org.apache.axis.transport.mail; +import java.io.*; +import java.util.*; +import javax.mail.*; +import javax.mail.internet.*; + +public class MailClient + extends Authenticator +{ + public static final int SHOW_MESSAGES = 1; + public static final int CLEAR_MESSAGES = 2; + public static final int SHOW_AND_CLEAR = + SHOW_MESSAGES + CLEAR_MESSAGES; + + protected String from; + protected Session session; + protected PasswordAuthentication authentication; + + public MailClient(String user, String host) + { + this(user, host, user, false); + } + + public MailClient(String user, String host, String password) + { + this(user, host, password , false); + } + + public MailClient(String user, String host, String password, boolean debug) + { + from = user + '@' + host; + authentication = new PasswordAuthentication(user, password); + Properties props = new Properties(); + props.put("mail.user", user); + props.put("mail.host", host); + props.put("mail.debug", debug ? "true" : "false"); + props.put("mail.store.protocol", "pop3"); + props.put("mail.transport.protocol", "smtp"); + session = Session.getInstance(props, this); + } + + public PasswordAuthentication getPasswordAuthentication() + { + return authentication; + } + + public void sendMessage( + String to, String subject, String content, String soapAction) + throws MessagingException + { + System.out.println("SENDING message from " + from + " to " + to); + System.out.println(); + MimeMessage msg = new MimeMessage(session); + msg.setHeader("transport.mail.soapaction",soapAction); + msg.addRecipients(Message.RecipientType.TO, to); + msg.setSubject(subject); + msg.setText(content); + Transport.send(msg); + } + + public int checkInbox(int mode) + throws MessagingException, IOException + { + int numMessages = 0; + if (mode == 0) return 0; + boolean show = (mode & SHOW_MESSAGES) > 0; + boolean clear = (mode & CLEAR_MESSAGES) > 0; + String action = + (show ? "Show" : "") + + (show && clear ? " and " : "") + + (clear ? "Clear" : ""); + System.out.println(action + " INBOX for " + from); + Store store = session.getStore(); + store.connect(); + Folder root = store.getDefaultFolder(); + Folder inbox = root.getFolder("inbox"); + inbox.open(Folder.READ_WRITE); + Message[] msgs = inbox.getMessages(); + numMessages = msgs.length; + if (msgs.length == 0 && show) + { + System.out.println("No messages in inbox"); + } + for (int i = 0; i < msgs.length; i++) + { + MimeMessage msg = (MimeMessage)msgs[i]; + if (show) + { + System.out.println(" From: " + msg.getFrom()[0]); + System.out.println(" Subject: " + msg.getSubject()); + System.out.println(" Content: " + msg.getContent()); + } + if (clear) + { + msg.setFlag(Flags.Flag.DELETED, true); + } + } + inbox.close(true); + store.close(); + System.out.println(); + return numMessages; + } +} Index: transport/mail/MailWorker.java =================================================================== --- transport/mail/MailWorker.java (revision 0) +++ transport/mail/MailWorker.java (revision 0) @@ -0,0 +1,268 @@ +/* + * Copyright 2001-2004 The Apache Software Foundation. + * + * Licensed 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.axis.transport.mail; + +import java.io.ByteArrayInputStream; +import java.io.Writer; +import java.util.Properties; + +import javax.mail.Message; +import javax.mail.Session; +import javax.mail.internet.InternetAddress; +import javax.mail.internet.MimeMessage; +import javax.xml.stream.XMLInputFactory; +import javax.xml.stream.XMLStreamReader; + +import org.apache.axis.addressing.AddressingConstants; +import org.apache.axis.addressing.EndpointReference; +import org.apache.axis.context.MessageContext; +import org.apache.axis.engine.AxisEngine; +import org.apache.axis.engine.AxisFault; +import org.apache.axis.engine.EngineRegistry; +import org.apache.axis.om.OMFactory; +import org.apache.axis.om.SOAPEnvelope; +import org.apache.axis.om.impl.llom.builder.StAXBuilder; +import org.apache.axis.om.impl.llom.builder.StAXSOAPModelBuilder; +import org.apache.axis.Constants; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.net.smtp.SMTPClient; +import org.apache.commons.net.smtp.SMTPReply; + +public class MailWorker implements Runnable { + protected static Log log = LogFactory.getLog(MailWorker.class.getName()); + + private String contentType = "text/xml"; + + // Server + private SimpleMailListner server; + + private SMTPClient client = null; + + private EngineRegistry reg = null; + + // Current message + private MimeMessage mimeMessage; + + //Processed responce CT 08-Feb-2005 + private MimeMessage outputMimeMessage; + + // Axis specific constants + private static String transportName = "mail"; + + private Properties prop = new Properties(); + + private Session session = Session.getDefaultInstance(prop, null); + + /** + * Constructor for MailWorker + * + * @param server + * @param mimeMessage + */ + public MailWorker(SimpleMailListner server, MimeMessage mimeMessage, + EngineRegistry reg) { + this.server = server; + this.mimeMessage = mimeMessage; + this.reg = reg; + } + + /** + * The main workhorse method. + */ + public void run() { + // create an Axis server + AxisEngine engine = SimpleMailListner.getAxisEngine(); + MessageContext msgContext = null; + // create and initialize a message context + try { + msgContext = new MessageContext(this.reg, null, null); + msgContext.setServerSide(true); + } catch (AxisFault af) { + log.error("Error occured while creating the message context", af); + } + + Message requestMsg = null; + + // buffers for the headers we care about + StringBuffer soapAction = new StringBuffer(); + StringBuffer fileName = new StringBuffer(); + StringBuffer contentType = new StringBuffer(); + StringBuffer contentLocation = new StringBuffer(); + + Message responseMsg = null; + + // prepare request (do as much as possible while waiting for the + // next connection). + try { + msgContext.setService(null); + } catch (Exception e) { + } + //msgContext.setResponseMessage(null); + //msgContext.reset(); + // msgContext.setTransport(new AxisTransport(transportName)); There is + // no way to set the transport. CT 07-Feb-2005. + + responseMsg = null; + + try { + // parse all headers into hashtable + parseHeaders(mimeMessage, contentType, contentLocation, + soapAction); + + String soapActionString = soapAction.toString(); + if (soapActionString != null) { + //msgContext.setUseSOAPAction(true); Not present CT + // 07-Feb-2005 + msgContext.setProperty(MessageContext.SOAP_ACTION, + soapActionString); + } + + System.out + .println("This is the data that is to be processed \n " + + mimeMessage.getContent().toString() + "\n"); + + ByteArrayInputStream bais = new ByteArrayInputStream( + mimeMessage.getContent().toString().getBytes()); + XMLStreamReader reader = XMLInputFactory.newInstance() + .createXMLStreamReader(bais); + StAXBuilder builder = new StAXSOAPModelBuilder(OMFactory + .newInstance(), reader); + + msgContext.setEnvelope((SOAPEnvelope) builder + .getDocumentElement()); + + msgContext.setProperty(MessageContext.TRANSPORT_TYPE, + Constants.TRANSPORT_MAIL); + + //A writer is created and sent to the engine so that the engine + // can write straight to the writer + String replyTo = ((InternetAddress) mimeMessage.getReplyTo()[0]) + .getAddress(); + String sendFrom = ((InternetAddress) mimeMessage + .getAllRecipients()[0]).getAddress(); + String subject = mimeMessage.getSubject(); + msgContext.setProperty(MailConstants.FROM_ADDRESS, sendFrom); + msgContext.setProperty(MailConstants.TO_ADDRESS, replyTo); + msgContext.setProperty(MailConstants.SUBJECT, subject); + Writer wr = getMailWriter(server.getHost(), msgContext); + + msgContext.setProperty(MessageContext.TRANSPORT_WRITER, wr); + msgContext.setTo(new EndpointReference( + AddressingConstants.WSA_TO, replyTo)); + + // invoke the Axis engine + engine.receive(msgContext); + + sendMessage(wr); + + } catch (Exception e) { + e.printStackTrace(); + AxisFault af; + if (e instanceof AxisFault) { + af = (AxisFault) e; + //log.debug(Messages.getMessage("serverFault00"), af); + // CT 07-Feb-2005 + log.debug( + "Error occured while trying to process the mail.", + af); + } else { + af = AxisFault.makeFault(e); + } + } + + /* + * + * This part is ignored for the time being. CT 07-Feb-2005. + * + * if (msgContext.getProperty(MessageContext.QUIT_REQUESTED) != null) { // + * why then, quit! try { server.stop(); } catch (Exception e) { } } + */ + } + + private Writer getMailWriter(String smtpHost, MessageContext msgContext) + throws Exception { + client = new SMTPClient(); + client.connect(smtpHost); + + // After connection attempt, you should check the reply code to verify + // success. + int reply = client.getReplyCode(); + if (!SMTPReply.isPositiveCompletion(reply)) { + client.disconnect(); + AxisFault fault = new AxisFault("SMTP" + + "( SMTP server refused connection )"); //Issue #2 CT + // 07-Feb-2005. + throw fault; + } + + client.login(smtpHost); + reply = client.getReplyCode(); + if (!SMTPReply.isPositiveCompletion(reply)) { + client.disconnect(); + AxisFault fault = new AxisFault("SMTP" + + "( SMTP server refused connection )"); + throw fault; + } + client.setSender((String) msgContext + .getProperty(MailConstants.FROM_ADDRESS)); + client.addRecipient((String) msgContext + .getProperty(MailConstants.TO_ADDRESS)); + Writer writer = client.sendMessageData(); + + return writer; + } + + private void sendMessage(Writer writer) throws Exception { + writer.flush(); + writer.close(); + + System.out.print(client.getReplyString()); + if (!client.completePendingCommand()) { + System.out.print(client.getReplyString()); + AxisFault fault = new AxisFault("SMTP" + "( Failed to send email )"); + throw fault; + } + client.logout(); + client.disconnect(); + } + + /** + * Read all mime headers, returning the value of Content-Length and + * SOAPAction. + * + * @param mimeMessage + * InputStream to read from + * @param contentType + * The content type. + * @param contentLocation + * The content location + * @param soapAction + * StringBuffer to return the soapAction into + */ + private void parseHeaders(MimeMessage mimeMessage, + StringBuffer contentType, StringBuffer contentLocation, + StringBuffer soapAction) throws Exception { + contentType.append(mimeMessage.getContentType()); + contentLocation.append(mimeMessage.getContentID()); + String values[] = mimeMessage + .getHeader(MailConstants.HEADER_SOAP_ACTION); + if (values != null) + soapAction.append(values[0]); + System.out.println("Calling soap action " + soapAction); + } +} \ No newline at end of file Index: transport/mail/SimpleMailListner.java =================================================================== --- transport/mail/SimpleMailListner.java (revision 0) +++ transport/mail/SimpleMailListner.java (revision 0) @@ -0,0 +1,326 @@ +/* + * Copyright 2001-2004 The Apache Software Foundation. + * + * Licensed 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.axis.transport.mail; + +import org.apache.axis.deployment.DeploymentEngine; +import org.apache.axis.engine.AxisEngine; +import org.apache.axis.engine.EngineRegistry; +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.apache.commons.net.pop3.POP3Client; +import org.apache.commons.net.pop3.POP3MessageInfo; + +import javax.mail.Session; +import javax.mail.internet.MimeMessage; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.Reader; +import java.util.Properties; + +/** + * This is a simple implementation of an SMTP/POP3 server for processing SOAP + * requests via Apache's xml-axis. This is not intended for production use. Its + * intended uses are for demos, debugging, and performance profiling. + * + * @author Davanum Srinivas <[EMAIL PROTECTED]> + * @author Rob Jellinghaus ([EMAIL PROTECTED]) + * + * @author Chamil Thanthrimudalige <[EMAIL PROTECTED]>Changes done to make the + * Class work inside Axis 2. + */ + +/* + * TODO ISSUES -- 1. Message.getMessage -- All messages are hardcoded in the + * code till a replacement or a working verion of this is put into Axis 2. When + * internationalization work is done this can be fixed. CT 15-Feb-2005 + * + */ + +public class SimpleMailListner implements Runnable { + + + protected static Log log = LogFactory.getLog(SimpleMailListner.class.getName()); + + private String host; + + private int port; + + private String userid; + + private String password; + + private static EngineRegistry er = null; + + public SimpleMailListner(String host, int port, String userid, String password, + String dir) { + this.host = host; + this.port = port; + this.userid = userid; + this.password = password; + try { + DeploymentEngine deploymentEngine = new DeploymentEngine(dir); + er = deploymentEngine.start(); + } catch (Exception e) { + e.printStackTrace(); + } + try { + System.out + .println("Sleeping for a bit to let the engine start up."); + Thread.sleep(9000); + } catch (InterruptedException e1) { + log.debug(e1.getMessage(), e1); + } + } + + // Are we doing threads? + private static boolean doThreads = true; + + public void setDoThreads(boolean value) { + doThreads = value; + } + + public boolean getDoThreads() { + return doThreads; + } + + public String getHost() { + return host; + } + + // Axis server (shared between instances) + // In axis2 AxisEngine gives the functionality of AxisServer in axis 1. + private static AxisEngine myAxisEngine = null; + + //This is needed to create the AxisEngine. Have to find out how to get this + // wrking in the class -- CT 07-Feb-2005. + private static EngineRegistry reg = null; + + protected static synchronized AxisEngine getAxisEngine() { + if (myAxisEngine == null) { + myAxisEngine = new AxisEngine(er); + } + return myAxisEngine; + } + + // are we stopped? + // latch to true if stop() is called + private boolean stopped = false; + + /** + * Accept requests from a given TCP port and send them through the Axis + * engine for processing. + */ + public void run() { + // log.info(Message.getMessage("start00", "SimpleMailListner", host + ":" + + // port)); TODO Issue #1 CT 07-Feb-2005. + // Accept and process requests from the socket + if (!stopped) { + System.out + .println("Mail listner is being setup to listen to the address " + + userid + "@" + host + " On port " + port); + log.info("Mail listner is being setup to listen to the address " + + userid + "@" + host + " On port " + port); + } + while (!stopped) { + try { + pop3.connect(host, port); + pop3.login(userid, password); + System.out.println("Checking for messages"); + log.info("Checking for messages"); + POP3MessageInfo[] messages = pop3.listMessages(); + if (messages != null && messages.length > 0) { + System.out.println("Found messages " + messages.length); + log.info("Found messages " + messages.length); + for (int i = 0; i < messages.length; i++) { + Reader reader = pop3 + .retrieveMessage(messages[i].number); + if (reader == null) { + continue; + } + + StringBuffer buffer = new StringBuffer(); + BufferedReader bufferedReader = new BufferedReader( + reader); + int ch; + while ((ch = bufferedReader.read()) != -1) { + buffer.append((char) ch); + } + bufferedReader.close(); + ByteArrayInputStream bais = new ByteArrayInputStream( + buffer.toString().getBytes()); + Properties prop = new Properties(); + Session session = Session + .getDefaultInstance(prop, null); + + MimeMessage mimeMsg = new MimeMessage(session, bais); + pop3.deleteMessage(messages[i].number); + if (mimeMsg != null) { + MailWorker worker = new MailWorker(this, mimeMsg, + er); + if (doThreads) { + Thread thread = new Thread(worker); + thread.setDaemon(true); + thread.start(); + } else { + worker.run(); + } + } + } + } + } catch (java.io.InterruptedIOException iie) { + log.debug( + "InterruptedIOException error occured in the mail listner." + + iie.getMessage(), iie); + System.out + .println("InterruptedIOException error occured in the mail listner." + + iie.getMessage()); + } catch (Exception e) { + //log.debug(Messages.getMessage("exception00"), e); TODO Issue + // #1 CT 07-Feb-2005. + log.debug("An error occured when running the mail listner." + + e.getMessage(), e); + System.out + .println("An error occured when running the mail listner." + + e.getMessage()); + break; + } + try { + pop3.logout(); + pop3.disconnect(); + Thread.sleep(3000); + } catch (Exception e) { + //log.error(Messages.getMessage("exception00"), e); TODO Issue + // #1 CT 07-Feb-2005. + log.debug( + "An error occured when trying to disconnect from the Server." + + e.getMessage(), e); + System.out + .println("An error occured when trying to disconnect from the Server." + + e.getMessage()); + } + } + + log.info("Mail listner has been stoped."); + System.out.println("Mail listner has been stoped."); + //log.info(Messages.getMessage("quit00", "SimpleMailListner")); TODO Issue #1 + // CT 07-Feb-2005. + + } + + /** + * POP3 connection + */ + private POP3Client pop3; + + /** + * Obtain the serverSocket that that SimpleMailListner is listening on. + */ + public POP3Client getPOP3() { + return pop3; + } + + /** + * Set the serverSocket this server should listen on. (note : changing this + * will not affect a running server, but if you stop() and then start() the + * server, the new socket will be used). + */ + public void setPOP3(POP3Client pop3) { + this.pop3 = pop3; + } + + //CT 03-Feb-2005 I think it should be POP instead of HTTP + /** + * Start this server. + * + * Spawns a worker thread to listen for HTTP requests. + * + * @param daemon + * a boolean indicating if the thread should be a daemon. + */ + public void start(boolean daemon) throws Exception { + if (doThreads) { + Thread thread = new Thread(this); + thread.setDaemon(daemon); + thread.start(); + } else { + run(); + } + } + + /** + * Start this server as a NON-daemon. + */ + public void start() throws Exception { + start(false); + } + + /** + * Stop this server. + * + * This will interrupt any pending accept(). + */ + public void stop() throws Exception { + /* + * Close the server socket cleanly, but avoid fresh accepts while the + * socket is closing. + */ + stopped = true; + //log.info(Messages.getMessage("quit00", "SimpleMailListner")); TODO Issue #1 + // CT 07-Feb-2005. + log.info("Quiting the mail listner"); + } + + /** + * Server process. + */ + public static void main(String args[]) { + boolean optDoThreads = true; + String optHostName = "localhost"; + boolean optUseCustomPort = false; + int optCustomPortToUse = 0; + String optDir = "/home/chamil/temp"; + String optUserName = "server"; + String optPassword = "server"; + System.out.println("Starting the mail listner"); + // Options object is not used for now. Hard coded values will be used. + // TODO have to meke this a bit more generic. CT 07-Feb-2005. + //Options opts = null; + + /* + * try { opts = new Options(args); } catch (MalformedURLException e) { + * log.error(Messages.getMessage("malformedURLException00"), e); return; } + */ + try { + doThreads = optDoThreads; //(opts.isFlagSet('t') > 0); + String host = optHostName; //opts.getHost(); + int port = ((optUseCustomPort) ? optCustomPortToUse : 110); + POP3Client pop3 = new POP3Client(); + SimpleMailListner sas = new SimpleMailListner(host, port, optUserName, + optPassword, optDir); + sas.setPOP3(pop3); + sas.start(); + } catch (Exception e) { + // log.error(Messages.getMessage("exception00"), e); TODO Issue #1 + // CT 07-Feb-2005. + log + .error("An error occured in the main method of SimpleMailListner. TODO Detailed error message needs to be inserted here."); + return; + } + + } +} \ No newline at end of file Index: transport/mail/SimpleMailListnerTest.java =================================================================== --- transport/mail/SimpleMailListnerTest.java (revision 0) +++ transport/mail/SimpleMailListnerTest.java (revision 0) @@ -0,0 +1,86 @@ +/* + * Created on Mar 3, 2005 + * + * TODO To change the template for this generated file go to + * Window - Preferences - Java - Code Style - Code Templates + */ +package org.apache.axis.transport.mail; + +import org.apache.axis.AbstractTestCase; +import org.apache.axis.engine.AxisFault; +import org.apache.axis.transport.mail.MailConstants; +import org.apache.commons.net.pop3.POP3Client; + +/** + * @author chamil + * + * TODO To change the template for this generated type comment go to + * Window - Preferences - Java - Code Style - Code Templates + */ +public class SimpleMailListnerTest extends AbstractTestCase { + private SimpleMailListner sas; + public SimpleMailListnerTest(String testName) { + super(testName); + } + + public void setUp(){ + Thread thread = new Thread(new Runnable() { + public void run() { + boolean optDoThreads = true; + String optHostName = "localhost"; + boolean optUseCustomPort = false; + int optCustomPortToUse = 0; + String optDir = "/home/chamil/temp"; + String optUserName = "server"; + String optPassword = "server"; + System.out.println("Starting the mail listner"); + try { + String host = optHostName; + int port = ((optUseCustomPort) ? optCustomPortToUse : 110); + POP3Client pop3 = new POP3Client(); + sas = new SimpleMailListner(host, port, optUserName, + optPassword, optDir); + sas.setDoThreads(optDoThreads); + sas.setPOP3(pop3); + sas.start(); + } catch (Exception e) { + System.out.println("An error occured in the main method of SimpleMailListner. TODO Detailed error message needs to be inserted here."); + return; + } + + + } + }); + thread.start(); + + } + + public void testSendViaMailAndRecieve() throws Exception { + // CREATE CLIENT INSTANCE MailClient(String user, String host, String password) + MailClient mailclient = new MailClient("client", "localhost", "client"); + + String fileContents = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"> <soapenv:Header></soapenv:Header> <soapenv:Body> <samples:echo xmlns:samples=\"http://apache.ws.apache.org/samples\"> <samples:param1 xmlns:arrays=\"http://axis.apache.org/encoding/Arrays\"> <arrays:item>Hello testing1</arrays:item> <arrays:item>Hello testing2</arrays:item> <arrays:item>Hello testing3</arrays:item> <arrays:item>Hello testing4</arrays:item> <arrays:item>Hello testing5</arrays:item> </samples:param1> </samples:echo> </soapenv:Body></soapenv:Envelope>"; + String soapService = "sample1"; + + // SEND A MESSAGE TO THE SERVER + mailclient.sendMessage( + "[EMAIL PROTECTED]", + "Testing SOAP with service - " + soapService, + fileContents, soapService); + + int count =0; + boolean success = false; + + while (count<10 && !success) { + Thread.sleep(10000); + success = (mailclient.checkInbox(3)>0); + } + + } + + public void tearDown() throws Exception{ + sas.stop(); + } + +} + Index: transport/TransportSenderLocator.java =================================================================== --- transport/TransportSenderLocator.java (revision 156023) +++ transport/TransportSenderLocator.java (working copy) @@ -19,6 +19,7 @@ import org.apache.axis.context.MessageContext; import org.apache.axis.engine.AxisFault; import org.apache.axis.transport.http.HTTPTransportSender; +import org.apache.axis.transport.mail.MailTransportSender; /** * Class TransportSenderLocator @@ -37,7 +38,13 @@ (String) msgContext.getProperty(MessageContext.TRANSPORT_TYPE); if (Constants.TRANSPORT_HTTP.equals(type)) { return new HTTPTransportSender(); + } else { + if (Constants.TRANSPORT_MAIL.equals(type)) { + MailTransportSender mts = new MailTransportSender(); + return mts; + } } + throw new AxisFault("No transport found"); } }
