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

📄 filteringoutboundrouter.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
字号:
/* * $Id: FilteringOutboundRouter.java 12889 2008-10-03 20:52:49Z 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.routing.outbound;import org.mule.api.MuleException;import org.mule.api.MuleMessage;import org.mule.api.MuleSession;import org.mule.api.endpoint.EndpointException;import org.mule.api.endpoint.EndpointURI;import org.mule.api.endpoint.ImmutableEndpoint;import org.mule.api.endpoint.OutboundEndpoint;import org.mule.api.routing.CouldNotRouteOutboundMessageException;import org.mule.api.routing.RoutePathNotFoundException;import org.mule.api.routing.RoutingException;import org.mule.api.routing.filter.Filter;import org.mule.api.transformer.TransformerException;import org.mule.config.i18n.CoreMessages;import org.mule.endpoint.DynamicURIOutboundEndpoint;import org.mule.endpoint.MuleEndpointURI;import org.mule.util.TemplateParser;import java.util.HashMap;import java.util.Iterator;import java.util.LinkedList;import java.util.List;import java.util.Map;/** * <code>FilteringRouter</code> is a router that accepts events based on a filter * set. */public class FilteringOutboundRouter extends AbstractOutboundRouter{    private List transformers = new LinkedList();    private Filter filter;    private boolean useTemplates = false;    // We used Square templates as they can exist as part of an URI.    private TemplateParser parser = TemplateParser.createSquareBracesStyleParser();        public MuleMessage route(MuleMessage message, MuleSession session)        throws RoutingException    {        MuleMessage result = null;        if (endpoints == null || endpoints.size() == 0)        {            throw new RoutePathNotFoundException(CoreMessages.noEndpointsForRouter(), message, null);        }        OutboundEndpoint ep = getEndpoint(0, message);        try        {            if (ep.isSynchronous())            {                result = send(session, message, ep);            }            else            {                dispatch(session, message, ep);            }        }        catch (MuleException e)        {            throw new CouldNotRouteOutboundMessageException(message, ep, e);        }        return result;    }    public Filter getFilter()    {        return filter;    }    public void setFilter(Filter filter)    {        this.filter = filter;    }    public boolean isMatch(MuleMessage message) throws RoutingException    {        if (getFilter() == null)        {            return true;        }        try        {            message.applyTransformers(transformers);        }        catch (TransformerException e)        {            throw new RoutingException(                    CoreMessages.transformFailedBeforeFilter(),                    message, (ImmutableEndpoint) endpoints.get(0), e);        }        return getFilter().accept(message);    }    public List getTransformers()    {        return transformers;    }    public void setTransformers(List transformers)    {        this.transformers = transformers;    }    public void addEndpoint(OutboundEndpoint endpoint)    {        if (!useTemplates && parser.isContainsTemplate(endpoint.getEndpointURI().toString()))        {            useTemplates = true;        }        super.addEndpoint(endpoint);    }    /**     * Will Return the endpont at the given index and will resolve any template tags     * on the Endpoint URI if necessary     *      * @param index the index of the endpoint to get     * @param message the current message. This is required if template matching is     *            being used     * @return the endpoint at the index, with any template tags resolved     * @throws CouldNotRouteOutboundMessageException if the template causs the     *             endpoint to become illegal or malformed     */    public OutboundEndpoint getEndpoint(int index, MuleMessage message)        throws CouldNotRouteOutboundMessageException    {        if (!useTemplates)        {            return (OutboundEndpoint) endpoints.get(index);        }        else        {            OutboundEndpoint ep = (OutboundEndpoint) endpoints.get(index);            String uri = ep.getEndpointURI().toString();            if (logger.isDebugEnabled())            {                logger.debug("Uri before parsing is: " + uri);            }            Map props = new HashMap();            // Also add the endpoint propertie so that users can set fallback values            // when the property is not set on the event            props.putAll(ep.getProperties());            for (Iterator iterator = message.getPropertyNames().iterator(); iterator.hasNext();)            {                String propertyKey = (String) iterator.next();                props.put(propertyKey, message.getProperty(propertyKey));            }            String newUriString = parser.parse(props, uri);            if (logger.isDebugEnabled())            {                logger.debug("Uri after parsing is: " + uri);            }            try            {                EndpointURI newUri = new MuleEndpointURI(newUriString);                if (!newUri.getScheme().equalsIgnoreCase(ep.getEndpointURI().getScheme()))                {                    throw new CouldNotRouteOutboundMessageException(CoreMessages.schemeCannotChangeForRouter(                        ep.getEndpointURI().getScheme(), newUri.getScheme()), message, ep);                }                return new DynamicURIOutboundEndpoint(ep, newUri);            }            catch (EndpointException e)            {                throw new CouldNotRouteOutboundMessageException(                    CoreMessages.templateCausedMalformedEndpoint(uri, newUriString),                     message, ep, e);            }        }    }    public boolean isUseTemplates()    {        return useTemplates;    }    public void setUseTemplates(boolean useTemplates)    {        this.useTemplates = useTemplates;    }}

⌨️ 快捷键说明

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