1
2
3
4
5
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
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 }