src/share/jaxws_classes/com/sun/xml/internal/ws/util/JAXWSUtils.java

changeset 286
f50545b5e2f1
child 368
0989ad8c0860
equal deleted inserted replaced
284:88b85470e72c 286:f50545b5e2f1
1 /*
2 * Copyright (c) 1997, 2010, 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 */
25
26 package com.sun.xml.internal.ws.util;
27
28 import java.util.UUID;
29 import java.util.regex.Pattern;
30 import java.net.URL;
31 import java.net.MalformedURLException;
32 import java.net.URI;
33 import java.net.URISyntaxException;
34 import java.io.File;
35 import java.io.IOException;
36
37 import javax.xml.namespace.QName;
38
39 /**
40 * @author Vivek Pandey
41 *
42 * Wrapper utility class to be used from the generated code or run time.
43 */
44 public final class JAXWSUtils {
45 public static String getUUID(){
46 return UUID.randomUUID().toString();
47 }
48
49
50
51 public static String getFileOrURLName(String fileOrURL) {
52 try{
53 try {
54 return escapeSpace(new URL(fileOrURL).toExternalForm());
55 } catch (MalformedURLException e) {
56 return new File(fileOrURL).getCanonicalFile().toURL().toExternalForm();
57 }
58 } catch (Exception e) {
59 // try it as an URL
60 return fileOrURL;
61 }
62 }
63
64 public static URL getFileOrURL(String fileOrURL) throws IOException {
65 try {
66 URL url = new URL(fileOrURL);
67 String scheme = String.valueOf(url.getProtocol()).toLowerCase();
68 if (scheme.equals("http") || scheme.equals("https"))
69 return new URL(url.toURI().toASCIIString());
70 return url;
71 } catch (URISyntaxException e) {
72 return new File(fileOrURL).toURL();
73 } catch (MalformedURLException e) {
74 return new File(fileOrURL).toURL();
75 }
76 }
77
78 public static URL getEncodedURL(String urlStr) throws MalformedURLException {
79 URL url = new URL(urlStr);
80 String scheme = String.valueOf(url.getProtocol()).toLowerCase();
81 if (scheme.equals("http") || scheme.equals("https")) {
82 try {
83 return new URL(url.toURI().toASCIIString());
84 } catch (URISyntaxException e) {
85 MalformedURLException malformedURLException = new MalformedURLException(e.getMessage());
86 malformedURLException.initCause(e);
87 throw malformedURLException;
88 }
89 }
90 return url;
91 }
92
93 private static String escapeSpace( String url ) {
94 // URLEncoder didn't work.
95 StringBuffer buf = new StringBuffer();
96 for (int i = 0; i < url.length(); i++) {
97 // TODO: not sure if this is the only character that needs to be escaped.
98 if (url.charAt(i) == ' ')
99 buf.append("%20");
100 else
101 buf.append(url.charAt(i));
102 }
103 return buf.toString();
104 }
105
106 public static String absolutize(String name) {
107 // absolutize all the system IDs in the input,
108 // so that we can map system IDs to DOM trees.
109 try {
110 URL baseURL = new File(".").getCanonicalFile().toURL();
111 return new URL(baseURL, name).toExternalForm();
112 } catch( IOException e ) {
113 ; // ignore
114 }
115 return name;
116 }
117
118 /**
119 * Checks if the system ID is absolute.
120 */
121 public static void checkAbsoluteness(String systemId) {
122 // we need to be able to handle system IDs like "urn:foo", which java.net.URL can't process,
123 // but OTOH we also need to be able to process system IDs like "file://a b c/def.xsd",
124 // which java.net.URI can't process. So for now, let's fail only if both of them fail.
125 // eventually we need a proper URI class that works for us.
126 try {
127 new URL(systemId);
128 } catch( MalformedURLException _ ) {
129 try {
130 new URI(systemId);
131 } catch (URISyntaxException e ) {
132 throw new IllegalArgumentException("system ID '"+systemId+"' isn't absolute",e);
133 }
134 }
135 }
136
137 /*
138 * To match, both QNames must have the same namespace and the local
139 * part of the target must match the local part of the 'pattern'
140 * QName, which may contain wildcard characters.
141 */
142 public static boolean matchQNames(QName target, QName pattern) {
143 if ((target == null) || (pattern == null)) {
144 // if no service or port is in descriptor
145 return false;
146 }
147 if (pattern.getNamespaceURI().equals(target.getNamespaceURI())) {
148 String regex = pattern.getLocalPart().replaceAll("\\*", ".*");
149 return Pattern.matches(regex, target.getLocalPart());
150 }
151 return false;
152 }
153
154 }

mercurial