Mon, 04 May 2009 21:10:41 -0700
6658158: Mutable statics in SAAJ (findbugs)
6658163: txw2.DatatypeWriter.BUILDIN is a mutable static (findbugs)
Reviewed-by: darcy
1 /*
2 * Copyright 2005-2006 Sun Microsystems, Inc. All Rights Reserved.
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4 *
5 * This code is free software; you can redistribute it and/or modify it
6 * under the terms of the GNU General Public License version 2 only, as
7 * published by the Free Software Foundation. Sun designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Sun in the LICENSE file that accompanied this code.
10 *
11 * This code is distributed in the hope that it will be useful, but WITHOUT
12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
14 * version 2 for more details (a copy is included in the LICENSE file that
15 * accompanied this code).
16 *
17 * You should have received a copy of the GNU General Public License version
18 * 2 along with this work; if not, write to the Free Software Foundation,
19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
20 *
21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara,
22 * CA 95054 USA or visit www.sun.com if you need additional information or
23 * have any questions.
24 */
25 /*
26 *
27 *
28 *
29 */
32 package com.sun.xml.internal.messaging.saaj.soap.name;
34 import java.util.logging.Level;
35 import java.util.logging.Logger;
37 import javax.xml.namespace.QName;
38 import javax.xml.soap.Name;
39 import javax.xml.soap.SOAPConstants;
41 import com.sun.org.apache.xerces.internal.xni.NamespaceContext;
42 import org.w3c.dom.Element;
44 import com.sun.xml.internal.messaging.saaj.soap.impl.ElementImpl;
45 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
47 public class NameImpl implements Name {
48 public static final String XML_NAMESPACE_PREFIX = "xml";
49 public static final String XML_SCHEMA_NAMESPACE_PREFIX = "xs";
50 public static final String SOAP_ENVELOPE_PREFIX = "SOAP-ENV";
52 public static final String XML_NAMESPACE =
53 "http://www.w3.org/XML/1998/namespace";
54 public static final String SOAP11_NAMESPACE =
55 SOAPConstants.URI_NS_SOAP_ENVELOPE;
56 public static final String SOAP12_NAMESPACE =
57 SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE;
58 public static final String XML_SCHEMA_NAMESPACE =
59 "http://www.w3.org/2001/XMLSchema";
61 protected String uri = "";
62 protected String localName = "";
63 protected String prefix = "";
64 private String qualifiedName = null;
66 protected static final Logger log =
67 Logger.getLogger(LogDomainConstants.NAMING_DOMAIN,
68 "com.sun.xml.internal.messaging.saaj.soap.name.LocalStrings");
70 protected NameImpl(String name) {
71 this.localName = name == null ? "" : name;
72 }
74 protected NameImpl(String name, String prefix, String uri) {
75 this.uri = uri == null ? "" : uri;
76 this.localName = name == null ? "" : name;
77 this.prefix = prefix == null ? "" : prefix;
79 if (this.prefix.equals("xmlns") && this.uri.equals("")) {
80 this.uri = NamespaceContext.XMLNS_URI;
81 }
82 if (this.uri.equals(NamespaceContext.XMLNS_URI) && this.prefix.equals("")) {
83 this.prefix = "xmlns";
84 }
85 }
87 public static Name convertToName(QName qname) {
88 return new NameImpl(qname.getLocalPart(),
89 qname.getPrefix(),
90 qname.getNamespaceURI());
91 }
93 public static QName convertToQName(Name name) {
94 return new QName(name.getURI(),
95 name.getLocalName(),
96 name.getPrefix());
97 }
99 public static NameImpl createFromUnqualifiedName(String name) {
100 return new NameImpl(name);
101 }
103 public static Name createFromTagName(String tagName) {
104 return createFromTagAndUri(tagName, "");
105 }
107 public static Name createFromQualifiedName(
108 String qualifiedName,
109 String uri) {
110 return createFromTagAndUri(qualifiedName, uri);
111 }
113 protected static Name createFromTagAndUri(String tagName, String uri) {
114 if (tagName == null) {
115 log.severe("SAAJ0201.name.not.created.from.null.tag");
116 throw new IllegalArgumentException("Cannot create a name from a null tag.");
117 }
118 int index = tagName.indexOf(':');
119 if (index < 0) {
120 return new NameImpl(tagName, "", uri);
121 } else {
122 return new NameImpl(
123 tagName.substring(index + 1),
124 tagName.substring(0, index),
125 uri);
126 }
127 }
129 protected static int getPrefixSeparatorIndex(String qualifiedName) {
130 int index = qualifiedName.indexOf(':');
131 if (index < 0) {
132 log.log(
133 Level.SEVERE,
134 "SAAJ0202.name.invalid.arg.format",
135 new String[] { qualifiedName });
136 throw new IllegalArgumentException(
137 "Argument \""
138 + qualifiedName
139 + "\" must be of the form: \"prefix:localName\"");
140 }
141 return index;
142 }
144 public static String getPrefixFromQualifiedName(String qualifiedName) {
145 return qualifiedName.substring(
146 0,
147 getPrefixSeparatorIndex(qualifiedName));
148 }
150 public static String getLocalNameFromQualifiedName(String qualifiedName) {
151 return qualifiedName.substring(
152 getPrefixSeparatorIndex(qualifiedName) + 1);
153 }
155 public static String getPrefixFromTagName(String tagName) {
156 if (isQualified(tagName)) {
157 return getPrefixFromQualifiedName(tagName);
158 }
159 return "";
160 }
162 public static String getLocalNameFromTagName(String tagName) {
163 if (isQualified(tagName)) {
164 return getLocalNameFromQualifiedName(tagName);
165 }
166 return tagName;
167 }
169 public static boolean isQualified(String tagName) {
170 return tagName.indexOf(':') >= 0;
171 }
173 public static NameImpl create(String name, String prefix, String uri) {
174 if (prefix == null)
175 prefix = "";
176 if (uri == null)
177 uri = "";
178 if (name == null)
179 name = "";
181 if (!uri.equals("") && !name.equals("")) {
182 if (uri.equals(NameImpl.SOAP11_NAMESPACE)) {
183 if (name.equalsIgnoreCase("Envelope"))
184 return createEnvelope1_1Name(prefix);
185 else if (name.equalsIgnoreCase("Header"))
186 return createHeader1_1Name(prefix);
187 else if (name.equalsIgnoreCase("Body"))
188 return createBody1_1Name(prefix);
189 else if (name.equalsIgnoreCase("Fault"))
190 return createFault1_1Name(prefix);
191 else
192 return new SOAP1_1Name(name, prefix);
193 } else if (uri.equals(SOAP12_NAMESPACE)) {
194 if (name.equalsIgnoreCase("Envelope"))
195 return createEnvelope1_2Name(prefix);
196 else if (name.equalsIgnoreCase("Header"))
197 return createHeader1_2Name(prefix);
198 else if (name.equalsIgnoreCase("Body"))
199 return createBody1_2Name(prefix);
200 else if (
201 name.equals("Fault")
202 || name.equals("Reason")
203 || name.equals("Detail"))
204 return createFault1_2Name(name, prefix);
205 else if (name.equals("Code") || name.equals("Subcode"))
206 return createCodeSubcode1_2Name(prefix, name);
207 else
208 return new SOAP1_2Name(name, prefix);
209 }
211 }
212 return new NameImpl(name, prefix, uri);
213 }
215 public static String createQName(String prefix, String localName) {
216 if (prefix == null || prefix.equals("")) {
217 return localName;
218 }
219 return prefix + ":" + localName;
220 }
222 public boolean equals(Object obj) {
223 if (!(obj instanceof Name)) {
224 return false;
225 }
227 Name otherName = (Name) obj;
229 if (!uri.equals(otherName.getURI())) {
230 return false;
231 }
233 if (!localName.equals(otherName.getLocalName())) {
234 return false;
235 }
237 return true;
238 }
240 /**
241 * Get the local name part of this XML Name.
242 *
243 * @return a string for the local name.
244 */
245 public String getLocalName() {
246 return localName;
247 }
249 /* getQualifiedName is inherited from QName */
251 /**
252 * Returns the prefix associated with the namespace of the name.
253 *
254 * @return the prefix as a string.
255 */
256 public String getPrefix() {
257 return prefix;
258 }
260 /**
261 * Returns the URI associated of the namespace.
262 *
263 * @return the uri as a string.
264 */
265 public String getURI() {
266 return uri;
267 }
269 /**
270 * Returns a String version of the name suitable for use in an XML document.
271 */
272 public String getQualifiedName() {
273 if (qualifiedName == null) {
274 if (prefix != null && prefix.length() > 0) {
275 qualifiedName = prefix + ":" + localName;
276 } else {
277 qualifiedName = localName;
278 }
279 }
280 return qualifiedName;
281 }
283 /**
284 * Create a name object for a SOAP1.1 Envelope.
285 */
286 public static NameImpl createEnvelope1_1Name(String prefix) {
287 return new Envelope1_1Name(prefix);
288 }
290 /**
291 * Create a name object for a SOAP1.2 Envelope.
292 */
293 public static NameImpl createEnvelope1_2Name(String prefix) {
294 return new Envelope1_2Name(prefix);
295 }
297 /**
298 * Create a name object for a SOAP1.1 Header.
299 */
300 public static NameImpl createHeader1_1Name(String prefix) {
301 return new Header1_1Name(prefix);
302 }
304 /**
305 * Create a name object for a SOAP1.2 Header.
306 */
307 public static NameImpl createHeader1_2Name(String prefix) {
308 return new Header1_2Name(prefix);
309 }
311 /**
312 * Create a name object for a SOAP1.1 Body.
313 */
314 public static NameImpl createBody1_1Name(String prefix) {
315 return new Body1_1Name(prefix);
316 }
318 /**
319 * Create a name object for a SOAP1.2 Body.
320 */
321 public static NameImpl createBody1_2Name(String prefix) {
322 return new Body1_2Name(prefix);
323 }
325 /**
326 * Create a name object for a SOAP1.1 Fault.
327 */
328 public static NameImpl createFault1_1Name(String prefix) {
329 return new Fault1_1Name(prefix);
330 }
332 /**
333 * Create a name object for a SOAP1.2 NotUnderstood element.
334 */
335 public static NameImpl createNotUnderstood1_2Name(String prefix) {
336 return new NotUnderstood1_2Name(prefix);
337 }
339 /**
340 * Create a name object for a SOAP1.2 Upgrade element.
341 */
342 public static NameImpl createUpgrade1_2Name(String prefix) {
343 return new Upgrade1_2Name(prefix);
344 }
346 /**
347 * Create a name object for a SOAP1.2 SupportedEnvelope Upgrade element.
348 */
349 public static NameImpl createSupportedEnvelope1_2Name(String prefix) {
350 return new SupportedEnvelope1_2Name(prefix);
351 }
353 /**
354 * Create a name object for a SOAP1.2
355 * Fault, Reason or Detail.
356 *
357 * @param localName Local Name of element
358 */
359 public static NameImpl createFault1_2Name(
360 String localName,
361 String prefix) {
362 return new Fault1_2Name(localName, prefix);
363 }
365 /**
366 * Create a name object for a SOAP1.2 Fault/Code or Subcode.
367 *
368 * @param localName Either "Code" or "Subcode"
369 */
370 public static NameImpl createCodeSubcode1_2Name(
371 String prefix,
372 String localName) {
373 return new CodeSubcode1_2Name(localName, prefix);
374 }
376 /**
377 * Create a name object for a SOAP1.1 Fault Detail.
378 */
379 public static NameImpl createDetail1_1Name() {
380 return new Detail1_1Name();
381 }
383 public static NameImpl createDetail1_1Name(String prefix) {
384 return new Detail1_1Name(prefix);
385 }
387 public static NameImpl createFaultElement1_1Name(String localName) {
388 return new FaultElement1_1Name(localName);
389 }
391 public static NameImpl createFaultElement1_1Name(String localName,
392 String prefix) {
393 return new FaultElement1_1Name(localName, prefix);
394 }
396 public static NameImpl createSOAP11Name(String string) {
397 return new SOAP1_1Name(string, null);
398 }
399 public static NameImpl createSOAP12Name(String string) {
400 return new SOAP1_2Name(string, null);
401 }
403 public static NameImpl createSOAP12Name(String localName, String prefix) {
404 return new SOAP1_2Name(localName, prefix);
405 }
407 public static NameImpl createXmlName(String localName) {
408 return new NameImpl(localName, XML_NAMESPACE_PREFIX, XML_NAMESPACE);
409 }
411 public static Name copyElementName(Element element) {
412 String localName = element.getLocalName();
413 String prefix = element.getPrefix();
414 String uri = element.getNamespaceURI();
415 return create(localName, prefix, uri);
416 }
419 static class SOAP1_1Name extends NameImpl {
420 SOAP1_1Name(String name, String prefix) {
421 super(
422 name,
423 (prefix == null || prefix.equals(""))
424 ? NameImpl.SOAP_ENVELOPE_PREFIX
425 : prefix,
426 NameImpl.SOAP11_NAMESPACE);
427 }
428 }
430 static class Envelope1_1Name extends SOAP1_1Name {
431 Envelope1_1Name(String prefix) {
432 super("Envelope", prefix);
433 }
434 }
436 static class Header1_1Name extends SOAP1_1Name {
437 Header1_1Name(String prefix) {
438 super("Header", prefix);
439 }
440 }
442 static class Body1_1Name extends SOAP1_1Name {
443 Body1_1Name(String prefix) {
444 super("Body", prefix);
445 }
446 }
448 static class Fault1_1Name extends NameImpl {
449 Fault1_1Name(String prefix) {
450 super(
451 "Fault",
452 (prefix == null || prefix.equals(""))
453 ? SOAP_ENVELOPE_PREFIX
454 : prefix,
455 SOAP11_NAMESPACE);
456 }
457 }
459 static class Detail1_1Name extends NameImpl {
460 Detail1_1Name() {
461 super("detail");
462 }
464 Detail1_1Name(String prefix) {
465 super("detail", prefix, "");
466 }
467 }
469 static class FaultElement1_1Name extends NameImpl {
470 FaultElement1_1Name(String localName) {
471 super(localName);
472 }
474 FaultElement1_1Name(String localName, String prefix) {
475 super(localName, prefix, "");
476 }
477 }
479 static class SOAP1_2Name extends NameImpl {
480 SOAP1_2Name(String name, String prefix) {
481 super(
482 name,
483 (prefix == null || prefix.equals(""))
484 ? SOAPConstants.SOAP_ENV_PREFIX
485 : prefix,
486 SOAP12_NAMESPACE);
487 }
488 }
490 static class Envelope1_2Name extends SOAP1_2Name {
491 Envelope1_2Name(String prefix) {
492 super("Envelope", prefix);
493 }
494 }
496 static class Header1_2Name extends SOAP1_2Name {
497 Header1_2Name(String prefix) {
498 super("Header", prefix);
499 }
500 }
502 static class Body1_2Name extends SOAP1_2Name {
503 Body1_2Name(String prefix) {
504 super("Body", prefix);
505 }
506 }
508 static class Fault1_2Name extends NameImpl {
509 Fault1_2Name(String name, String prefix) {
510 super(
511 (name == null || name.equals("")) ? "Fault" : name,
512 (prefix == null || prefix.equals(""))
513 ? SOAPConstants.SOAP_ENV_PREFIX
514 : prefix,
515 SOAP12_NAMESPACE);
516 }
517 }
519 static class NotUnderstood1_2Name extends NameImpl {
520 NotUnderstood1_2Name(String prefix) {
521 super(
522 "NotUnderstood",
523 (prefix == null || prefix.equals(""))
524 ? SOAPConstants.SOAP_ENV_PREFIX
525 : prefix,
526 SOAP12_NAMESPACE);
527 }
528 }
530 static class Upgrade1_2Name extends NameImpl {
531 Upgrade1_2Name(String prefix) {
532 super(
533 "Upgrade",
534 (prefix == null || prefix.equals(""))
535 ? SOAPConstants.SOAP_ENV_PREFIX
536 : prefix,
537 SOAP12_NAMESPACE);
538 }
539 }
541 static class SupportedEnvelope1_2Name extends NameImpl {
542 SupportedEnvelope1_2Name(String prefix) {
543 super(
544 "SupportedEnvelope",
545 (prefix == null || prefix.equals(""))
546 ? SOAPConstants.SOAP_ENV_PREFIX
547 : prefix,
548 SOAP12_NAMESPACE);
549 }
550 }
552 static class CodeSubcode1_2Name extends SOAP1_2Name {
553 CodeSubcode1_2Name(String prefix, String localName) {
554 super(prefix, localName);
555 }
556 }
558 }