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

📄 mulereceiverservlet.java

📁 提供ESB 应用mule源代码 提供ESB 应用mule源代码
💻 JAVA
字号:
/* * $Id: MuleReceiverServlet.java 12833 2008-10-01 22:54:08Z 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.servlet;import org.mule.DefaultMuleMessage;import org.mule.RegistryContext;import org.mule.api.MuleException;import org.mule.api.MuleMessage;import org.mule.api.endpoint.EndpointException;import org.mule.api.endpoint.InboundEndpoint;import org.mule.api.lifecycle.InitialisationException;import org.mule.api.transport.MessageReceiver;import org.mule.api.transport.NoReceiverForEndpointException;import org.mule.endpoint.DynamicURIInboundEndpoint;import org.mule.endpoint.MuleEndpointURI;import org.mule.transport.AbstractMessageReceiver;import org.mule.transport.http.HttpConnector;import org.mule.transport.http.HttpConstants;import org.mule.transport.http.HttpMessageReceiver;import org.mule.transport.http.i18n.HttpMessages;import org.mule.transport.service.TransportFactory;import org.mule.transport.servlet.i18n.ServletMessages;import org.mule.util.PropertiesUtils;import java.io.IOException;import java.util.Iterator;import java.util.Map;import java.util.Properties;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;/** * Receives Http requests via a Servlet and routes the to listeners with servlet:// * endpoints * <p/> * There needs to be a ServletConnector configured on the Mule Server, this connector * must have the servletUrl property set that matches the Url for the container that this * Servlet is hosted in, i.e. something like http://192.168.10.21:8888 */public class MuleReceiverServlet extends AbstractReceiverServlet{    /** Serial version */    private static final long serialVersionUID = 6631307373079767439L;    protected ServletConnector connector = null;    protected void doInit(ServletConfig servletConfig) throws ServletException    {        String servletConnectorName = servletConfig.getInitParameter(SERVLET_CONNECTOR_NAME_PROPERTY);        if (servletConnectorName == null)        {            connector = (ServletConnector) TransportFactory.getConnectorByProtocol("servlet");            if (connector == null)            {                throw new ServletException(ServletMessages.noConnectorForProtocolServlet().toString());            }        }        else        {            connector = (ServletConnector) RegistryContext.getRegistry().lookupConnector(servletConnectorName);            if (connector == null)            {                throw new ServletException(ServletMessages.noServletConnectorFound(servletConnectorName).toString());            }        }    }    protected void doHead(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        try        {            MuleMessage responseMessage = doMethod(request, "HEAD");            if (responseMessage != null)            {                writeResponse(response, responseMessage);            }            else            {                response.setStatus(HttpConstants.SC_OK);            }        }        catch (Exception e)        {            handleException(e, e.getMessage(), response);        }    }    protected void doGet(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        try        {            MuleMessage responseMessage = doMethod(request, "GET");            writeResponse(response, responseMessage);        }        catch (RuntimeException e)        {            throw e;        }        catch (Exception e)        {            handleException(e, e.getMessage(), response);        }    }    protected void setupRequestMessage(HttpServletRequest request, MuleMessage requestMessage)    {        String reqUri = request.getRequestURI().toString();        String queryString = request.getQueryString();        if (queryString != null) {            reqUri += "?"+queryString;        }        requestMessage.setProperty(HttpConnector.HTTP_REQUEST_PROPERTY, reqUri);    }    protected void doPost(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        try        {            MuleMessage responseMessage = doMethod(request, "POST");            if (responseMessage != null)            {                writeResponse(response, responseMessage);            }        }        catch (RuntimeException e)        {            throw e;        }        catch (Exception e)        {            handleException(e, e.getMessage(), response);        }    }    protected MuleMessage doMethod(HttpServletRequest request, String method)        throws MuleException    {        MessageReceiver receiver = getReceiverForURI(request);                MuleMessage requestMessage = new DefaultMuleMessage(new HttpRequestMessageAdapter(request));        requestMessage.setProperty(HttpConnector.HTTP_METHOD_PROPERTY, method);                setupRequestMessage(request, requestMessage);                return routeMessage(receiver, requestMessage, request);    }    protected MuleMessage routeMessage(MessageReceiver receiver, MuleMessage requestMessage, HttpServletRequest request)        throws MuleException    {        return receiver.routeMessage(requestMessage, true);    }    protected void doOptions(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        try        {            MuleMessage responseMessage = doMethod(request, "OPTIONS");            if (responseMessage != null)            {                writeResponse(response, responseMessage);            }        }        catch (Exception e)        {            handleException(e, e.getMessage(), response);        }    }    protected void doPut(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        try        {            MuleMessage responseMessage = doMethod(request, "PUT");            if (responseMessage != null)            {                writeResponse(response, responseMessage);            }        }        catch (Exception e)        {            handleException(e, e.getMessage(), response);        }    }    protected void doDelete(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        try        {            MuleMessage responseMessage = doMethod(request, "DELETE");            if (responseMessage != null)            {                writeResponse(response, responseMessage);            }        }        catch (Exception e)        {            handleException(e, e.getMessage(), response);        }    }    protected void doTrace(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        try        {            MuleMessage responseMessage = doMethod(request, "TRACE");            if (responseMessage != null)            {                writeResponse(response, responseMessage);            }        }        catch (Exception e)        {            handleException(e, e.getMessage(), response);        }    }    protected void doConnect(HttpServletRequest request, HttpServletResponse response)            throws ServletException, IOException    {        try        {            MuleMessage responseMessage = doMethod(request, "CONNECT");            if (responseMessage != null)            {                writeResponse(response, responseMessage);            }        }        catch (Exception e)        {            handleException(e, e.getMessage(), response);        }    }    protected MessageReceiver getReceiverForURI(HttpServletRequest httpServletRequest)            throws EndpointException    {        String uri = getReceiverName(httpServletRequest);        if (uri == null)        {            throw new EndpointException(                    HttpMessages.unableToGetEndpointUri(httpServletRequest.getRequestURI()));        }        MessageReceiver receiver = (MessageReceiver) getReceivers().get(uri);        if (receiver == null)        {            // Nothing found lets try stripping the path and only use the last            // path element            int i = uri.lastIndexOf("/");            if (i > -1)            {                String tempUri = uri.substring(i + 1);                receiver = (AbstractMessageReceiver) getReceivers().get(tempUri);            }            // Lets see if the uri matches up with the last part of            // any of the receiver keys.            if (receiver == null)            {                receiver = HttpMessageReceiver.findReceiverByStem(connector.getReceivers(), uri);            }            // This is some bizarre piece of code so the XFire Servlet code works.            // We should remove this at some point (see XFireWsdlCallTestCase for a failure            // if this code is removed).            if (receiver == null)            {                receiver = HttpMessageReceiver.findReceiverByStem(connector.getReceivers(), uri);            }            // This is some bizarre piece of code so the XFire Servlet code works.            // We should remove this at some point (see XFireWsdlCallTestCase for a failure            // if this code is removed).            if (receiver == null)            {                Map receivers = getReceivers();                Iterator iter = receivers.keySet().iterator();                while (iter.hasNext())                {                    String key = iter.next().toString();                    i = key.lastIndexOf("/");                    if (i > -1)                    {                        String key2 = key.substring(i + 1);                        if (key2.equals(uri))                        {                            receiver = (AbstractMessageReceiver) receivers.get(key);                            break;                        }                    }                }            }            if (receiver == null)            {                throw new NoReceiverForEndpointException("No receiver found for endpointUri: " + uri);            }        }        InboundEndpoint endpoint = receiver.getEndpoint();                // Ensure that this receiver is using a dynamic (mutable) endpoint        if (!(endpoint instanceof DynamicURIInboundEndpoint))         {            endpoint = new DynamicURIInboundEndpoint(receiver.getEndpoint());            receiver.setEndpoint(endpoint);        }                // Tell the dynamic endpoint about our new URL        ((DynamicURIInboundEndpoint) endpoint).setEndpointURI(new MuleEndpointURI(getRequestUrl(httpServletRequest)));                try        {            receiver.getEndpointURI().initialise();        }        catch (InitialisationException e)        {            throw new EndpointException(e);        }        return receiver;    }    protected String getRequestUrl(HttpServletRequest httpServletRequest)    {        StringBuffer url = new StringBuffer();        url.append(connector.getProtocol().toLowerCase());        url.append(":");        url.append(httpServletRequest.getScheme());        url.append("://");        url.append(httpServletRequest.getServerName());        url.append(":");        url.append(httpServletRequest.getServerPort());        url.append("/");        url.append(getReceiverName(httpServletRequest));        if (httpServletRequest.getQueryString() != null)        {            url.append("?");            url.append(httpServletRequest.getQueryString());        }        return url.toString();    }    protected String getReceiverName(HttpServletRequest httpServletRequest)    {        String name = httpServletRequest.getPathInfo();        if (name == null)        {            name = httpServletRequest.getServletPath();            if (name == null)            {                name = httpServletRequest.getParameter("endpoint");                if (name == null)                {                    Properties params = PropertiesUtils.getPropertiesFromQueryString(httpServletRequest.getQueryString());                    name = params.getProperty("endpoint");                    if (name == null)                    {                        return null;                    }                }            }        }        if (name.startsWith("/"))        {            name = name.substring(1);        }        return name;    }    protected Map getReceivers()    {        return connector.getReceivers();    }}

⌨️ 快捷键说明

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