defaultresponseroutercollection.java
来自「提供ESB 应用mule源代码 提供ESB 应用mule源代码」· Java 代码 · 共 218 行
JAVA
218 行
/* * $Id: DefaultResponseRouterCollection.java 13094 2008-10-17 14:04:09Z tcarlson $ * -------------------------------------------------------------------------------------- * 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.response;import org.mule.api.MuleEvent;import org.mule.api.MuleMessage;import org.mule.api.endpoint.ImmutableEndpoint;import org.mule.api.endpoint.InboundEndpoint;import org.mule.api.endpoint.InvalidEndpointTypeException;import org.mule.api.lifecycle.InitialisationException;import org.mule.api.routing.ResponseRouter;import org.mule.api.routing.ResponseRouterCollection;import org.mule.api.routing.Router;import org.mule.api.routing.RoutingException;import org.mule.config.i18n.CoreMessages;import org.mule.management.stats.RouterStatistics;import org.mule.routing.AbstractRouterCollection;import java.util.Iterator;import java.util.List;import edu.emory.mathcs.backport.java.util.concurrent.CopyOnWriteArrayList;/** * <code>DefaultResponseRouterCollection</code> is a router that can be used to control how * the response in a request/response message flow is created. Main usecase is to * aggregate a set of asynchonous events into a single response */public class DefaultResponseRouterCollection extends AbstractRouterCollection implements ResponseRouterCollection{ private volatile List endpoints = new CopyOnWriteArrayList(); private volatile int timeout = -1; // undefined private volatile boolean failOnTimeout = true; public DefaultResponseRouterCollection() { super(RouterStatistics.TYPE_RESPONSE); } public void initialise() throws InitialisationException { if (timeout == -1) // undefined { setTimeout(muleContext.getConfiguration().getDefaultSynchronousEventTimeout()); } super.initialise(); } public void route(MuleEvent event) throws RoutingException { ResponseRouter router; for (Iterator iterator = getRouters().iterator(); iterator.hasNext();) { router = (ResponseRouter) iterator.next(); router.process(event); // Update stats if (getStatistics().isEnabled()) { getStatistics().incrementRoutedMessage(event.getEndpoint()); } } } public MuleMessage getResponse(MuleMessage message) throws RoutingException { MuleMessage result = null; if (routers.size() == 0) { if(logger.isDebugEnabled()) { logger.debug("There are no routers configured on the response router. Returning the current message"); } result = message; } else { ResponseRouter router; for (Iterator iterator = getRouters().iterator(); iterator.hasNext();) { router = (ResponseRouter) iterator.next(); result = router.getResponse(message); } if (result == null) { // Update stats if (getStatistics().isEnabled()) { getStatistics().incrementNoRoutedMessage(); } } } return result; } public void addRouter(Router router) { ((ResponseRouter) router).setTimeout(getTimeout()); ((ResponseRouter) router).setFailOnTimeout(isFailOnTimeout()); routers.add(router); } public ResponseRouter removeRouter(ResponseRouter router) { if (routers.remove(router)) { return router; } else { return null; } } public void addEndpoint(InboundEndpoint endpoint) { if (endpoint != null) { endpoints.add(endpoint); } else { throw new IllegalArgumentException("endpoint = null"); } } public boolean removeEndpoint(InboundEndpoint endpoint) { return endpoints.remove(endpoint); } public List getEndpoints() { return endpoints; } public void setEndpoints(List endpoints) { if (endpoints != null) { this.endpoints.clear(); // Ensure all endpoints are response endpoints // This will go when we start dropping suport for 1.4 and start using 1.5 for (Iterator it = endpoints.iterator(); it.hasNext();) { ImmutableEndpoint endpoint=(ImmutableEndpoint) it.next(); if (!(endpoint instanceof InboundEndpoint)) { throw new InvalidEndpointTypeException(CoreMessages.responseRouterMustUseInboundEndpoints( this, endpoint)); } } this.endpoints.addAll(endpoints); } else { throw new IllegalArgumentException("List of endpoints = null"); } } /** * @param name the Endpoint identifier * @return the Endpoint or null if the endpointUri is not registered * @see org.mule.api.routing.InboundRouterCollection */ public InboundEndpoint getEndpoint(String name) { InboundEndpoint endpointDescriptor; for (Iterator iterator = endpoints.iterator(); iterator.hasNext();) { endpointDescriptor = (InboundEndpoint) iterator.next(); if (endpointDescriptor.getName().equals(name)) { return endpointDescriptor; } } return null; } public int getTimeout() { return timeout; } public void setTimeout(int timeout) { this.timeout = timeout; } public boolean isFailOnTimeout() { return failOnTimeout; } public void setFailOnTimeout(boolean failOnTimeout) { this.failOnTimeout = failOnTimeout; } public boolean hasEndpoints() { return !getEndpoints().isEmpty(); }}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?