1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.client.core;
18
19 import java.io.IOException;
20 import java.util.Enumeration;
21 import java.util.Iterator;
22 import java.util.StringTokenizer;
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 import javax.xml.soap.MessageFactory;
29 import javax.xml.soap.MimeHeader;
30 import javax.xml.soap.MimeHeaders;
31 import javax.xml.soap.SOAPException;
32 import javax.xml.soap.SOAPMessage;
33
34 import org.springframework.util.StringUtils;
35
36
37
38
39
40
41
42 public class SimpleSaajServlet extends HttpServlet {
43
44 private MessageFactory msgFactory = null;
45
46 @Override
47 public void init(ServletConfig servletConfig) throws ServletException {
48 super.init(servletConfig);
49 try {
50 msgFactory = MessageFactory.newInstance();
51 }
52 catch (SOAPException ex) {
53 throw new ServletException("Unable to create message factory" + ex.getMessage());
54 }
55 }
56
57 private MimeHeaders getHeaders(HttpServletRequest httpServletRequest) {
58 Enumeration<?> enumeration = httpServletRequest.getHeaderNames();
59 MimeHeaders headers = new MimeHeaders();
60 while (enumeration.hasMoreElements()) {
61 String headerName = (String) enumeration.nextElement();
62 String headerValue = httpServletRequest.getHeader(headerName);
63 StringTokenizer values = new StringTokenizer(headerValue, ",");
64 while (values.hasMoreTokens()) {
65 headers.addHeader(headerName, values.nextToken().trim());
66 }
67 }
68 return headers;
69 }
70
71 private void putHeaders(MimeHeaders headers, HttpServletResponse res) {
72 Iterator<?> it = headers.getAllHeaders();
73 while (it.hasNext()) {
74 MimeHeader header = (MimeHeader) it.next();
75 String[] values = headers.getHeader(header.getName());
76 String value = StringUtils.arrayToCommaDelimitedString(values);
77 res.setHeader(header.getName(), value);
78 }
79 }
80
81 @Override
82 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
83 try {
84 MimeHeaders headers = getHeaders(req);
85 SOAPMessage request = msgFactory.createMessage(headers, req.getInputStream());
86 SOAPMessage reply = onMessage(request);
87 if (reply != null) {
88 if (reply.saveRequired()) {
89 reply.saveChanges();
90 }
91 resp.setStatus(!reply.getSOAPBody().hasFault() ? HttpServletResponse.SC_OK :
92 HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
93 putHeaders(reply.getMimeHeaders(), resp);
94 reply.writeTo(resp.getOutputStream());
95 }
96 else {
97 resp.setStatus(HttpServletResponse.SC_ACCEPTED);
98 }
99 }
100 catch (Exception ex) {
101 throw new ServletException("SAAJ POST failed " + ex.getMessage());
102 }
103 }
104
105 protected SOAPMessage onMessage(SOAPMessage message) {
106 return message;
107 }
108
109
110 }