--- a/jaxp/src/java.xml/share/classes/javax/xml/catalog/Util.java Wed Mar 23 19:33:37 2016 -0700
+++ b/jaxp/src/java.xml/share/classes/javax/xml/catalog/Util.java Thu Mar 24 15:34:50 2016 -0700
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2015, Oracle and/or its affiliates. All rights reserved.
+ * Copyright (c) 2015, 2016, 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
@@ -24,6 +24,13 @@
*/
package javax.xml.catalog;
+import java.io.File;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.nio.file.Path;
+import java.nio.file.Paths;
import jdk.xml.internal.SecuritySupport;
/**
@@ -31,6 +38,76 @@
* @since 9
*/
class Util {
+
+ /**
+ * Resolves the specified file path to an absolute systemId. If it is
+ * relative, it shall be resolved using the base or user.dir property if
+ * base is not specified.
+ *
+ * @param file The specified file path
+ * @param baseURI the base URI
+ * @return The URI
+ * @throws CatalogException if the specified file path can not be converted
+ * to a system id
+ */
+ static URI verifyAndGetURI(String file, URL baseURI)
+ throws MalformedURLException, URISyntaxException, IllegalArgumentException {
+ URL filepath;
+ URI temp;
+ if (file != null && file.length() > 0) {
+ File f = new File(file);
+
+ if (baseURI != null && !f.isAbsolute()) {
+ filepath = new URL(baseURI, fixSlashes(file));
+ temp = filepath.toURI();
+ } else {
+ temp = resolveURI(file);
+ }
+ //Paths.get may throw IllegalArgumentException
+ Path path = Paths.get(temp);
+ if (path.toFile().isFile()) {
+ return temp;
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Resolves the specified uri. If the uri is relative, makes it absolute by
+ * the user.dir directory.
+ *
+ * @param uri The specified URI.
+ * @return The resolved URI
+ */
+ static URI resolveURI(String uri) throws MalformedURLException {
+ if (uri == null) {
+ uri = "";
+ }
+
+ URI temp = null;
+ try {
+ URL url = new URL(uri);
+ temp = url.toURI();
+ } catch (MalformedURLException | URISyntaxException mue) {
+ File file = new File(uri);
+ temp = file.toURI();
+ }
+
+ return temp;
+ }
+
+ /**
+ * Replace backslashes with forward slashes. (URLs always use forward
+ * slashes.)
+ *
+ * @param sysid The input system identifier.
+ * @return The same system identifier with backslashes turned into forward
+ * slashes.
+ */
+ static String fixSlashes(String sysid) {
+ return sysid.replace('\\', '/');
+ }
+
/**
* Find catalog file paths by reading the system property, and then
* jaxp.properties if the system property is not specified.
@@ -38,7 +115,7 @@
* @param sysPropertyName the name of system property
* @return the catalog file paths, or null if not found.
*/
- static public String[] getCatalogFiles(String sysPropertyName) {
+ static String[] getCatalogFiles(String sysPropertyName) {
String value = SecuritySupport.getJAXPSystemProperty(sysPropertyName);
if (value != null && !value.equals("")) {
return value.split(";");