1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package ch.elca.el4j.services.remoting.servlet;
18
19 import java.util.LinkedHashSet;
20 import java.util.Map;
21 import java.util.Set;
22
23 import javax.servlet.ServletConfig;
24 import javax.servlet.ServletException;
25 import javax.servlet.http.HttpServlet;
26 import javax.servlet.http.HttpServletRequest;
27 import javax.servlet.http.HttpServletResponse;
28
29 import org.springframework.web.context.WebApplicationContext;
30 import org.springframework.web.context.support.WebApplicationContextUtils;
31
32 import com.sun.xml.ws.transport.http.servlet.ServletAdapterList;
33 import com.sun.xml.ws.transport.http.servlet.SpringBinding;
34 import com.sun.xml.ws.transport.http.servlet.WSServletDelegate;
35
36 import ch.elca.el4j.services.remoting.RemotingServiceExporter;
37 import ch.elca.el4j.services.remoting.protocol.Jaxws;
38
39
40
41
42
43
44
45
46
47
48
49
50
51 public class WSSpringServlet extends HttpServlet {
52
53
54
55
56 private WSServletDelegate m_delegate;
57
58
59
60 public void init(ServletConfig servletConfig) throws ServletException {
61 super.init(servletConfig);
62
63
64 WebApplicationContext wac = WebApplicationContextUtils
65 .getRequiredWebApplicationContext(getServletContext());
66
67 Set<SpringBinding> bindings = new LinkedHashSet<SpringBinding>();
68
69
70 Map<?, ?> map = wac.getBeansOfType(RemotingServiceExporter.class);
71 for (Object beanName : map.keySet()) {
72 RemotingServiceExporter exporter
73 = (RemotingServiceExporter) map.get(beanName);
74
75 if (exporter.getRemoteProtocol() instanceof Jaxws) {
76 try {
77 SpringBinding binding = (SpringBinding) exporter.getObject();
78 if (binding != null) {
79 bindings.add(binding);
80 }
81 } catch (Exception e) {
82
83 log("Could not create JAX-WS Spring binding for bean '"
84 + ((String) beanName).substring(1) + "'");
85 }
86 }
87 }
88
89
90 bindings.addAll(wac.getBeansOfType(SpringBinding.class).values());
91
92
93 ServletAdapterList l = new ServletAdapterList();
94 for (SpringBinding binding : bindings) {
95 binding.create(l);
96 }
97
98 m_delegate = new WSServletDelegate(l, getServletContext());
99 }
100
101
102 protected void doPost(HttpServletRequest request,
103 HttpServletResponse response) throws ServletException {
104 m_delegate.doPost(request, response, getServletContext());
105 }
106
107
108 protected void doGet(HttpServletRequest request,
109 HttpServletResponse response) throws ServletException {
110 m_delegate.doGet(request, response, getServletContext());
111 }
112
113
114 protected void doPut(HttpServletRequest request,
115 HttpServletResponse response) throws ServletException {
116 m_delegate.doPut(request, response, getServletContext());
117 }
118
119
120 protected void doDelete(HttpServletRequest request,
121 HttpServletResponse response) throws ServletException {
122 m_delegate.doDelete(request, response, getServletContext());
123 }
124 }