View Javadoc

1   /*
2    * $Id: JettyReceiverServlet.java 19191 2010-08-25 21:05:23Z tcarlson $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.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.transport.http.HttpMessageReceiver;
17  import org.mule.transport.servlet.MuleReceiverServlet;
18  import org.mule.util.StringUtils;
19  
20  import javax.servlet.http.HttpServletRequest;
21  
22  import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap;
23  import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentMap;
24  
25  public class JettyReceiverServlet extends MuleReceiverServlet
26  {
27      /**
28       * Serial version
29       */
30      private static final long serialVersionUID = 238326861089137293L;
31  
32      private ConcurrentMap receivers = new ConcurrentHashMap(4);
33  
34      @Override
35      protected MessageReceiver getReceiverForURI(HttpServletRequest httpServletRequest)
36          throws EndpointException
37      {
38          String key = httpServletRequest.getPathInfo();
39          if(StringUtils.EMPTY.equals(key))
40          {
41              key = httpServletRequest.getContextPath();
42          }
43  
44          MessageReceiver receiver = (MessageReceiver)receivers.get(key);
45          if (receiver == null)
46          {
47              receiver = HttpMessageReceiver.findReceiverByStem(receivers, key);
48          }
49          
50          if (receiver == null)
51          {
52              throw new NoReceiverForEndpointException(httpServletRequest.getPathInfo());
53          }
54          
55          return receiver;
56      }
57  
58      void addReceiver(MessageReceiver receiver)
59      {
60          receivers.putIfAbsent(getReceiverKey(receiver), receiver);
61      }
62  
63      boolean removeReceiver(MessageReceiver receiver)
64      {
65          return receivers.remove(getReceiverKey(receiver), receiver);
66      }
67  
68      protected String getReceiverKey(MessageReceiver receiver)
69      {
70          String key = receiver.getEndpoint().getEndpointURI().getPath();
71          if(StringUtils.isEmpty(key))
72          {
73              key = "/";
74          }
75          return key;
76      }
77  }