156 lines
5.6 KiB
Java
156 lines
5.6 KiB
Java
/*
|
|
* Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved.
|
|
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
|
|
*
|
|
* This code is free software; you can redistribute it and/or modify it
|
|
* under the terms of the GNU General Public License version 2 only, as
|
|
* published by the Free Software Foundation. Oracle designates this
|
|
* particular file as subject to the "Classpath" exception as provided
|
|
* by Oracle in the LICENSE file that accompanied this code.
|
|
*
|
|
* This code is distributed in the hope that it will be useful, but WITHOUT
|
|
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
|
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
|
|
* version 2 for more details (a copy is included in the LICENSE file that
|
|
* accompanied this code).
|
|
*
|
|
* You should have received a copy of the GNU General Public License version
|
|
* 2 along with this work; if not, write to the Free Software Foundation,
|
|
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
*
|
|
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
|
|
* or visit www.oracle.com if you need additional information or have any
|
|
* questions.
|
|
*/
|
|
|
|
package com.sun.xml.internal.ws.util;
|
|
|
|
import java.util.UUID;
|
|
import java.util.regex.Pattern;
|
|
import java.net.URL;
|
|
import java.net.MalformedURLException;
|
|
import java.net.URI;
|
|
import java.net.URISyntaxException;
|
|
import java.io.File;
|
|
import java.io.IOException;
|
|
|
|
import javax.xml.namespace.QName;
|
|
|
|
/**
|
|
* @author Vivek Pandey
|
|
*
|
|
* Wrapper utility class to be used from the generated code or run time.
|
|
*/
|
|
public final class JAXWSUtils {
|
|
public static String getUUID(){
|
|
return UUID.randomUUID().toString();
|
|
}
|
|
|
|
|
|
|
|
public static String getFileOrURLName(String fileOrURL) {
|
|
try{
|
|
try {
|
|
return escapeSpace(new URL(fileOrURL).toExternalForm());
|
|
} catch (MalformedURLException e) {
|
|
return new File(fileOrURL).getCanonicalFile().toURL().toExternalForm();
|
|
}
|
|
} catch (Exception e) {
|
|
// try it as an URL
|
|
return fileOrURL;
|
|
}
|
|
}
|
|
|
|
public static URL getFileOrURL(String fileOrURL) throws IOException {
|
|
try {
|
|
URL url = new URL(fileOrURL);
|
|
String scheme = String.valueOf(url.getProtocol()).toLowerCase();
|
|
if (scheme.equals("http") || scheme.equals("https"))
|
|
return new URL(url.toURI().toASCIIString());
|
|
return url;
|
|
} catch (URISyntaxException e) {
|
|
return new File(fileOrURL).toURL();
|
|
} catch (MalformedURLException e) {
|
|
return new File(fileOrURL).toURL();
|
|
}
|
|
}
|
|
|
|
public static URL getEncodedURL(String urlStr) throws MalformedURLException {
|
|
URL url = new URL(urlStr);
|
|
String scheme = String.valueOf(url.getProtocol()).toLowerCase();
|
|
if (scheme.equals("http") || scheme.equals("https")) {
|
|
try {
|
|
return new URL(url.toURI().toASCIIString());
|
|
} catch (URISyntaxException e) {
|
|
MalformedURLException malformedURLException = new MalformedURLException(e.getMessage());
|
|
malformedURLException.initCause(e);
|
|
throw malformedURLException;
|
|
}
|
|
}
|
|
return url;
|
|
}
|
|
|
|
private static String escapeSpace( String url ) {
|
|
// URLEncoder didn't work.
|
|
StringBuilder buf = new StringBuilder();
|
|
for (int i = 0; i < url.length(); i++) {
|
|
// TODO: not sure if this is the only character that needs to be escaped.
|
|
if (url.charAt(i) == ' ')
|
|
buf.append("%20");
|
|
else
|
|
buf.append(url.charAt(i));
|
|
}
|
|
return buf.toString();
|
|
}
|
|
|
|
public static String absolutize(String name) {
|
|
// absolutize all the system IDs in the input,
|
|
// so that we can map system IDs to DOM trees.
|
|
try {
|
|
URL baseURL = new File(".").getCanonicalFile().toURL();
|
|
return new URL(baseURL, name).toExternalForm();
|
|
} catch( IOException e) {
|
|
//ignore
|
|
}
|
|
return name;
|
|
}
|
|
|
|
/**
|
|
* Checks if the system ID is absolute.
|
|
*/
|
|
@SuppressWarnings("ResultOfObjectAllocationIgnored")
|
|
public static void checkAbsoluteness(String systemId) {
|
|
// we need to be able to handle system IDs like "urn:foo", which java.net.URL can't process,
|
|
// but OTOH we also need to be able to process system IDs like "file://a b c/def.xsd",
|
|
// which java.net.URI can't process. So for now, let's fail only if both of them fail.
|
|
// eventually we need a proper URI class that works for us.
|
|
try {
|
|
new URL(systemId);
|
|
} catch( MalformedURLException mue) {
|
|
try {
|
|
new URI(systemId);
|
|
} catch (URISyntaxException e) {
|
|
throw new IllegalArgumentException("system ID '"+systemId+"' isn't absolute",e);
|
|
}
|
|
}
|
|
}
|
|
|
|
/*
|
|
* To match, both QNames must have the same namespace and the local
|
|
* part of the target must match the local part of the 'pattern'
|
|
* QName, which may contain wildcard characters.
|
|
*/
|
|
public static boolean matchQNames(QName target, QName pattern) {
|
|
if ((target == null) || (pattern == null)) {
|
|
// if no service or port is in descriptor
|
|
return false;
|
|
}
|
|
if (pattern.getNamespaceURI().equals(target.getNamespaceURI())) {
|
|
String regex = pattern.getLocalPart().replaceAll("\\*", ".*");
|
|
return Pattern.matches(regex, target.getLocalPart());
|
|
}
|
|
return false;
|
|
}
|
|
|
|
}
|