Initial checkin of Sun Resolver 1.1 sources
git-svn-id: https://svn.apache.org/repos/asf/xml/commons/trunk@225950 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
1 parent
32b041f81d
commit
92f652862f
35 files changed
+9761
No files matched your search
@@ -0,0 +1,145 @@
|
||||
// Debug.java - Print debug messages
|
||||
|
||||
/*
|
||||
* The Apache Software License, Version 1.1
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||
* reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. The end-user documentation included with the redistribution,
|
||||
* if any, must include the following acknowledgment:
|
||||
* "This product includes software developed by the
|
||||
* Apache Software Foundation (http://www.apache.org/)."
|
||||
* Alternately, this acknowledgment may appear in the software itself,
|
||||
* if and wherever such third-party acknowledgments normally appear.
|
||||
*
|
||||
* 4. The names "Xalan" and "Apache Software Foundation" must
|
||||
* not be used to endorse or promote products derived from this
|
||||
* software without prior written permission. For written
|
||||
* permission, please contact apache@apache.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "Apache",
|
||||
* nor may "Apache" appear in their name, without prior written
|
||||
* permission of the Apache Software Foundation.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
* This software consists of voluntary contributions made by many
|
||||
* individuals on behalf of the Apache Software Foundation and was
|
||||
* originally based on software copyright (c) 2001, International
|
||||
* Business Machines Corporation., http://www.ibm.com. For more
|
||||
* information on the Apache Software Foundation, please see
|
||||
* <http://www.apache.org/>.
|
||||
*/
|
||||
|
||||
package org.apache.xml.resolver.helpers;
|
||||
|
||||
import org.apache.xml.resolver.CatalogManager;
|
||||
|
||||
/**
|
||||
* <p>Static debugging/messaging class for Catalogs.</p>
|
||||
*
|
||||
* <p>This class defines a set of static methods that can be called
|
||||
* to produce debugging messages. Messages have an associated "debug
|
||||
* level" and messages below the current setting are not displayed.</p>
|
||||
*
|
||||
* @author Norman Walsh
|
||||
* <a href="mailto:Norman.Walsh@Sun.COM">Norman.Walsh@Sun.COM</a>
|
||||
*
|
||||
* @version 1.0
|
||||
*/
|
||||
public class Debug {
|
||||
/** The internal debug level. */
|
||||
protected static int debug = CatalogManager.verbosity();
|
||||
|
||||
/** Set the debug level for future messages. */
|
||||
public static void setDebug(int newDebug) {
|
||||
debug = newDebug;
|
||||
}
|
||||
|
||||
/** Get the current debug level. */
|
||||
public static int getDebug() {
|
||||
return debug;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Print debug message (if the debug level is high enough).</p>
|
||||
*
|
||||
* <p>Prints "the message"</p>
|
||||
*
|
||||
* @param level The debug level of this message. This message
|
||||
* will only be
|
||||
* displayed if the current debug level is at least equal to this
|
||||
* value.
|
||||
* @param message The text of the message.
|
||||
*/
|
||||
public static void message(int level, String message) {
|
||||
if (debug >= level) {
|
||||
System.out.println(message);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Print debug message (if the debug level is high enough).</p>
|
||||
*
|
||||
* <p>Prints "the message: spec"</p>
|
||||
*
|
||||
* @param level The debug level of this message. This message
|
||||
* will only be
|
||||
* displayed if the current debug level is at least equal to this
|
||||
* value.
|
||||
* @param message The text of the message.
|
||||
* @param spec An argument to the message.
|
||||
*/
|
||||
public static void message(int level, String message, String spec) {
|
||||
if (debug >= level) {
|
||||
System.out.println(message + ": " + spec);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Print debug message (if the debug level is high enough).</p>
|
||||
*
|
||||
* <p>Prints "the message: spec1" and "spec2" indented on the next line.</p>
|
||||
*
|
||||
* @param level The debug level of this message. This message
|
||||
* will only be
|
||||
* displayed if the current debug level is at least equal to this
|
||||
* value.
|
||||
* @param message The text of the message.
|
||||
* @param spec1 An argument to the message.
|
||||
* @param spec2 Another argument to the message.
|
||||
*/
|
||||
public static void message(int level, String message,
|
||||
String spec1, String spec2) {
|
||||
if (debug >= level) {
|
||||
System.out.println(message + ": " + spec1);
|
||||
System.out.println("\t" + spec2);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,151 @@
|
||||
// Namespaces.java - Analyze namespace nodes in a DOM tree
|
||||
|
||||
/*
|
||||
* The Apache Software License, Version 1.1
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||
* reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. The end-user documentation included with the redistribution,
|
||||
* if any, must include the following acknowledgment:
|
||||
* "This product includes software developed by the
|
||||
* Apache Software Foundation (http://www.apache.org/)."
|
||||
* Alternately, this acknowledgment may appear in the software itself,
|
||||
* if and wherever such third-party acknowledgments normally appear.
|
||||
*
|
||||
* 4. The names "Xalan" and "Apache Software Foundation" must
|
||||
* not be used to endorse or promote products derived from this
|
||||
* software without prior written permission. For written
|
||||
* permission, please contact apache@apache.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "Apache",
|
||||
* nor may "Apache" appear in their name, without prior written
|
||||
* permission of the Apache Software Foundation.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
* This software consists of voluntary contributions made by many
|
||||
* individuals on behalf of the Apache Software Foundation and was
|
||||
* originally based on software copyright (c) 2001, International
|
||||
* Business Machines Corporation., http://www.ibm.com. For more
|
||||
* information on the Apache Software Foundation, please see
|
||||
* <http://www.apache.org/>.
|
||||
*/
|
||||
|
||||
package org.apache.xml.resolver.helpers;
|
||||
|
||||
import org.w3c.dom.*;
|
||||
|
||||
/**
|
||||
* <p>Static Namespace query methods.</p>
|
||||
*
|
||||
* <p>This class defines a set of static methods that can be called
|
||||
* to analyze the namespace properties of DOM nodes.</p>
|
||||
*
|
||||
* @author Norman Walsh
|
||||
* <a href="mailto:Norman.Walsh@Sun.COM">Norman.Walsh@Sun.COM</a>
|
||||
*
|
||||
* @version 1.0
|
||||
*/
|
||||
public class Namespaces {
|
||||
/**
|
||||
* <p>Returns the "prefix" part of a QName or the empty string (not
|
||||
* null) if the name has no prefix.</p>
|
||||
*
|
||||
* @param element The QName of an element.
|
||||
* @return The prefix part of the element name.
|
||||
*/
|
||||
public static String getPrefix(Element element) {
|
||||
String name = element.getTagName();
|
||||
String prefix = "";
|
||||
|
||||
if (name.indexOf(':') > 0) {
|
||||
prefix = name.substring(0, name.indexOf(':'));
|
||||
}
|
||||
|
||||
return prefix;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns the "localname" part of a QName, which is the whole
|
||||
* name if it has no prefix.</p>
|
||||
*
|
||||
* @param element The QName of an element.
|
||||
* @return The local part of a QName.
|
||||
*/
|
||||
public static String getLocalName(Element element) {
|
||||
String name = element.getTagName();
|
||||
|
||||
if (name.indexOf(':') > 0) {
|
||||
name = name.substring(name.indexOf(':')+1);
|
||||
}
|
||||
|
||||
return name;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns the namespace URI for the specified prefix at the
|
||||
* specified context node.</p>
|
||||
*
|
||||
* @param node The context node.
|
||||
* @param prefix The prefix.
|
||||
* @return The namespace URI associated with the prefix, or
|
||||
* null if no namespace declaration exists for the prefix.
|
||||
*/
|
||||
public static String getNamespaceURI(Node node, String prefix) {
|
||||
if (node == null || node.getNodeType() != Node.ELEMENT_NODE) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if (prefix.equals("")) {
|
||||
if (((Element) node).hasAttribute("xmlns")) {
|
||||
return ((Element) node).getAttribute("xmlns");
|
||||
}
|
||||
} else {
|
||||
String nsattr = "xmlns:" + prefix;
|
||||
if (((Element) node).hasAttribute(nsattr)) {
|
||||
return ((Element) node).getAttribute(nsattr);
|
||||
}
|
||||
}
|
||||
|
||||
return getNamespaceURI(node.getParentNode(), prefix);
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Returns the namespace URI for the namespace to which the
|
||||
* element belongs.</p>
|
||||
*
|
||||
* @param element The element.
|
||||
* @return The namespace URI associated with the namespace of the
|
||||
* element, or null if no namespace declaration exists for it.
|
||||
*/
|
||||
public static String getNamespaceURI(Element element) {
|
||||
String prefix = getPrefix(element);
|
||||
return getNamespaceURI(element, prefix);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,198 @@
|
||||
// PublicId.java - Information about public identifiers
|
||||
|
||||
/*
|
||||
* The Apache Software License, Version 1.1
|
||||
*
|
||||
*
|
||||
* Copyright (c) 2001 The Apache Software Foundation. All rights
|
||||
* reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions
|
||||
* are met:
|
||||
*
|
||||
* 1. Redistributions of source code must retain the above copyright
|
||||
* notice, this list of conditions and the following disclaimer.
|
||||
*
|
||||
* 2. Redistributions in binary form must reproduce the above copyright
|
||||
* notice, this list of conditions and the following disclaimer in
|
||||
* the documentation and/or other materials provided with the
|
||||
* distribution.
|
||||
*
|
||||
* 3. The end-user documentation included with the redistribution,
|
||||
* if any, must include the following acknowledgment:
|
||||
* "This product includes software developed by the
|
||||
* Apache Software Foundation (http://www.apache.org/)."
|
||||
* Alternately, this acknowledgment may appear in the software itself,
|
||||
* if and wherever such third-party acknowledgments normally appear.
|
||||
*
|
||||
* 4. The names "Xalan" and "Apache Software Foundation" must
|
||||
* not be used to endorse or promote products derived from this
|
||||
* software without prior written permission. For written
|
||||
* permission, please contact apache@apache.org.
|
||||
*
|
||||
* 5. Products derived from this software may not be called "Apache",
|
||||
* nor may "Apache" appear in their name, without prior written
|
||||
* permission of the Apache Software Foundation.
|
||||
*
|
||||
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
|
||||
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
||||
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
||||
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
|
||||
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
|
||||
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
||||
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
|
||||
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
|
||||
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||
* SUCH DAMAGE.
|
||||
* ====================================================================
|
||||
*
|
||||
* This software consists of voluntary contributions made by many
|
||||
* individuals on behalf of the Apache Software Foundation and was
|
||||
* originally based on software copyright (c) 2001, International
|
||||
* Business Machines Corporation., http://www.ibm.com. For more
|
||||
* information on the Apache Software Foundation, please see
|
||||
* <http://www.apache.org/>.
|
||||
*/
|
||||
|
||||
package org.apache.xml.resolver.helpers;
|
||||
|
||||
/**
|
||||
* <p>Static methods for dealing with public identifiers.</p>
|
||||
*
|
||||
* <p>This class defines a set of static methods that can be called
|
||||
* to handle public identifiers.</p>
|
||||
*
|
||||
* @author Norman Walsh
|
||||
* <a href="mailto:Norman.Walsh@Sun.COM">Norman.Walsh@Sun.COM</a>
|
||||
*
|
||||
* @version 1.0
|
||||
*/
|
||||
public abstract class PublicId {
|
||||
protected PublicId() { }
|
||||
|
||||
/**
|
||||
* <p>Normalize a public identifier.</p>
|
||||
*
|
||||
* <p>Public identifiers must be normalized according to the following
|
||||
* rules before comparisons between them can be made:</p>
|
||||
*
|
||||
* <ul>
|
||||
* <li>Whitespace characters are normalized to spaces (e.g., line feeds,
|
||||
* tabs, etc. become spaces).</li>
|
||||
* <li>Leading and trailing whitespace is removed.</li>
|
||||
* <li>Multiple internal whitespaces are normalized to a single
|
||||
* space.</li>
|
||||
* </ul>
|
||||
*
|
||||
* <p>This method is declared static so that other classes
|
||||
* can use it directly.</p>
|
||||
*
|
||||
* @param publicId The unnormalized public identifier.
|
||||
*
|
||||
* @return The normalized identifier.
|
||||
*/
|
||||
public static String normalize(String publicId) {
|
||||
String normal = publicId.replace('\t', ' ');
|
||||
normal = normal.replace('\r', ' ');
|
||||
normal = normal.replace('\n', ' ');
|
||||
normal = normal.trim();
|
||||
|
||||
int pos;
|
||||
|
||||
while ((pos = normal.indexOf(" ")) >= 0) {
|
||||
normal = normal.substring(0, pos) + normal.substring(pos+1);
|
||||
}
|
||||
|
||||
return normal;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Encode a public identifier as a "publicid" URN.</p>
|
||||
*
|
||||
* <p>This method is declared static so that other classes
|
||||
* can use it directly.</p>
|
||||
*
|
||||
* @param publicId The unnormalized public identifier.
|
||||
*
|
||||
* @return The normalized identifier.
|
||||
*/
|
||||
public static String encodeURN(String publicId) {
|
||||
String urn = PublicId.normalize(publicId);
|
||||
|
||||
urn = PublicId.stringReplace(urn, "%", "%25");
|
||||
urn = PublicId.stringReplace(urn, ";", "%3B");
|
||||
urn = PublicId.stringReplace(urn, "'", "%27");
|
||||
urn = PublicId.stringReplace(urn, "?", "%3F");
|
||||
urn = PublicId.stringReplace(urn, "#", "%23");
|
||||
urn = PublicId.stringReplace(urn, "+", "%2B");
|
||||
urn = PublicId.stringReplace(urn, " ", "+");
|
||||
urn = PublicId.stringReplace(urn, "::", ";");
|
||||
urn = PublicId.stringReplace(urn, ":", "%3A");
|
||||
urn = PublicId.stringReplace(urn, "//", ":");
|
||||
urn = PublicId.stringReplace(urn, "/", "%2F");
|
||||
|
||||
return "urn:publicid:" + urn;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Decode a "publicid" URN into a public identifier.</p>
|
||||
*
|
||||
* <p>This method is declared static so that other classes
|
||||
* can use it directly.</p>
|
||||
*
|
||||
* @param publicId The unnormalized public identifier.
|
||||
*
|
||||
* @return The normalized identifier.
|
||||
*/
|
||||
public static String decodeURN(String urn) {
|
||||
String publicId = "";
|
||||
|
||||
if (urn.startsWith("urn:publicid:")) {
|
||||
publicId = urn.substring(13);
|
||||
} else {
|
||||
return urn;
|
||||
}
|
||||
|
||||
publicId = PublicId.stringReplace(publicId, "%2F", "/");
|
||||
publicId = PublicId.stringReplace(publicId, ":", "//");
|
||||
publicId = PublicId.stringReplace(publicId, "%3A", ":");
|
||||
publicId = PublicId.stringReplace(publicId, ";", "::");
|
||||
publicId = PublicId.stringReplace(publicId, "+", " ");
|
||||
publicId = PublicId.stringReplace(publicId, "%2B", "+");
|
||||
publicId = PublicId.stringReplace(publicId, "%23", "#");
|
||||
publicId = PublicId.stringReplace(publicId, "%3F", "?");
|
||||
publicId = PublicId.stringReplace(publicId, "%27", "'");
|
||||
publicId = PublicId.stringReplace(publicId, "%3B", ";");
|
||||
publicId = PublicId.stringReplace(publicId, "%25", "%");
|
||||
|
||||
return publicId;
|
||||
}
|
||||
|
||||
/**
|
||||
* <p>Replace one string with another.</p>
|
||||
*
|
||||
*/
|
||||
private static String stringReplace(String str,
|
||||
String oldStr,
|
||||
String newStr) {
|
||||
|
||||
String result = "";
|
||||
int pos = str.indexOf(oldStr);
|
||||
|
||||
// System.out.println(str + ": " + oldStr + " => " + newStr);
|
||||
|
||||
while (pos >= 0) {
|
||||
// System.out.println(str + " (" + pos + ")");
|
||||
result += str.substring(0, pos);
|
||||
result += newStr;
|
||||
str = str.substring(pos+1);
|
||||
|
||||
pos = str.indexOf(oldStr);
|
||||
}
|
||||
|
||||
return result + str;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,12 @@
|
||||
<html>
|
||||
<head>
|
||||
<title>Apache XML Commons Resolver Helpers package</title>
|
||||
</head>
|
||||
<body>
|
||||
<p>Apache XML Commons Resolver Helpers package</p>
|
||||
|
||||
<p>This package provides a collection of static helper functions used
|
||||
across a number of different classes.</p>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
Reference in new issue
Block a user