1
2
3
4
5
6
7
8
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 java.util.concurrent.ConcurrentHashMap;
21 import java.util.concurrent.ConcurrentMap;
22
23 import javax.servlet.http.HttpServletRequest;
24
25 public class JettyReceiverServlet extends MuleReceiverServlet
26 {
27
28
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 }