1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springframework.ws.soap.saaj;
18
19 import java.io.IOException;
20 import java.io.OutputStream;
21 import java.util.Iterator;
22 import java.util.Locale;
23 import javax.activation.DataHandler;
24 import javax.xml.namespace.QName;
25 import javax.xml.soap.AttachmentPart;
26 import javax.xml.soap.Detail;
27 import javax.xml.soap.DetailEntry;
28 import javax.xml.soap.MimeHeader;
29 import javax.xml.soap.MimeHeaders;
30 import javax.xml.soap.SOAPBody;
31 import javax.xml.soap.SOAPConstants;
32 import javax.xml.soap.SOAPElement;
33 import javax.xml.soap.SOAPEnvelope;
34 import javax.xml.soap.SOAPException;
35 import javax.xml.soap.SOAPFault;
36 import javax.xml.soap.SOAPHeader;
37 import javax.xml.soap.SOAPHeaderElement;
38 import javax.xml.soap.SOAPMessage;
39 import javax.xml.transform.Result;
40 import javax.xml.transform.Source;
41 import javax.xml.transform.dom.DOMResult;
42 import javax.xml.transform.dom.DOMSource;
43
44 import org.springframework.util.ObjectUtils;
45 import org.springframework.ws.soap.SoapVersion;
46 import org.springframework.ws.transport.TransportConstants;
47 import org.springframework.ws.transport.TransportOutputStream;
48
49
50
51
52
53
54
55 class Saaj13Implementation extends SaajImplementation {
56
57 private static final Saaj13Implementation INSTANCE = new Saaj13Implementation();
58
59 private Saaj13Implementation() {
60 }
61
62 public static Saaj13Implementation getInstance() {
63 return INSTANCE;
64 }
65
66 public QName getName(SOAPElement element) {
67 return element.getElementQName();
68 }
69
70 public QName getFaultCode(SOAPFault fault) {
71 return fault.getFaultCodeAsQName();
72 }
73
74 public boolean isSoap11(SOAPElement element) {
75 return SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE.equals(element.getNamespaceURI());
76 }
77
78 public DetailEntry addDetailEntry(Detail detail, QName name) throws SOAPException {
79 return detail.addDetailEntry(name);
80 }
81
82 public SOAPHeaderElement addHeaderElement(SOAPHeader header, QName name) throws SOAPException {
83 return header.addHeaderElement(name);
84 }
85
86 public String getFaultRole(SOAPFault fault) {
87 return fault.getFaultRole();
88 }
89
90 public void setFaultRole(SOAPFault fault, String role) throws SOAPException {
91 fault.setFaultRole(role);
92 }
93
94 public SOAPHeaderElement addNotUnderstoodHeaderElement(SOAPHeader header, QName name) throws SOAPException {
95 return header.addNotUnderstoodHeaderElement(name);
96 }
97
98 public SOAPHeaderElement addUpgradeHeaderElement(SOAPHeader header, String[] supportedSoapUris)
99 throws SOAPException {
100 return header.addUpgradeHeaderElement(supportedSoapUris);
101 }
102
103 public Iterator getFaultSubcodes(SOAPFault fault) {
104 return fault.getFaultSubcodes();
105 }
106
107 public void appendFaultSubcode(SOAPFault fault, QName subcode) throws SOAPException {
108 fault.appendFaultSubcode(subcode);
109 }
110
111 public String getFaultNode(SOAPFault fault) {
112 return fault.getFaultNode();
113 }
114
115 public void setFaultNode(SOAPFault fault, String uri) throws SOAPException {
116 fault.setFaultNode(uri);
117 }
118
119 public String getFaultReasonText(SOAPFault fault, Locale locale) throws SOAPException {
120 return fault.getFaultReasonText(locale);
121 }
122
123 public void setFaultReasonText(SOAPFault fault, Locale locale, String text) throws SOAPException {
124 fault.addFaultReasonText(text, locale);
125 }
126
127 public SOAPFault addFault(SOAPBody body, QName faultCode, String faultString, Locale locale) throws SOAPException {
128 if (locale == null) {
129 return body.addFault(faultCode, faultString);
130 }
131 else {
132 return body.addFault(faultCode, faultString, locale);
133 }
134 }
135
136 public Source getSource(SOAPElement element) {
137 return new DOMSource(element);
138 }
139
140 public Result getResult(SOAPElement element) {
141 return new DOMResult(element);
142 }
143
144 public String getText(SOAPElement element) {
145 return element.getValue();
146 }
147
148 public void setText(SOAPElement element, String content) {
149 element.setValue(content);
150 }
151
152 public void addAttribute(SOAPElement element, QName name, String value) throws SOAPException {
153 element.addAttribute(name, value);
154 }
155
156 public void removeAttribute(SOAPElement element, QName name) throws SOAPException {
157 element.removeAttribute(name);
158 }
159
160 public String getAttributeValue(SOAPElement element, QName name) throws SOAPException {
161 return element.getAttributeValue(name);
162 }
163
164 public Iterator getAllAttibutes(SOAPElement element) {
165 return element.getAllAttributesAsQNames();
166 }
167
168 public SOAPEnvelope getEnvelope(SOAPMessage message) throws SOAPException {
169 return message.getSOAPPart().getEnvelope();
170 }
171
172 public SOAPHeader getHeader(SOAPEnvelope envelope) throws SOAPException {
173 return envelope.getHeader();
174 }
175
176 public SOAPBody getBody(SOAPEnvelope envelope) throws SOAPException {
177 return envelope.getBody();
178 }
179
180 public Iterator examineAllHeaderElements(SOAPHeader header) {
181 return header.examineAllHeaderElements();
182 }
183
184 public Iterator examineMustUnderstandHeaderElements(SOAPHeader header, String actorOrRole) {
185 return header.examineMustUnderstandHeaderElements(actorOrRole);
186 }
187
188 public String getActorOrRole(SOAPHeaderElement headerElement) {
189 return headerElement.getActor();
190 }
191
192 public void setActorOrRole(SOAPHeaderElement headerElement, String actorOrRole) {
193 headerElement.setActor(actorOrRole);
194 }
195
196 public boolean getMustUnderstand(SOAPHeaderElement headerElement) {
197 return headerElement.getMustUnderstand();
198 }
199
200 public void setMustUnderstand(SOAPHeaderElement headerElement, boolean mustUnderstand) {
201 headerElement.setMustUnderstand(mustUnderstand);
202 }
203
204 public boolean hasFault(SOAPBody body) {
205 return body.hasFault();
206 }
207
208 public SOAPFault getFault(SOAPBody body) {
209 return body.getFault();
210 }
211
212 public String getFaultActor(SOAPFault fault) {
213 return fault.getFaultActor();
214 }
215
216 public void setFaultActor(SOAPFault fault, String actorOrRole) throws SOAPException {
217 fault.setFaultActor(actorOrRole);
218 }
219
220 public String getFaultString(SOAPFault fault) {
221 return fault.getFaultString();
222 }
223
224 public Locale getFaultStringLocale(SOAPFault fault) {
225 return fault.getFaultStringLocale();
226 }
227
228 public Detail getFaultDetail(SOAPFault fault) {
229 return fault.getDetail();
230 }
231
232 public Detail addFaultDetail(SOAPFault fault) throws SOAPException {
233 return fault.addDetail();
234 }
235
236 public void addTextNode(DetailEntry detailEntry, String text) throws SOAPException {
237 detailEntry.addTextNode(text);
238 }
239
240 public Iterator getDetailEntries(Detail detail) {
241 return detail.getDetailEntries();
242 }
243
244 public SOAPElement getFirstBodyElement(SOAPBody body) {
245 for (Iterator iterator = body.getChildElements(); iterator.hasNext();) {
246 Object child = iterator.next();
247 if (child instanceof SOAPElement) {
248 return (SOAPElement) child;
249 }
250 }
251 return null;
252 }
253
254 public void removeContents(SOAPElement element) {
255 element.removeContents();
256 }
257
258 Iterator getChildElements(SOAPElement element, QName name) throws SOAPException {
259 return element.getChildElements(name);
260 }
261
262 void addNamespaceDeclaration(SOAPElement element, String prefix, String namespaceUri) throws SOAPException {
263 element.addNamespaceDeclaration(prefix, namespaceUri);
264 }
265
266 public void writeTo(SOAPMessage message, OutputStream outputStream) throws SOAPException, IOException {
267 if (message.saveRequired()) {
268 message.saveChanges();
269 }
270 if (outputStream instanceof TransportOutputStream) {
271 TransportOutputStream transportOutputStream = (TransportOutputStream) outputStream;
272
273 MimeHeaders headers = message.getMimeHeaders();
274 if (ObjectUtils.isEmpty(headers.getHeader(TransportConstants.HEADER_CONTENT_TYPE))) {
275 SOAPEnvelope envelope = message.getSOAPPart().getEnvelope();
276 if (envelope.getElementQName().getNamespaceURI()
277 .equals(SoapVersion.SOAP_11.getEnvelopeNamespaceUri())) {
278 headers.addHeader(TransportConstants.HEADER_CONTENT_TYPE, SoapVersion.SOAP_11.getContentType());
279 }
280 else {
281 headers.addHeader(TransportConstants.HEADER_CONTENT_TYPE, SoapVersion.SOAP_12.getContentType());
282 }
283 if (message.saveRequired()) {
284 message.saveChanges();
285 }
286 }
287 for (Iterator iterator = headers.getAllHeaders(); iterator.hasNext();) {
288 MimeHeader mimeHeader = (MimeHeader) iterator.next();
289 transportOutputStream.addHeader(mimeHeader.getName(), mimeHeader.getValue());
290 }
291 }
292 message.writeTo(outputStream);
293
294 }
295
296 public MimeHeaders getMimeHeaders(SOAPMessage message) {
297 return message.getMimeHeaders();
298 }
299
300 public Iterator getAttachments(SOAPMessage message) {
301 return message.getAttachments();
302 }
303
304 public Iterator getAttachment(SOAPMessage message, MimeHeaders mimeHeaders) {
305 return message.getAttachments(mimeHeaders);
306 }
307
308 public AttachmentPart addAttachmentPart(SOAPMessage message, DataHandler dataHandler) {
309 AttachmentPart attachmentPart = message.createAttachmentPart(dataHandler);
310 message.addAttachmentPart(attachmentPart);
311 return attachmentPart;
312 }
313 }