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