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

📄 rmimessagereceiver.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
字号:
/* * $Id: RmiMessageReceiver.java 11079 2008-02-27 15:52:01Z 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.transport.rmi;import org.mule.DefaultMuleMessage;import org.mule.api.config.MuleProperties;import org.mule.api.endpoint.InboundEndpoint;import org.mule.api.lifecycle.CreateException;import org.mule.api.service.Service;import org.mule.api.transport.Connector;import org.mule.transport.AbstractPollingMessageReceiver;import org.mule.transport.ConnectException;import org.mule.transport.rmi.i18n.RmiMessages;import org.mule.util.ClassUtils;import java.lang.reflect.Method;import java.rmi.RMISecurityManager;import java.rmi.Remote;import java.util.List;import org.apache.commons.collections.MapUtils;/** * Will repeatedly call a method on a Remote object. If the method takes parameters A * List of objects can be specified on the endpoint called * <code>methodArgumentsList</code>, If this property is ommitted it is assumed * that the method takes no parameters */public class RmiMessageReceiver extends AbstractPollingMessageReceiver{    protected RmiConnector connector;    protected Remote remoteObject;    protected Method invokeMethod;    protected Object[] methodArguments = null;    public RmiMessageReceiver(Connector connector,                              Service service,                              InboundEndpoint endpoint,                              long frequency) throws CreateException    {        super(connector, service, endpoint);        this.setFrequency(frequency);        this.connector = (RmiConnector) connector;    }    protected void doDispose()    {        // template method    }    protected void doConnect() throws Exception    {        System.setProperty("java.security.policy", connector.getSecurityPolicy());        // Set security manager        if (System.getSecurityManager() == null)        {            System.setSecurityManager(new RMISecurityManager());        }        String methodName = MapUtils.getString(endpoint.getEndpointURI().getParams(),                MuleProperties.MULE_METHOD_PROPERTY, null);        if (null == methodName)        {            methodName = (String) endpoint.getProperty(MuleProperties.MULE_METHOD_PROPERTY);            if (null == methodName)            {                throw new ConnectException(RmiMessages.messageParamServiceMethodNotSet(), this);            }        }        remoteObject = connector.getRemoteObject(getEndpoint());        List args = (List) endpoint.getProperty(RmiConnector.PROPERTY_SERVICE_METHOD_PARAMS_LIST);        Class[] argTypes = new Class[]{};        if (args == null)        {            logger.info(RmiConnector.PROPERTY_SERVICE_METHOD_PARAMS_LIST                    + " not set on endpoint, assuming method call has no arguments");            methodArguments = ClassUtils.NO_ARGS;        }        else        {            argTypes = ClassUtils.getClassTypes(methodArguments);            methodArguments = new Object[args.size()];            methodArguments = args.toArray(methodArguments);        }        invokeMethod = remoteObject.getClass().getMethod(methodName, argTypes);    }    protected void doDisconnect()    {        invokeMethod = null;        remoteObject = null;    }    public void poll()    {        try        {            Object result = invokeMethod.invoke(remoteObject, getMethodArguments());            if (null != result)            {                final Object payload = connector.getMessageAdapter(result).getPayload();                routeMessage(new DefaultMuleMessage(payload), endpoint.isSynchronous());            }        }        catch (Exception e)        {            handleException(e);        }    }    /**     * Returns the method arguments to use when invoking the method on the Remote     * object. This method can be overloaded to enable dynamic method arguments     *     * @return     */    protected Object[] getMethodArguments()    {        return methodArguments;    }}

⌨️ 快捷键说明

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