43 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocument;
44 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl;
45 import com.sun.xml.internal.messaging.saaj.soap.impl.*;
46 import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl;
47 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
48 import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl;
49 import org.w3c.dom.Element;
50
51
52 public class Fault1_1Impl extends FaultImpl {
53
54 protected static final Logger log =
55 Logger.getLogger(
56 LogDomainConstants.SOAP_VER1_1_DOMAIN,
57 "com.sun.xml.internal.messaging.saaj.soap.ver1_1.LocalStrings");
58
59 public Fault1_1Impl(SOAPDocumentImpl ownerDocument, String prefix) {
60 super(ownerDocument, NameImpl.createFault1_1Name(prefix));
61 }
62
63 public Fault1_1Impl(Element domElement, SOAPDocumentImpl ownerDoc) {
64 super(ownerDoc, domElement);
65 }
66
67 protected NameImpl getDetailName() {
68 return NameImpl.createDetail1_1Name();
69 }
70
71 protected NameImpl getFaultCodeName() {
72 return NameImpl.createFromUnqualifiedName("faultcode");
73 }
74
75 protected NameImpl getFaultStringName() {
76 return NameImpl.createFromUnqualifiedName("faultstring");
77 }
78
79 protected NameImpl getFaultActorName() {
80 return NameImpl.createFromUnqualifiedName("faultactor");
81 }
82
83 protected DetailImpl createDetail() {
84 return new Detail1_1Impl(
85 ((SOAPDocument) getOwnerDocument()).getDocument());
86 }
87
88 protected FaultElementImpl createSOAPFaultElement(String localName) {
89 return new FaultElement1_1Impl(
90 ((SOAPDocument) getOwnerDocument()).getDocument(),
91 localName);
92 }
93
94 protected void checkIfStandardFaultCode(String faultCode, String uri)
95 throws SOAPException {
96 // SOAP 1.1 doesn't seem to mandate using faultcode from a particular
97 // set of values.
98 // Also need to be backward compatible.
99 }
100
101 protected void finallySetFaultCode(String faultcode) throws SOAPException {
102 this.faultCodeElement.addTextNode(faultcode);
103 }
104
105 public String getFaultCode() {
106 if (this.faultCodeElement == null)
107 findFaultCodeElement();
108 return this.faultCodeElement.getValue();
109 }
110
111 public Name getFaultCodeAsName() {
112
113 String faultcodeString = getFaultCode();
114 if (faultcodeString == null) {
115 return null;
116 }
117 int prefixIndex = faultcodeString.indexOf(':');
118 if (prefixIndex == -1) {
119 // Not a valid SOAP message, but we return the unqualified name
120 // anyway since some apps do not strictly conform to SOAP
121 // specs. A message that does not contain a <faultcode>
122 // element itself is also not valid in which case we return
123 // null instead of throwing an exception so this is consistent.
124 return NameImpl.createFromUnqualifiedName(faultcodeString);
125 }
126
127 // Get the prefix and map it to a namespace name (AKA namespace URI)
128 String prefix = faultcodeString.substring(0, prefixIndex);
129 if (this.faultCodeElement == null)
130 findFaultCodeElement();
131 String nsName = this.faultCodeElement.getNamespaceURI(prefix);
132 return NameImpl.createFromQualifiedName(faultcodeString, nsName);
133 }
134
135 public QName getFaultCodeAsQName() {
136 String faultcodeString = getFaultCode();
137 if (faultcodeString == null) {
138 return null;
139 }
140 if (this.faultCodeElement == null)
141 findFaultCodeElement();
142 return convertCodeToQName(faultcodeString, this.faultCodeElement);
143 }
144
145 public void setFaultString(String faultString) throws SOAPException {
146
147 if (this.faultStringElement == null)
148 findFaultStringElement();
149
150 if (this.faultStringElement == null)
151 this.faultStringElement = addSOAPFaultElement("faultstring");
152 else {
153 this.faultStringElement.removeContents();
154 //this.faultStringElement.removeAttributeNS("http://www.w3.org/XML/1998/namespace", "lang");
155 this.faultStringElement.removeAttribute("xml:lang");
156 }
157
158 this.faultStringElement.addTextNode(faultString);
159 }
160
161 public String getFaultString() {
162 if (this.faultStringElement == null)
163 findFaultStringElement();
164 return this.faultStringElement.getValue();
165
166 }
167
168 public Locale getFaultStringLocale() {
169 if (this.faultStringElement == null)
170 findFaultStringElement();
171 if (this.faultStringElement != null) {
172 String xmlLangAttr =
173 this.faultStringElement.getAttributeValue(
174 NameImpl.createFromUnqualifiedName("xml:lang"));
175 if (xmlLangAttr != null)
176 return xmlLangToLocale(xmlLangAttr);
177 }
178 return null;
179 }
180
181 public void setFaultString(String faultString, Locale locale)
182 throws SOAPException {
183 setFaultString(faultString);
184 this.faultStringElement.addAttribute(
185 NameImpl.createFromTagName("xml:lang"),
186 localeToXmlLang(locale));
187 }
188
189 protected boolean isStandardFaultElement(String localName) {
190 if (localName.equalsIgnoreCase("detail") ||
191 localName.equalsIgnoreCase("faultcode") ||
192 localName.equalsIgnoreCase("faultstring") ||
193 localName.equalsIgnoreCase("faultactor")) {
194 return true;
195 }
196 return false;
197 }
198
199 public void appendFaultSubcode(QName subcode) {
200 log.log(
201 Level.SEVERE,
202 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
203 "appendFaultSubcode");
204 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
205 }
206
207 public void removeAllFaultSubcodes() {
208 log.log(
209 Level.SEVERE,
210 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
211 "removeAllFaultSubcodes");
212 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
213 }
214
215 public Iterator getFaultSubcodes() {
216 log.log(
217 Level.SEVERE,
218 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
219 "getFaultSubcodes");
220 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
221 }
222
223 public String getFaultReasonText(Locale locale) {
224 log.log(
225 Level.SEVERE,
226 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
227 "getFaultReasonText");
228 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
229 }
230
231 public Iterator getFaultReasonTexts() {
232 log.log(
233 Level.SEVERE,
234 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
235 "getFaultReasonTexts");
236 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
237 }
238
239 public Iterator getFaultReasonLocales() {
240 log.log(
241 Level.SEVERE,
242 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
243 "getFaultReasonLocales");
244 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
245 }
246
247 public void addFaultReasonText(String text, java.util.Locale locale)
248 throws SOAPException {
249 log.log(
250 Level.SEVERE,
251 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
252 "addFaultReasonText");
253 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
254 }
255
256 public String getFaultRole() {
257 log.log(
258 Level.SEVERE,
259 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
260 "getFaultRole");
261 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
262 }
263
264 public void setFaultRole(String uri) {
265 log.log(
266 Level.SEVERE,
267 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
268 "setFaultRole");
269 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
270 }
271
272 public String getFaultNode() {
273 log.log(
274 Level.SEVERE,
275 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
276 "getFaultNode");
277 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
278 }
279
280 public void setFaultNode(String uri) {
281 log.log(
282 Level.SEVERE,
283 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
284 "setFaultNode");
285 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
286 }
287
288 protected QName getDefaultFaultCode() {
289 return new QName(SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Server");
290 }
291
292 public SOAPElement addChildElement(SOAPElement element)
293 throws SOAPException {
294 String localName = element.getLocalName();
295 if ("Detail".equalsIgnoreCase(localName)) {
296 if (hasDetail()) {
297 log.severe("SAAJ0305.ver1_2.detail.exists.error");
298 throw new SOAPExceptionImpl("Cannot add Detail, Detail already exists");
299 }
300 }
301 return super.addChildElement(element);
302 }
303
304 protected FaultElementImpl createSOAPFaultElement(QName qname) {
305 return new FaultElement1_1Impl(
306 ((SOAPDocument) getOwnerDocument()).getDocument(),
307 qname);
308 }
309
310 protected FaultElementImpl createSOAPFaultElement(Name qname) {
311 return new FaultElement1_1Impl(
312 ((SOAPDocument) getOwnerDocument()).getDocument(),
313 (NameImpl)qname);
314 }
315
316 public void setFaultCode(String faultCode, String prefix, String uri)
317 throws SOAPException {
318 if (prefix == null || "".equals(prefix)) {
319 if (uri != null && !"".equals(uri)) {
320 prefix = getNamespacePrefix(uri);
321 if (prefix == null || "".equals(prefix)) {
322 prefix = "ns0";
323 }
324 }
325 }
326
327 if (this.faultCodeElement == null)
328 findFaultCodeElement();
329
330 if (this.faultCodeElement == null)
331 this.faultCodeElement = addFaultCodeElement();
332 else
333 this.faultCodeElement.removeContents();
334
335 if (uri == null || "".equals(uri)) {
353
354 if (prefix == null || "".equals(prefix)) {
355 finallySetFaultCode(faultCode);
356 } else {
357 finallySetFaultCode(prefix + ":" + faultCode);
358 }
359 }
360
361 private boolean standardFaultCode(String faultCode) {
362 if (faultCode.equals("VersionMismatch") || faultCode.equals("MustUnderstand")
363 || faultCode.equals("Client") || faultCode.equals("Server")) {
364 return true;
365 }
366 if (faultCode.startsWith("VersionMismatch.") || faultCode.startsWith("MustUnderstand.")
367 || faultCode.startsWith("Client.") || faultCode.startsWith("Server.")) {
368 return true;
369 }
370 return false;
371 }
372
373 public void setFaultActor(String faultActor) throws SOAPException {
374 if (this.faultActorElement == null)
375 findFaultActorElement();
376 if (this.faultActorElement != null)
377 this.faultActorElement.detachNode();
378 if (faultActor == null)
379 return;
380 this.faultActorElement =
381 createSOAPFaultElement(getFaultActorName());
382 this.faultActorElement.addTextNode(faultActor);
383 if (hasDetail()) {
384 insertBefore(this.faultActorElement, this.detail);
385 return;
386 }
387 addNode(this.faultActorElement);
388
389 }
390 }
|
43 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocument;
44 import com.sun.xml.internal.messaging.saaj.soap.SOAPDocumentImpl;
45 import com.sun.xml.internal.messaging.saaj.soap.impl.*;
46 import com.sun.xml.internal.messaging.saaj.soap.name.NameImpl;
47 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
48 import com.sun.xml.internal.messaging.saaj.SOAPExceptionImpl;
49 import org.w3c.dom.Element;
50
51
52 public class Fault1_1Impl extends FaultImpl {
53
54 protected static final Logger log =
55 Logger.getLogger(
56 LogDomainConstants.SOAP_VER1_1_DOMAIN,
57 "com.sun.xml.internal.messaging.saaj.soap.ver1_1.LocalStrings");
58
59 public Fault1_1Impl(SOAPDocumentImpl ownerDocument, String prefix) {
60 super(ownerDocument, NameImpl.createFault1_1Name(prefix));
61 }
62
63 public Fault1_1Impl(SOAPDocumentImpl ownerDoc, Element domElement) {
64 super(ownerDoc, domElement);
65 }
66
67 public Fault1_1Impl(SOAPDocumentImpl ownerDoc) {
68 super(ownerDoc, NameImpl.createFault1_1Name(null));
69 }
70
71 @Override
72 protected NameImpl getDetailName() {
73 return NameImpl.createDetail1_1Name();
74 }
75
76 @Override
77 protected NameImpl getFaultCodeName() {
78 return NameImpl.createFromUnqualifiedName("faultcode");
79 }
80
81 @Override
82 protected NameImpl getFaultStringName() {
83 return NameImpl.createFromUnqualifiedName("faultstring");
84 }
85
86 @Override
87 protected NameImpl getFaultActorName() {
88 return NameImpl.createFromUnqualifiedName("faultactor");
89 }
90
91 @Override
92 protected DetailImpl createDetail() {
93 return new Detail1_1Impl(
94 ((SOAPDocument) getOwnerDocument()).getDocument());
95 }
96
97 @Override
98 protected FaultElementImpl createSOAPFaultElement(String localName) {
99 return new FaultElement1_1Impl(
100 ((SOAPDocument) getOwnerDocument()).getDocument(),
101 localName);
102 }
103
104 @Override
105 protected void checkIfStandardFaultCode(String faultCode, String uri)
106 throws SOAPException {
107 // SOAP 1.1 doesn't seem to mandate using faultcode from a particular
108 // set of values.
109 // Also need to be backward compatible.
110 }
111
112 @Override
113 protected void finallySetFaultCode(String faultcode) throws SOAPException {
114 this.faultCodeElement.addTextNode(faultcode);
115 }
116
117 @Override
118 public String getFaultCode() {
119 if (this.faultCodeElement == null)
120 findFaultCodeElement();
121 return this.faultCodeElement.getValue();
122 }
123
124 @Override
125 public Name getFaultCodeAsName() {
126
127 String faultcodeString = getFaultCode();
128 if (faultcodeString == null) {
129 return null;
130 }
131 int prefixIndex = faultcodeString.indexOf(':');
132 if (prefixIndex == -1) {
133 // Not a valid SOAP message, but we return the unqualified name
134 // anyway since some apps do not strictly conform to SOAP
135 // specs. A message that does not contain a <faultcode>
136 // element itself is also not valid in which case we return
137 // null instead of throwing an exception so this is consistent.
138 return NameImpl.createFromUnqualifiedName(faultcodeString);
139 }
140
141 // Get the prefix and map it to a namespace name (AKA namespace URI)
142 String prefix = faultcodeString.substring(0, prefixIndex);
143 if (this.faultCodeElement == null)
144 findFaultCodeElement();
145 String nsName = this.faultCodeElement.getNamespaceURI(prefix);
146 return NameImpl.createFromQualifiedName(faultcodeString, nsName);
147 }
148
149 @Override
150 public QName getFaultCodeAsQName() {
151 String faultcodeString = getFaultCode();
152 if (faultcodeString == null) {
153 return null;
154 }
155 if (this.faultCodeElement == null)
156 findFaultCodeElement();
157 return convertCodeToQName(faultcodeString, this.faultCodeElement);
158 }
159
160 @Override
161 public void setFaultString(String faultString) throws SOAPException {
162
163 if (this.faultStringElement == null)
164 findFaultStringElement();
165
166 if (this.faultStringElement == null)
167 this.faultStringElement = addSOAPFaultElement("faultstring");
168 else {
169 this.faultStringElement.removeContents();
170 //this.faultStringElement.removeAttributeNS("http://www.w3.org/XML/1998/namespace", "lang");
171 this.faultStringElement.removeAttribute("xml:lang");
172 }
173
174 this.faultStringElement.addTextNode(faultString);
175 }
176
177 @Override
178 public String getFaultString() {
179 if (this.faultStringElement == null)
180 findFaultStringElement();
181 return this.faultStringElement.getValue();
182
183 }
184
185 @Override
186 public Locale getFaultStringLocale() {
187 if (this.faultStringElement == null)
188 findFaultStringElement();
189 if (this.faultStringElement != null) {
190 String xmlLangAttr =
191 this.faultStringElement.getAttributeValue(
192 NameImpl.createFromUnqualifiedName("xml:lang"));
193 if (xmlLangAttr != null)
194 return xmlLangToLocale(xmlLangAttr);
195 }
196 return null;
197 }
198
199 @Override
200 public void setFaultString(String faultString, Locale locale)
201 throws SOAPException {
202 setFaultString(faultString);
203 this.faultStringElement.addAttribute(
204 NameImpl.createFromTagName("xml:lang"),
205 localeToXmlLang(locale));
206 }
207
208 @Override
209 protected boolean isStandardFaultElement(String localName) {
210 if (localName.equalsIgnoreCase("detail") ||
211 localName.equalsIgnoreCase("faultcode") ||
212 localName.equalsIgnoreCase("faultstring") ||
213 localName.equalsIgnoreCase("faultactor")) {
214 return true;
215 }
216 return false;
217 }
218
219 @Override
220 public void appendFaultSubcode(QName subcode) {
221 log.log(
222 Level.SEVERE,
223 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
224 "appendFaultSubcode");
225 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
226 }
227
228 @Override
229 public void removeAllFaultSubcodes() {
230 log.log(
231 Level.SEVERE,
232 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
233 "removeAllFaultSubcodes");
234 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
235 }
236
237 @Override
238 public Iterator<QName> getFaultSubcodes() {
239 log.log(
240 Level.SEVERE,
241 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
242 "getFaultSubcodes");
243 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
244 }
245
246 @Override
247 public String getFaultReasonText(Locale locale) {
248 log.log(
249 Level.SEVERE,
250 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
251 "getFaultReasonText");
252 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
253 }
254
255 @Override
256 public Iterator<String> getFaultReasonTexts() {
257 log.log(
258 Level.SEVERE,
259 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
260 "getFaultReasonTexts");
261 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
262 }
263
264 @Override
265 public Iterator<Locale> getFaultReasonLocales() {
266 log.log(
267 Level.SEVERE,
268 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
269 "getFaultReasonLocales");
270 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
271 }
272
273 @Override
274 public void addFaultReasonText(String text, java.util.Locale locale)
275 throws SOAPException {
276 log.log(
277 Level.SEVERE,
278 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
279 "addFaultReasonText");
280 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
281 }
282
283 @Override
284 public String getFaultRole() {
285 log.log(
286 Level.SEVERE,
287 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
288 "getFaultRole");
289 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
290 }
291
292 @Override
293 public void setFaultRole(String uri) {
294 log.log(
295 Level.SEVERE,
296 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
297 "setFaultRole");
298 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
299 }
300
301 @Override
302 public String getFaultNode() {
303 log.log(
304 Level.SEVERE,
305 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
306 "getFaultNode");
307 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
308 }
309
310 @Override
311 public void setFaultNode(String uri) {
312 log.log(
313 Level.SEVERE,
314 "SAAJ0303.ver1_1.msg.op.unsupported.in.SOAP1.1",
315 "setFaultNode");
316 throw new UnsupportedOperationException("Not supported in SOAP 1.1");
317 }
318
319 @Override
320 protected QName getDefaultFaultCode() {
321 return new QName(SOAPConstants.URI_NS_SOAP_1_1_ENVELOPE, "Server");
322 }
323
324 @Override
325 public SOAPElement addChildElement(SOAPElement element)
326 throws SOAPException {
327 String localName = element.getLocalName();
328 if ("Detail".equalsIgnoreCase(localName)) {
329 if (hasDetail()) {
330 log.severe("SAAJ0305.ver1_2.detail.exists.error");
331 throw new SOAPExceptionImpl("Cannot add Detail, Detail already exists");
332 }
333 }
334 return super.addChildElement(element);
335 }
336
337 @Override
338 protected FaultElementImpl createSOAPFaultElement(QName qname) {
339 return new FaultElement1_1Impl(
340 ((SOAPDocument) getOwnerDocument()).getDocument(),
341 qname);
342 }
343
344 @Override
345 protected FaultElementImpl createSOAPFaultElement(Name qname) {
346 return new FaultElement1_1Impl(
347 ((SOAPDocument) getOwnerDocument()).getDocument(),
348 (NameImpl)qname);
349 }
350
351 @Override
352 public void setFaultCode(String faultCode, String prefix, String uri)
353 throws SOAPException {
354 if (prefix == null || "".equals(prefix)) {
355 if (uri != null && !"".equals(uri)) {
356 prefix = getNamespacePrefix(uri);
357 if (prefix == null || "".equals(prefix)) {
358 prefix = "ns0";
359 }
360 }
361 }
362
363 if (this.faultCodeElement == null)
364 findFaultCodeElement();
365
366 if (this.faultCodeElement == null)
367 this.faultCodeElement = addFaultCodeElement();
368 else
369 this.faultCodeElement.removeContents();
370
371 if (uri == null || "".equals(uri)) {
389
390 if (prefix == null || "".equals(prefix)) {
391 finallySetFaultCode(faultCode);
392 } else {
393 finallySetFaultCode(prefix + ":" + faultCode);
394 }
395 }
396
397 private boolean standardFaultCode(String faultCode) {
398 if (faultCode.equals("VersionMismatch") || faultCode.equals("MustUnderstand")
399 || faultCode.equals("Client") || faultCode.equals("Server")) {
400 return true;
401 }
402 if (faultCode.startsWith("VersionMismatch.") || faultCode.startsWith("MustUnderstand.")
403 || faultCode.startsWith("Client.") || faultCode.startsWith("Server.")) {
404 return true;
405 }
406 return false;
407 }
408
409 @Override
410 public void setFaultActor(String faultActor) throws SOAPException {
411 if (this.faultActorElement == null)
412 findFaultActorElement();
413 if (this.faultActorElement != null)
414 this.faultActorElement.detachNode();
415 if (faultActor == null)
416 return;
417 this.faultActorElement =
418 createSOAPFaultElement(getFaultActorName());
419 this.faultActorElement.addTextNode(faultActor);
420 if (hasDetail()) {
421 insertBefore(this.faultActorElement, this.detail);
422 return;
423 }
424 addNode(this.faultActorElement);
425
426 }
427 }
|