You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by he...@apache.org on 2005/03/10 14:27:37 UTC
svn commit: r156948 - in webservices/axis/trunk/java/modules:
core/src/java/org/apache/axis/ core/src/java/org/apache/axis/clientapi/
core/src/java/org/apache/axis/transport/ mail/ mail/src/ mail/src/java/
mail/src/java/org/ mail/src/java/org/apache/ mail/src/java/org/apache/axis/
mail/src/java/org/apache/axis/transport/
mail/src/java/org/apache/axis/transport/mail/ mail/src/test/
mail/src/test/org/ mail/src/test/org/apache/ mail/src/test/org/apache/axis/
mail/src/test/org/apache/axis/transport/
mail/src/test/org/apache/axis/transport/mail/
Author: hemapani
Date: Thu Mar 10 05:26:48 2005
New Revision: 156948
URL: http://svn.apache.org/viewcvs?view=rev&rev=156948
Log:
add smtp transport
Added:
webservices/axis/trunk/java/modules/mail/
webservices/axis/trunk/java/modules/mail/project.xml
webservices/axis/trunk/java/modules/mail/src/
webservices/axis/trunk/java/modules/mail/src/java/
webservices/axis/trunk/java/modules/mail/src/java/org/
webservices/axis/trunk/java/modules/mail/src/java/org/apache/
webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/
webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/
webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/
webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailClient.java
webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailConstants.java
webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailTransportSender.java
webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailWorker.java
webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/SimpleMailListner.java
webservices/axis/trunk/java/modules/mail/src/test/
webservices/axis/trunk/java/modules/mail/src/test/org/
webservices/axis/trunk/java/modules/mail/src/test/org/apache/
webservices/axis/trunk/java/modules/mail/src/test/org/apache/axis/
webservices/axis/trunk/java/modules/mail/src/test/org/apache/axis/transport/
webservices/axis/trunk/java/modules/mail/src/test/org/apache/axis/transport/mail/
webservices/axis/trunk/java/modules/mail/src/test/org/apache/axis/transport/mail/SimpleMailListnerTest.java
Modified:
webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/Constants.java
webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/clientapi/Call.java
webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/transport/TransportSenderLocator.java
Modified: webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/Constants.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/Constants.java?view=diff&r1=156947&r2=156948
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/Constants.java (original)
+++ webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/Constants.java Thu Mar 10 05:26:48 2005
@@ -82,7 +82,7 @@
/**
* Field TRANSPORT_SMTP
*/
- public static final String TRANSPORT_SMTP = "smtp";
+ public static final String TRANSPORT_MAIL = "mail";
/**
* Field LISTSERVICES
Modified: webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/clientapi/Call.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/clientapi/Call.java?view=diff&r1=156947&r2=156948
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/clientapi/Call.java (original)
+++ webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/clientapi/Call.java Thu Mar 10 05:26:48 2005
@@ -103,7 +103,7 @@
*/
public void setTransportType(String transport) throws AxisFault {
if ((Constants.TRANSPORT_HTTP.equals(transport)
- || Constants.TRANSPORT_SMTP.equals(transport)
+ || Constants.TRANSPORT_MAIL.equals(transport)
|| Constants.TRANSPORT_TCP.equals(transport))) {
this.transport = transport;
} else {
@@ -124,7 +124,7 @@
String Listenertransport, boolean useSeparateListener)
throws AxisFault {
if ((Constants.TRANSPORT_HTTP.equals(transport)
- || Constants.TRANSPORT_SMTP.equals(transport)
+ || Constants.TRANSPORT_MAIL.equals(transport)
|| Constants.TRANSPORT_TCP.equals(transport))) {
this.Listenertransport = Listenertransport;
this.useSeparateListener = useSeparateListener;
@@ -186,7 +186,7 @@
* @throws AxisFault
*/
public void send(SOAPEnvelope envelope) throws AxisFault {
- if (Constants.TRANSPORT_SMTP.equals(transport)) {
+ if (Constants.TRANSPORT_MAIL.equals(transport)) {
throw new AxisFault(
"This invocation support only for bi-directional transport");
} else {
@@ -249,7 +249,7 @@
* @throws AxisFault
*/
public SOAPEnvelope sendReceive(SOAPEnvelope envelope) throws AxisFault {
- if (Constants.TRANSPORT_SMTP.equals(transport)) {
+ if (Constants.TRANSPORT_MAIL.equals(transport)) {
throw new AxisFault(
"This invocation support only for bi-directional transport");
}
@@ -300,7 +300,7 @@
msgctx.setProperty(MessageContext.SOAP_ACTION,action);
}
if (useSeparateListener) {
- if (Constants.TRANSPORT_SMTP.equals(transport)) {
+ if (Constants.TRANSPORT_MAIL.equals(transport)) {
throw new AxisFault(
"This invocation support only for bi-directional transport");
}
Modified: webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/transport/TransportSenderLocator.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/transport/TransportSenderLocator.java?view=diff&r1=156947&r2=156948
==============================================================================
--- webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/transport/TransportSenderLocator.java (original)
+++ webservices/axis/trunk/java/modules/core/src/java/org/apache/axis/transport/TransportSenderLocator.java Thu Mar 10 05:26:48 2005
@@ -37,6 +37,10 @@
Class className =
Class.forName("org.apache.axis.transport.http.HTTPTransportSender");
return (TransportSender) className.newInstance();
+ } else if (Constants.TRANSPORT_MAIL.equals(type)) {
+ Class className =
+ Class.forName("org.apache.axis.transport.mail.MailTransportSender");
+ return (TransportSender) className.newInstance();
}
} catch (ClassNotFoundException e) {
throw new AxisFault(e.getMessage(), e);
Added: webservices/axis/trunk/java/modules/mail/project.xml
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/mail/project.xml?view=auto&rev=156948
==============================================================================
--- webservices/axis/trunk/java/modules/mail/project.xml (added)
+++ webservices/axis/trunk/java/modules/mail/project.xml Thu Mar 10 05:26:48 2005
@@ -0,0 +1,111 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+/*
+ * 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.
+ */
+ -->
+<project>
+ <pomVersion>3</pomVersion>
+ <extend>../../etc/project.xml</extend>
+
+ <id>axis2-mail</id>
+ <name>mail</name>
+ <description>Mail transport module</description>
+
+ <dependencies>
+ <dependency>
+ <groupId>axis</groupId>
+ <artifactId>axis2-om</artifactId>
+ <version>${pom.currentVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>axis</groupId>
+ <artifactId>axis2-deployment</artifactId>
+ <version>${pom.currentVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>axis</groupId>
+ <artifactId>axis2-core</artifactId>
+ <version>${pom.currentVersion}</version>
+ </dependency>
+ <dependency>
+ <groupId>axis</groupId>
+ <artifactId>axis2-wsdl</artifactId>
+ <version>${pom.currentVersion}</version>
+ </dependency>
+
+ <!-- external JARs -->
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.0.3</version>
+ <properties>
+ <module>true</module>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>james</groupId>
+ <artifactId>james</artifactId>
+ <version>3.0a1</version>
+ <properties>
+ <module>true</module>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>geronimo-spec</groupId>
+ <artifactId>geronimo-spec-javamail</artifactId>
+ <version>1.3.1-rc3</version>
+ <properties>
+ <module>true</module>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>commons-net</groupId>
+ <artifactId>commons-net</artifactId>
+ <version>1.3.0</version>
+ <properties>
+ <module>true</module>
+ </properties>
+ </dependency>
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax</artifactId>
+ <version>1.1.1-dev</version>
+ <properties>
+ <module>true</module>
+ </properties>
+ <url>http://dist.codehaus.org/stax/jars/</url>
+ </dependency>
+ <dependency>
+ <groupId>log4j</groupId>
+ <artifactId>log4j</artifactId>
+ <version>1.2.8</version>
+ <properties>
+ <module>true</module>
+ </properties>
+ <url>http://dist.codehaus.org/stax/jars/</url>
+ </dependency>
+
+ <dependency>
+ <groupId>stax</groupId>
+ <artifactId>stax-api</artifactId>
+ <version>1.0</version>
+ <properties>
+ <module>true</module>
+ </properties>
+ <url>http://dist.codehaus.org/stax/jars/</url>
+ </dependency>
+ </dependencies>
+</project>
Added: webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailClient.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailClient.java?view=auto&rev=156948
==============================================================================
--- webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailClient.java (added)
+++ webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailClient.java Thu Mar 10 05:26:48 2005
@@ -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;
+ }
+}
Added: webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailConstants.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailConstants.java?view=auto&rev=156948
==============================================================================
--- webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailConstants.java (added)
+++ webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailConstants.java Thu Mar 10 05:26:48 2005
@@ -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
Added: webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailTransportSender.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailTransportSender.java?view=auto&rev=156948
==============================================================================
--- webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailTransportSender.java (added)
+++ webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailTransportSender.java Thu Mar 10 05:26:48 2005
@@ -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());
+ }
+ }
+
+}
+
Added: webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailWorker.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailWorker.java?view=auto&rev=156948
==============================================================================
--- webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailWorker.java (added)
+++ webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/MailWorker.java Thu Mar 10 05:26:48 2005
@@ -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
Added: webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/SimpleMailListner.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/SimpleMailListner.java?view=auto&rev=156948
==============================================================================
--- webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/SimpleMailListner.java (added)
+++ webservices/axis/trunk/java/modules/mail/src/java/org/apache/axis/transport/mail/SimpleMailListner.java Thu Mar 10 05:26:48 2005
@@ -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 <di...@yahoo.com>
+ * @author Rob Jellinghaus (robj@unrealities.com)
+ *
+ * @author Chamil Thanthrimudalige <ch...@gmail.com>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();
+ }
+ 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
Added: webservices/axis/trunk/java/modules/mail/src/test/org/apache/axis/transport/mail/SimpleMailListnerTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/modules/mail/src/test/org/apache/axis/transport/mail/SimpleMailListnerTest.java?view=auto&rev=156948
==============================================================================
--- webservices/axis/trunk/java/modules/mail/src/test/org/apache/axis/transport/mail/SimpleMailListnerTest.java (added)
+++ webservices/axis/trunk/java/modules/mail/src/test/org/apache/axis/transport/mail/SimpleMailListnerTest.java Thu Mar 10 05:26:48 2005
@@ -0,0 +1,87 @@
+/*
+ * 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 junit.framework.TestCase;
+
+import org.apache.commons.net.pop3.POP3Client;
+
+public class SimpleMailListnerTest extends TestCase {
+ 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 = "FIX_ME_PLS";
+// 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(
+// "server@localhost",
+// "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();
+ }
+
+}
+