Mercurial > repos > ganjoo > webservice_toolsuite
comparison WebServiceToolWorkflow/lib/SAWADLParser/src/edu/uga/cs/lsdis/meteors/wadls/util/xml/QNameUtils.java @ 0:d5cd409b8a18 default tip
Migrated tool version 1.0.0 from old tool shed archive to new tool shed repository
author | ganjoo |
---|---|
date | Tue, 07 Jun 2011 18:00:50 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:d5cd409b8a18 |
---|---|
1 /* | |
2 * (c) Copyright IBM Corp 2002, 2005 | |
3 */ | |
4 | |
5 package edu.uga.cs.lsdis.meteors.wadls.util.xml; | |
6 | |
7 import javax.wadls.Application; | |
8 import javax.wadls.WADLSException; | |
9 import javax.xml.XMLConstants; | |
10 import javax.xml.namespace.*; | |
11 | |
12 import org.w3c.dom.*; | |
13 | |
14 public class QNameUtils | |
15 { | |
16 public static boolean matches(QName qname, Node node) | |
17 { | |
18 return (node != null && qname.equals(newQName(node))); | |
19 } | |
20 | |
21 public static QName newQName(Node node) | |
22 { | |
23 if (node != null) | |
24 { | |
25 // System.out.println("node:namespace uri is " + node.getNamespaceURI()); | |
26 QName q = new QName(node.getNamespaceURI(), node.getLocalName()); | |
27 //System.out.println("Qname generated is "+q); | |
28 return q; | |
29 | |
30 } | |
31 else | |
32 { | |
33 return new QName(null, null); | |
34 } | |
35 } | |
36 | |
37 public static QName getQName(String prefixedValue, | |
38 Element contextEl) | |
39 throws WADLSException{ | |
40 int index = prefixedValue.indexOf(':'); | |
41 String prefix = (index != -1) | |
42 ? prefixedValue.substring(0, index) | |
43 : null; | |
44 String localPart = prefixedValue.substring(index + 1); | |
45 String namespaceURI = DOMUtils.getNamespaceURIFromPrefix(contextEl, prefix); | |
46 | |
47 if (namespaceURI != null) | |
48 return new QName(namespaceURI, localPart); | |
49 else{ | |
50 String faultCode = (prefix == null) | |
51 ? WADLSException.NO_PREFIX_SPECIFIED | |
52 : WADLSException.UNBOUND_PREFIX; | |
53 | |
54 WADLSException wsdlExc = new WADLSException(faultCode, | |
55 "Unable to determine " + | |
56 "namespace of '" + | |
57 prefixedValue + "'."); | |
58 | |
59 wsdlExc.setLocation(XPathUtils.getXPathExprFromNode(contextEl)); | |
60 | |
61 throw wsdlExc; | |
62 } | |
63 } | |
64 | |
65 /** | |
66 * Parse a string, return a QName. | |
67 * The String can be only in the form of "{namespace}localpart" | |
68 * @param qNameAsString | |
69 * @return A QName by parsing the given string. | |
70 */ | |
71 public static QName generateQName(String qNameAsString){ | |
72 return generateQName(qNameAsString, null); | |
73 } | |
74 | |
75 /** | |
76 * Parse a string, return a QName. | |
77 * The String may be in the form of "prefix:localpart" or "{namespace}localpart" | |
78 * @param qNameAsString | |
79 * @param wsdlDef Wsdl definition for the purpose of getting URI from prefix, and vice versa. | |
80 * @return A QName by paring the given string. | |
81 */ | |
82 public static QName generateQName(String qNameAsString, Application wadlApp){ | |
83 String nsURI = null; | |
84 String prefix = null; | |
85 String localPart = null; | |
86 | |
87 if (qNameAsString == null) { | |
88 throw new IllegalArgumentException("cannot create QName from \"null\" or \"\" String"); | |
89 } | |
90 | |
91 if (qNameAsString.charAt(0) == '{') { //namespace + localpart | |
92 int endOfNamespaceURI = qNameAsString.indexOf('}'); | |
93 if (endOfNamespaceURI == -1) { | |
94 throw new IllegalArgumentException( | |
95 "cannot create QName from \"" | |
96 + qNameAsString | |
97 + "\", missing closing \"}\""); | |
98 } | |
99 else{ | |
100 nsURI = qNameAsString.substring(1, endOfNamespaceURI); | |
101 //get prefix from wsdls definition | |
102 if (wadlApp != null) | |
103 prefix = wadlApp.getPrefix(nsURI); | |
104 localPart = qNameAsString.substring(endOfNamespaceURI + 1); | |
105 return new QName(nsURI, localPart, nsURI); | |
106 } | |
107 | |
108 } | |
109 else{ | |
110 int endOfPrefix = qNameAsString.indexOf(':'); //try prefix | |
111 | |
112 if (endOfPrefix == -1){ //localpart only, use tagetNamespace from wsdls definition | |
113 if (wadlApp != null) | |
114 nsURI = wadlApp.getTargetNamespace(); | |
115 else | |
116 nsURI = XMLConstants.NULL_NS_URI; | |
117 return new QName(nsURI, qNameAsString); | |
118 } | |
119 else if (wadlApp != null){ //prefix + localpart | |
120 prefix = qNameAsString.substring(1, endOfPrefix); | |
121 nsURI = wadlApp.getNamespace(prefix); | |
122 localPart = qNameAsString.substring(endOfPrefix + 1); | |
123 return new QName(nsURI, localPart, nsURI); | |
124 } | |
125 else | |
126 throw new IllegalArgumentException( | |
127 "cannot create QName from \"" | |
128 + qNameAsString | |
129 + "\", no URI and no wsdl definition is given"); | |
130 } | |
131 } | |
132 } |