View Javadoc

1   /*
2    * $Id: JettyReceiverServlet.java 12323 2008-07-13 20:07:11Z rossmason $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSource, Inc.  All rights reserved.  http://www.mulesource.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
9    */
10  
11  package org.mule.transport.servlet.jetty;
12  
13  import org.mule.api.endpoint.EndpointException;
14  import org.mule.api.transport.MessageReceiver;
15  import org.mule.api.transport.NoReceiverForEndpointException;
16  import org.mule.routing.filters.WildcardFilter;
17  import org.mule.transport.servlet.MuleReceiverServlet;
18  import org.mule.util.StringUtils;
19  
20  import java.util.Iterator;
21  
22  import javax.servlet.ServletConfig;
23  import javax.servlet.ServletException;
24  import javax.servlet.http.HttpServletRequest;
25  
26  import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
27  import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentMap;
28  
29  public class JettyReceiverServlet extends MuleReceiverServlet
30  {
31      /**
32       * Serial version
33       */
34      private static final long serialVersionUID = 238326861089137293L;
35  
36      private ConcurrentMap receivers = new ConcurrentHashMap(4);
37  
38      //@Override
39      protected void doInit(ServletConfig servletConfig) throws ServletException
40      {
41          //do nothing
42      }
43  
44      //@Override
45      protected MessageReceiver getReceiverForURI(HttpServletRequest httpServletRequest)
46          throws EndpointException
47      {
48          String key = httpServletRequest.getLocalPort() + httpServletRequest.getPathInfo();
49  
50          MessageReceiver receiver = (MessageReceiver)receivers.get(key);
51          if (receiver == null)
52          {
53              for (Iterator iterator = receivers.keySet().iterator(); iterator.hasNext();)
54              {
55                  String s = (String) iterator.next();
56                  if(new WildcardFilter(s).accept(key))
57                  {
58                      receiver = (MessageReceiver)receivers.get(s);
59                      break;
60                  }
61              }
62              if (receiver == null)
63              {
64                  throw new NoReceiverForEndpointException(httpServletRequest.getPathInfo());
65              }
66          }
67          return receiver;
68      }
69  
70      void addReceiver(MessageReceiver receiver)
71      {
72          receivers.putIfAbsent(getReceiverKey(receiver), receiver);
73      }
74  
75      boolean removeReceiver(MessageReceiver receiver)
76      {
77          return receivers.remove(getReceiverKey(receiver), receiver);
78      }
79  
80      protected String getReceiverKey(MessageReceiver receiver)
81      {
82          String key = receiver.getEndpointURI().getPath();
83          if(StringUtils.isEmpty(key))
84          {
85              key = "/";
86          }
87          return receiver.getEndpointURI().getPort() + key;
88      }
89  }