View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.transport.servlet.jetty;
8   
9   import org.mule.api.endpoint.EndpointException;
10  import org.mule.api.transport.MessageReceiver;
11  import org.mule.api.transport.NoReceiverForEndpointException;
12  import org.mule.transport.http.HttpMessageReceiver;
13  import org.mule.transport.servlet.MuleReceiverServlet;
14  import org.mule.util.StringUtils;
15  
16  import javax.servlet.http.HttpServletRequest;
17  
18  import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
19  import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentMap;
20  
21  public class JettyReceiverServlet extends MuleReceiverServlet
22  {
23      /**
24       * Serial version
25       */
26      private static final long serialVersionUID = 238326861089137293L;
27  
28      private ConcurrentMap receivers = new ConcurrentHashMap(4);
29  
30      @Override
31      protected MessageReceiver getReceiverForURI(HttpServletRequest httpServletRequest)
32          throws EndpointException
33      {
34          String key = httpServletRequest.getPathInfo();
35          if(StringUtils.EMPTY.equals(key))
36          {
37              key = httpServletRequest.getContextPath();
38          }
39  
40          MessageReceiver receiver = (MessageReceiver)receivers.get(key);
41          if (receiver == null)
42          {
43              receiver = HttpMessageReceiver.findReceiverByStem(receivers, key);
44          }
45          
46          if (receiver == null)
47          {
48              throw new NoReceiverForEndpointException(httpServletRequest.getPathInfo());
49          }
50          
51          return receiver;
52      }
53  
54      void addReceiver(MessageReceiver receiver)
55      {
56          receivers.putIfAbsent(getReceiverKey(receiver), receiver);
57      }
58  
59      boolean removeReceiver(MessageReceiver receiver)
60      {
61          return receivers.remove(getReceiverKey(receiver), receiver);
62      }
63  
64      protected String getReceiverKey(MessageReceiver receiver)
65      {
66          String key = receiver.getEndpoint().getEndpointURI().getPath();
67          if(StringUtils.isEmpty(key))
68          {
69              key = "/";
70          }
71          return key;
72      }
73  }