⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractmailconnector.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
字号:
/* * $Id: AbstractMailConnector.java 10489 2008-01-23 17:53:38Z dfeist $ * -------------------------------------------------------------------------------------- * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com * * The software in this package is published under the terms of the CPAL v1.0 * license, a copy of which has been included with this distribution in the * LICENSE.txt file. */package org.mule.transport.email;import org.mule.api.MuleException;import org.mule.api.endpoint.EndpointURI;import org.mule.api.endpoint.ImmutableEndpoint;import org.mule.api.lifecycle.InitialisationException;import org.mule.transport.AbstractConnector;import org.mule.util.StringUtils;import java.util.Enumeration;import java.util.HashMap;import java.util.Map;import java.util.Properties;import javax.mail.Authenticator;import javax.mail.Session;import javax.mail.URLName;/** * Abstract superclass for mail connectors. Provides Mule with an Authenticator * object and other shared functionality like e.g. MuleSession creation. */public abstract class AbstractMailConnector extends AbstractConnector{    public static final String MAILBOX = "INBOX";    private Map sessions = new HashMap();    private String mailboxFolder;    private int defaultPort;    /**     * A custom authenticator to be used on any mail sessions created with this     * connector. This will only be used if user name credendials are set on the     * endpoint.     */    private Authenticator authenticator = null;    public AbstractMailConnector(int defaultPort, String mailboxFolder)    {        super();        this.defaultPort = defaultPort;        this.mailboxFolder = mailboxFolder;    }    public int getDefaultPort()    {        return defaultPort;    }    public Authenticator getAuthenticator()    {        return authenticator;    }    public void setAuthenticator(Authenticator authenticator)    {        this.authenticator = authenticator;    }        public String getMailboxFolder()    {        return mailboxFolder;    }    public void setMailboxFolder(String mailboxFolder)    {        this.mailboxFolder = mailboxFolder;    }    public synchronized SessionDetails getSessionDetails(ImmutableEndpoint endpoint)    {        SessionDetails sessionDetails = (SessionDetails) sessions.get(endpoint);        if (null == sessionDetails)        {            sessionDetails = newSession(endpoint);            sessions.put(endpoint, sessionDetails);        }        return sessionDetails;    }        public URLName urlFromEndpoint(ImmutableEndpoint endpoint)    {        String inbox = endpoint.getEndpointURI().getPath();        if (inbox.length() == 0)        {            inbox = getMailboxFolder();        }        else        {            inbox = inbox.substring(1);        }        EndpointURI uri = endpoint.getEndpointURI();        return new URLName(uri.getScheme(), uri.getHost(), uri.getPort(), inbox,                uri.getUser(), uri.getPassword());    }        /**     * Some protocols (eg secure extensions) extend a "base" protocol.     * Subclasses for such protocols should override this method.     *      * @return the underlying (eg non-secure) protocol     */    protected String getBaseProtocol()    {        return getProtocol();    }        /**     * Subclasses should extend this to add further properties.       * Synchronization is managed outside this call (so no need to synchronize further on properties)     *      * @param global system properties      * @param local local properties (specific to one session)     * @param url the endpoint url     */    protected void extendPropertiesForSession(Properties global, Properties local, URLName url)    {        int port = url.getPort();        if (port == -1)        {            port = this.getDefaultPort();        }        local.setProperty("mail." + getBaseProtocol() + ".socketFactory.port", Integer.toString(port));        if (StringUtils.isNotBlank(url.getPassword()))        {            local.setProperty("mail." + getBaseProtocol() + ".auth", "true");            if (getAuthenticator() == null)            {                setAuthenticator(new DefaultAuthenticator(url.getUsername(), url.getPassword()));                if (logger.isDebugEnabled())                {                    logger.debug("No Authenticator set on connector: " + getName() + "; using default.");                }            }        }        else        {            local.setProperty("mail." + getBaseProtocol() + ".auth", "false");        }                // TODO - i'm not at all certain that these properties (especially the ones        // using the base protocol) are needed.  they are inherited from old, gnarly        // code.        if (StringUtils.isNotBlank(url.getHost())) {            local.setProperty("mail." + getBaseProtocol() + ".host", url.getHost());        }        local.setProperty("mail." + getBaseProtocol() + ".rsetbeforequit", "true");    }    protected SessionDetails newSession(ImmutableEndpoint endpoint)    {        URLName url = urlFromEndpoint(endpoint);        Properties global = System.getProperties();        Properties local = new Properties();        Session session;        // make sure we do not mess with authentication set via system properties        synchronized (global)        {            extendPropertiesForSession(global, local, url);            session = Session.getInstance(local, getAuthenticator());        }        if (logger.isDebugEnabled())        {            local.setProperty("mail.debug", "true");                        dumpProperties("MuleSession local properties", local, true);            dumpProperties("System global properties", global, true);            logger.debug("Creating mail session: host = " + url.getHost() + ", port = " + url.getPort()                + ", user = " + url.getUsername() + ", pass = " + url.getPassword());        }        return new SessionDetails(session, url);    }        protected void dumpProperties(String title, Properties properties, boolean filter)    {        int skipped = 0;        logger.debug(title + " =============");        Enumeration keys = properties.keys();        while (keys.hasMoreElements())        {            String key = (String) keys.nextElement();            if (!filter || key.startsWith("mule.") || key.startsWith("mail.") || key.startsWith("javax."))            {                String value = properties.getProperty(key);                logger.debug(key + ": " + value);            }            else             {                ++skipped;            }        }        if (filter)        {            logger.debug("skipped " + skipped);        }    }        // supply these here because sub-classes are very simple    protected void doInitialise() throws InitialisationException    {        // template method, nothing to do    }    protected void doDispose()    {        // template method, nothing to do    }    protected void doConnect() throws Exception    {        // template method, nothing to do    }    protected void doDisconnect() throws Exception    {        // template method, nothing to do    }    protected void doStart() throws MuleException    {        // template method, nothing to do    }    protected void doStop() throws MuleException    {        // template method, nothing to do    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -