Tue, 09 Apr 2013 14:51:13 +0100
8010393: Update JAX-WS RI to 2.2.9-b12941
Reviewed-by: alanb, erikj
Contributed-by: miroslav.kos@oracle.com, martin.grebac@oracle.com
1 /*
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. 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. Oracle designates this
8 * particular file as subject to the "Classpath" exception as provided
9 * by Oracle 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 Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
22 * or visit www.oracle.com if you need additional information or have any
23 * questions.
24 */
26 package com.sun.xml.internal.messaging.saaj.soap.name;
28 import java.util.logging.Level;
29 import java.util.logging.Logger;
31 import javax.xml.namespace.QName;
32 import javax.xml.soap.Name;
33 import javax.xml.soap.SOAPConstants;
35 //import com.sun.org.apache.xerces.internal.xni.NamespaceContext;
36 import org.w3c.dom.Element;
37 import com.sun.xml.internal.messaging.saaj.util.LogDomainConstants;
39 public class NameImpl implements Name {
40 public static final String XML_NAMESPACE_PREFIX = "xml";
41 public static final String XML_SCHEMA_NAMESPACE_PREFIX = "xs";
42 public static final String SOAP_ENVELOPE_PREFIX = "SOAP-ENV";
44 public static final String XML_NAMESPACE =
45 "http://www.w3.org/XML/1998/namespace";
46 public static final String SOAP11_NAMESPACE =
47 SOAPConstants.URI_NS_SOAP_ENVELOPE;
48 public static final String SOAP12_NAMESPACE =
49 SOAPConstants.URI_NS_SOAP_1_2_ENVELOPE;
50 public static final String XML_SCHEMA_NAMESPACE =
51 "http://www.w3.org/2001/XMLSchema";
53 protected String uri = "";
54 protected String localName = "";
55 protected String prefix = "";
56 private String qualifiedName = null;
58 protected static final Logger log =
59 Logger.getLogger(LogDomainConstants.NAMING_DOMAIN,
60 "com.sun.xml.internal.messaging.saaj.soap.name.LocalStrings");
62 /**
63 * XML Information Set REC
64 * all namespace attributes (including those named xmlns,
65 * whose [prefix] property has no value) have a namespace URI of http://www.w3.org/2000/xmlns/
66 */
67 public final static String XMLNS_URI = "http://www.w3.org/2000/xmlns/".intern();
69 protected NameImpl(String name) {
70 this.localName = name == null ? "" : name;
71 }
73 protected NameImpl(String name, String prefix, String uri) {
74 this.uri = uri == null ? "" : uri;
75 this.localName = name == null ? "" : name;
76 this.prefix = prefix == null ? "" : prefix;
78 if (this.prefix.equals("xmlns") && this.uri.equals("")) {
79 this.uri = XMLNS_URI;
80 }
81 if (this.uri.equals(XMLNS_URI) && this.prefix.equals("")) {
82 this.prefix = "xmlns";
83 }
84 }
86 public static Name convertToName(QName qname) {
87 return new NameImpl(qname.getLocalPart(),
88 qname.getPrefix(),
89 qname.getNamespaceURI());
90 }
92 public static QName convertToQName(Name name) {
93 return new QName(name.getURI(),
94 name.getLocalName(),
95 name.getPrefix());
96 }
98 public static NameImpl createFromUnqualifiedName(String name) {
99 return new NameImpl(name);
100 }
102 public static Name createFromTagName(String tagName) {
103 return createFromTagAndUri(tagName, "");
104 }
106 public static Name createFromQualifiedName(
107 String qualifiedName,
108 String uri) {
109 return createFromTagAndUri(qualifiedName, uri);
110 }
112 protected static Name createFromTagAndUri(String tagName, String uri) {
113 if (tagName == null) {
114 log.severe("SAAJ0201.name.not.created.from.null.tag");
115 throw new IllegalArgumentException("Cannot create a name from a null tag.");
116 }
117 int index = tagName.indexOf(':');
118 if (index < 0) {
119 return new NameImpl(tagName, "", uri);
120 } else {
121 return new NameImpl(
122 tagName.substring(index + 1),
123 tagName.substring(0, index),
124 uri);
125 }
126 }
128 protected static int getPrefixSeparatorIndex(String qualifiedName) {
129 int index = qualifiedName.indexOf(':');
130 if (index < 0) {
131 log.log(
132 Level.SEVERE,
133 "SAAJ0202.name.invalid.arg.format",
134 new String[] { qualifiedName });
135 throw new IllegalArgumentException(
136 "Argument \""
137 + qualifiedName
138 + "\" must be of the form: \"prefix:localName\"");
139 }
140 return index;
141 }
143 public static String getPrefixFromQualifiedName(String qualifiedName) {
144 return qualifiedName.substring(
145 0,
146 getPrefixSeparatorIndex(qualifiedName));
147 }
149 public static String getLocalNameFromQualifiedName(String qualifiedName) {
150 return qualifiedName.substring(
151 getPrefixSeparatorIndex(qualifiedName) + 1);
152 }
154 public static String getPrefixFromTagName(String tagName) {
155 if (isQualified(tagName)) {
156 return getPrefixFromQualifiedName(tagName);
157 }
158 return "";
159 }
161 public static String getLocalNameFromTagName(String tagName) {
162 if (isQualified(tagName)) {
163 return getLocalNameFromQualifiedName(tagName);
164 }
165 return tagName;
166 }
168 public static boolean isQualified(String tagName) {
169 return tagName.indexOf(':') >= 0;
170 }
172 public static NameImpl create(String name, String prefix, String uri) {
173 if (prefix == null)
174 prefix = "";
175 if (uri == null)
176 uri = "";
177 if (name == null)
178 name = "";
180 if (!uri.equals("") && !name.equals("")) {
181 if (uri.equals(NameImpl.SOAP11_NAMESPACE)) {
182 if (name.equalsIgnoreCase("Envelope"))
183 return createEnvelope1_1Name(prefix);
184 else if (name.equalsIgnoreCase("Header"))
185 return createHeader1_1Name(prefix);
186 else if (name.equalsIgnoreCase("Body"))
187 return createBody1_1Name(prefix);
188 else if (name.equalsIgnoreCase("Fault"))
189 return createFault1_1Name(prefix);
190 else
191 return new SOAP1_1Name(name, prefix);
192 } else if (uri.equals(SOAP12_NAMESPACE)) {
193 if (name.equalsIgnoreCase("Envelope"))
194 return createEnvelope1_2Name(prefix);
195 else if (name.equalsIgnoreCase("Header"))
196 return createHeader1_2Name(prefix);
197 else if (name.equalsIgnoreCase("Body"))
198 return createBody1_2Name(prefix);
199 else if (
200 name.equals("Fault")
201 || name.equals("Reason")
202 || name.equals("Detail"))
203 return createFault1_2Name(name, prefix);
204 else if (name.equals("Code") || name.equals("Subcode"))
205 return createCodeSubcode1_2Name(prefix, name);
206 else
207 return new SOAP1_2Name(name, prefix);
208 }
210 }
211 return new NameImpl(name, prefix, uri);
212 }
214 public static String createQName(String prefix, String localName) {
215 if (prefix == null || prefix.equals("")) {
216 return localName;
217 }
218 return prefix + ":" + localName;
219 }
221 public boolean equals(Object obj) {
222 if (!(obj instanceof Name)) {
223 return false;
224 }
226 Name otherName = (Name) obj;
228 if (!uri.equals(otherName.getURI())) {
229 return false;
230 }
232 if (!localName.equals(otherName.getLocalName())) {
233 return false;
234 }
236 return true;
237 }
239 public int hashCode() {
240 return localName.hashCode();
241 }
243 /**
244 * Get the local name part of this XML Name.
245 *
246 * @return a string for the local name.
247 */
248 public String getLocalName() {
249 return localName;
250 }
252 /* getQualifiedName is inherited from QName */
254 /**
255 * Returns the prefix associated with the namespace of the name.
256 *
257 * @return the prefix as a string.
258 */
259 public String getPrefix() {
260 return prefix;
261 }
263 /**
264 * Returns the URI associated of the namespace.
265 *
266 * @return the uri as a string.
267 */
268 public String getURI() {
269 return uri;
270 }
272 /**
273 * Returns a String version of the name suitable for use in an XML document.
274 */
275 public String getQualifiedName() {
276 if (qualifiedName == null) {
277 if (prefix != null && prefix.length() > 0) {
278 qualifiedName = prefix + ":" + localName;
279 } else {
280 qualifiedName = localName;
281 }
282 }
283 return qualifiedName;
284 }
286 /**
287 * Create a name object for a SOAP1.1 Envelope.
288 */
289 public static NameImpl createEnvelope1_1Name(String prefix) {
290 return new Envelope1_1Name(prefix);
291 }
293 /**
294 * Create a name object for a SOAP1.2 Envelope.
295 */
296 public static NameImpl createEnvelope1_2Name(String prefix) {
297 return new Envelope1_2Name(prefix);
298 }
300 /**
301 * Create a name object for a SOAP1.1 Header.
302 */
303 public static NameImpl createHeader1_1Name(String prefix) {
304 return new Header1_1Name(prefix);
305 }
307 /**
308 * Create a name object for a SOAP1.2 Header.
309 */
310 public static NameImpl createHeader1_2Name(String prefix) {
311 return new Header1_2Name(prefix);
312 }
314 /**
315 * Create a name object for a SOAP1.1 Body.
316 */
317 public static NameImpl createBody1_1Name(String prefix) {
318 return new Body1_1Name(prefix);
319 }
321 /**
322 * Create a name object for a SOAP1.2 Body.
323 */
324 public static NameImpl createBody1_2Name(String prefix) {
325 return new Body1_2Name(prefix);
326 }
328 /**
329 * Create a name object for a SOAP1.1 Fault.
330 */
331 public static NameImpl createFault1_1Name(String prefix) {
332 return new Fault1_1Name(prefix);
333 }
335 /**
336 * Create a name object for a SOAP1.2 NotUnderstood element.
337 */
338 public static NameImpl createNotUnderstood1_2Name(String prefix) {
339 return new NotUnderstood1_2Name(prefix);
340 }
342 /**
343 * Create a name object for a SOAP1.2 Upgrade element.
344 */
345 public static NameImpl createUpgrade1_2Name(String prefix) {
346 return new Upgrade1_2Name(prefix);
347 }
349 /**
350 * Create a name object for a SOAP1.2 SupportedEnvelope Upgrade element.
351 */
352 public static NameImpl createSupportedEnvelope1_2Name(String prefix) {
353 return new SupportedEnvelope1_2Name(prefix);
354 }
356 /**
357 * Create a name object for a SOAP1.2
358 * Fault, Reason or Detail.
359 *
360 * @param localName Local Name of element
361 */
362 public static NameImpl createFault1_2Name(
363 String localName,
364 String prefix) {
365 return new Fault1_2Name(localName, prefix);
366 }
368 /**
369 * Create a name object for a SOAP1.2 Fault/Code or Subcode.
370 *
371 * @param localName Either "Code" or "Subcode"
372 */
373 public static NameImpl createCodeSubcode1_2Name(
374 String prefix,
375 String localName) {
376 return new CodeSubcode1_2Name(localName, prefix);
377 }
379 /**
380 * Create a name object for a SOAP1.1 Fault Detail.
381 */
382 public static NameImpl createDetail1_1Name() {
383 return new Detail1_1Name();
384 }
386 public static NameImpl createDetail1_1Name(String prefix) {
387 return new Detail1_1Name(prefix);
388 }
390 public static NameImpl createFaultElement1_1Name(String localName) {
391 return new FaultElement1_1Name(localName);
392 }
394 public static NameImpl createFaultElement1_1Name(String localName,
395 String prefix) {
396 return new FaultElement1_1Name(localName, prefix);
397 }
399 public static NameImpl createSOAP11Name(String string) {
400 return new SOAP1_1Name(string, null);
401 }
402 public static NameImpl createSOAP12Name(String string) {
403 return new SOAP1_2Name(string, null);
404 }
406 public static NameImpl createSOAP12Name(String localName, String prefix) {
407 return new SOAP1_2Name(localName, prefix);
408 }
410 public static NameImpl createXmlName(String localName) {
411 return new NameImpl(localName, XML_NAMESPACE_PREFIX, XML_NAMESPACE);
412 }
414 public static Name copyElementName(Element element) {
415 String localName = element.getLocalName();
416 String prefix = element.getPrefix();
417 String uri = element.getNamespaceURI();
418 return create(localName, prefix, uri);
419 }
422 static class SOAP1_1Name extends NameImpl {
423 SOAP1_1Name(String name, String prefix) {
424 super(
425 name,
426 (prefix == null || prefix.equals(""))
427 ? NameImpl.SOAP_ENVELOPE_PREFIX
428 : prefix,
429 NameImpl.SOAP11_NAMESPACE);
430 }
431 }
433 static class Envelope1_1Name extends SOAP1_1Name {
434 Envelope1_1Name(String prefix) {
435 super("Envelope", prefix);
436 }
437 }
439 static class Header1_1Name extends SOAP1_1Name {
440 Header1_1Name(String prefix) {
441 super("Header", prefix);
442 }
443 }
445 static class Body1_1Name extends SOAP1_1Name {
446 Body1_1Name(String prefix) {
447 super("Body", prefix);
448 }
449 }
451 static class Fault1_1Name extends NameImpl {
452 Fault1_1Name(String prefix) {
453 super(
454 "Fault",
455 (prefix == null || prefix.equals(""))
456 ? SOAP_ENVELOPE_PREFIX
457 : prefix,
458 SOAP11_NAMESPACE);
459 }
460 }
462 static class Detail1_1Name extends NameImpl {
463 Detail1_1Name() {
464 super("detail");
465 }
467 Detail1_1Name(String prefix) {
468 super("detail", prefix, "");
469 }
470 }
472 static class FaultElement1_1Name extends NameImpl {
473 FaultElement1_1Name(String localName) {
474 super(localName);
475 }
477 FaultElement1_1Name(String localName, String prefix) {
478 super(localName, prefix, "");
479 }
480 }
482 static class SOAP1_2Name extends NameImpl {
483 SOAP1_2Name(String name, String prefix) {
484 super(
485 name,
486 (prefix == null || prefix.equals(""))
487 ? SOAPConstants.SOAP_ENV_PREFIX
488 : prefix,
489 SOAP12_NAMESPACE);
490 }
491 }
493 static class Envelope1_2Name extends SOAP1_2Name {
494 Envelope1_2Name(String prefix) {
495 super("Envelope", prefix);
496 }
497 }
499 static class Header1_2Name extends SOAP1_2Name {
500 Header1_2Name(String prefix) {
501 super("Header", prefix);
502 }
503 }
505 static class Body1_2Name extends SOAP1_2Name {
506 Body1_2Name(String prefix) {
507 super("Body", prefix);
508 }
509 }
511 static class Fault1_2Name extends NameImpl {
512 Fault1_2Name(String name, String prefix) {
513 super(
514 (name == null || name.equals("")) ? "Fault" : name,
515 (prefix == null || prefix.equals(""))
516 ? SOAPConstants.SOAP_ENV_PREFIX
517 : prefix,
518 SOAP12_NAMESPACE);
519 }
520 }
522 static class NotUnderstood1_2Name extends NameImpl {
523 NotUnderstood1_2Name(String prefix) {
524 super(
525 "NotUnderstood",
526 (prefix == null || prefix.equals(""))
527 ? SOAPConstants.SOAP_ENV_PREFIX
528 : prefix,
529 SOAP12_NAMESPACE);
530 }
531 }
533 static class Upgrade1_2Name extends NameImpl {
534 Upgrade1_2Name(String prefix) {
535 super(
536 "Upgrade",
537 (prefix == null || prefix.equals(""))
538 ? SOAPConstants.SOAP_ENV_PREFIX
539 : prefix,
540 SOAP12_NAMESPACE);
541 }
542 }
544 static class SupportedEnvelope1_2Name extends NameImpl {
545 SupportedEnvelope1_2Name(String prefix) {
546 super(
547 "SupportedEnvelope",
548 (prefix == null || prefix.equals(""))
549 ? SOAPConstants.SOAP_ENV_PREFIX
550 : prefix,
551 SOAP12_NAMESPACE);
552 }
553 }
555 static class CodeSubcode1_2Name extends SOAP1_2Name {
556 CodeSubcode1_2Name(String prefix, String localName) {
557 super(prefix, localName);
558 }
559 }
561 }