Author: amilas Date: Wed May 16 08:58:34 2007 New Revision: 538634 URL: http://svn.apache.org/viewvc?view=rev&rev=538634 Log: 1. Improved Simple mail listener logic 2. Improved Sync mail handling 3. Improved email sender logic
Modified: webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SynchronousMailListener.java Modified: webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java?view=diff&rev=538634&r1=538633&r2=538634 ============================================================================== --- webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java (original) +++ webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/EMailSender.java Wed May 16 08:58:34 2007 @@ -17,6 +17,7 @@ package org.apache.axis2.transport.mail; +import edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue; import org.apache.axiom.attachments.ByteArrayDataSource; import org.apache.axiom.om.OMOutputFormat; import org.apache.axiom.soap.SOAP11Constants; @@ -24,7 +25,9 @@ import org.apache.axis2.AxisFault; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.Options; +import org.apache.axis2.context.ConfigurationContext; import org.apache.axis2.context.MessageContext; +import org.apache.axis2.description.TransportInDescription; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -98,7 +101,7 @@ EndpointReference epr = null; - MailToInfo mailToInfo = null; + MailToInfo mailToInfo; if (messageContext.getTo() != null && !messageContext.getTo().hasAnonymousAddress()) { epr = messageContext.getTo(); @@ -151,6 +154,8 @@ createMailMimeMessage(msg, mailToInfo, format); Transport.send(msg); + log.info("Message being send. [Action = ]" + messageContext.getOptions().getAction()); + sendReceive(messageContext, msg.getMessageID()); } catch (AddressException e) { throw new AxisFault(e); @@ -223,11 +228,44 @@ private void sendReceive(MessageContext msgContext, String msgId) throws AxisFault { storeMessageContext(msgContext, msgId); + + ConfigurationContext cc = msgContext.getConfigurationContext(); + + SimpleMailListener simpleMailListener; + Options options = msgContext.getOptions(); - if (!options.isUseSeparateListener()) { - SynchronousMailListener listener = - new SynchronousMailListener(options.getTimeOutInMilliSeconds()); - listener.sendReceive(msgContext, msgId); + if (!options.isUseSeparateListener() && !msgContext.isServerSide()) { + Object obj = cc.getProperty(Constants.MAIL_SYNC); + + if (obj == null) { + SynchronousMailListener synchronousMailListener = + new SynchronousMailListener(options.getTimeOutInMilliSeconds(), new LinkedBlockingQueue()); + cc.setProperty(Constants.MAIL_SYNC, synchronousMailListener); + + simpleMailListener = synchronousMailListener.sendReceive(msgContext, msgId); + + TransportInDescription transportIn = msgContext.getConfigurationContext() + .getAxisConfiguration().getTransportIn(org.apache.axis2.Constants.TRANSPORT_MAIL); + + Object mailPOP3Obj= msgContext.getProperty(Constants.MAIL_POP3); + if (mailPOP3Obj != null) { + simpleMailListener.initFromRuntime((Properties) obj, msgContext); + } else { + simpleMailListener.init(msgContext.getConfigurationContext(), transportIn); + } + msgContext.getConfigurationContext().getThreadPool().execute(simpleMailListener); + + simpleMailListener.start(); + log.info("Simple Mail Listener started for the first time and response received"); + + + } else { + SynchronousMailListener synchronousMailListener = (SynchronousMailListener)obj; + synchronousMailListener.sendReceive(msgContext,msgId).start(); + log.info("Simple mail listener started and response received"); + + } + } } @@ -240,7 +278,9 @@ mappingTable = new Hashtable(); msgContext.setProperty(Constants.MAPPING_TABLE, mappingTable); } - mappingTable.put(msgId, msgContext.getMessageID()); + if (msgContext.getMessageID() != null) { + mappingTable.put(msgId, msgContext.getMessageID()); + } } } Modified: webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java?view=diff&rev=538634&r1=538633&r2=538634 ============================================================================== --- webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java (original) +++ webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SimpleMailListener.java Wed May 16 08:58:34 2007 @@ -278,13 +278,14 @@ } while (running) { + log.info("Info started polling"); try { receiver.connect(); Message[] msgs = receiver.receiveMessages(); if ((msgs != null) && (msgs.length > 0)) { - log.info(msgs.length + " Message Found"); + log.info(msgs.length + " Message(s) Found"); for (int i = 0; i < msgs.length; i++) { MimeMessage msg = (MimeMessage) msgs[i]; @@ -294,7 +295,8 @@ messageQueue.add(mc); } } catch (Exception e) { - log.error("Error in SimpleMailListener - processing mail " + e); + e.printStackTrace(); + log.error("Error in SimpleMailListener - processing mail",e); } finally { // delete mail in any case msg.setFlag(Flags.Flag.DELETED, true); @@ -305,7 +307,7 @@ receiver.disconnect(); } catch (Exception e) { - log.error("Error in SimpleMailListener" + e); + log.error("Error in SimpleMailListener", e); } finally { try { Thread.sleep(listenerWaitInterval); Modified: webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SynchronousMailListener.java URL: http://svn.apache.org/viewvc/webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SynchronousMailListener.java?view=diff&rev=538634&r1=538633&r2=538634 ============================================================================== --- webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SynchronousMailListener.java (original) +++ webservices/axis2/branches/java/1_2/modules/kernel/src/org/apache/axis2/transport/mail/SynchronousMailListener.java Wed May 16 08:58:34 2007 @@ -18,6 +18,7 @@ import edu.emory.mathcs.backport.java.util.concurrent.LinkedBlockingQueue; import org.apache.axis2.AxisFault; import org.apache.axis2.context.MessageContext; +import org.apache.axis2.context.ContextFactory; import org.apache.axis2.description.TransportInDescription; import org.apache.axis2.wsdl.WSDLConstants; import org.apache.commons.logging.Log; @@ -33,24 +34,25 @@ private static Log log = LogFactory.getLog(SynchronousMailListener.class); private long timeoutInMilliseconds = -1; + private LinkedBlockingQueue queue; - public SynchronousMailListener(long timeoutInMilliseconds) { + public SynchronousMailListener(long timeoutInMilliseconds,LinkedBlockingQueue queue) { this.timeoutInMilliseconds = timeoutInMilliseconds; + this.queue = queue; } - public void sendReceive(final MessageContext msgContext, final String msgId) throws AxisFault { + public SimpleMailListener sendReceive(final MessageContext msgContext, final String msgId) throws AxisFault { /** * This will be bloked invocation */ - SimpleMailListener listener = new SimpleMailListener(new LinkedBlockingQueue()) { + return new SimpleMailListener(queue) { public void start() throws AxisFault { long timeStatus; - LinkedBlockingQueue queue = getLinkedBlockingQueue(); while (true) { long startTime = System.currentTimeMillis(); try { - MessageContext msgCtx = (MessageContext) queue.take(); + MessageContext msgCtx = (MessageContext) getLinkedBlockingQueue().take(); MailBasedOutTransportInfo transportInfo = (MailBasedOutTransportInfo) msgCtx .getProperty(org.apache.axis2.Constants.OUT_TRANSPORT_INFO); if (transportInfo.getInReplyTo() == null) { @@ -59,13 +61,21 @@ throw new AxisFault(error); } if (transportInfo.getInReplyTo().equals(msgId)) { - //TODO do the correct operation dispatching here - msgContext.getOperationContext() - .getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE) + MessageContext messageContext = msgContext.getOperationContext() + .getMessageContext(WSDLConstants.MESSAGE_LABEL_IN_VALUE); + if (messageContext == null) { + messageContext = ContextFactory.createMessageContext(msgContext.getConfigurationContext()); + messageContext.setOperationContext(msgContext.getOperationContext()); + messageContext.setServiceContext(msgContext.getServiceContext()); + msgContext.getOperationContext().addMessageContext(messageContext); + } + messageContext .setEnvelope(msgCtx.getEnvelope()); + log.info("SOAP Message :: " + messageContext.getEnvelope()); log.info(SynchronousMailListener.class.getName() + " found the required message."); break; } + getLinkedBlockingQueue().put(msgCtx); } catch (InterruptedException e) { log.warn(e); @@ -85,17 +95,6 @@ } }; - TransportInDescription transportIn = msgContext.getConfigurationContext() - .getAxisConfiguration().getTransportIn(org.apache.axis2.Constants.TRANSPORT_MAIL); - - Object obj = msgContext.getProperty(Constants.MAIL_POP3); - if (obj != null) { - listener.initFromRuntime((Properties)obj,msgContext); - } else { - listener.init(msgContext.getConfigurationContext(), transportIn); - } - msgContext.getConfigurationContext().getThreadPool().execute(listener); - listener.start(); } --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]