comparison WebServiceExtensionsV1.1/WebServiceToolWorkflow_REST_SOAP/lib/SAWADLParser/src/edu/uga/cs/lsdis/meteors/wadls/util/xml/QNameUtils.java @ 0:049760c677de default tip

Galaxy WSExtensions added successfully
author uga-galaxy-group
date Tue, 05 Jul 2011 19:34:18 -0400
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:049760c677de
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 }