feat(jdk8): move files to new folder to avoid resources compiled.

This commit is contained in:
2025-09-07 15:25:52 +08:00
parent 3f0047bf6f
commit 8c35cfb1c0
17415 changed files with 217 additions and 213 deletions

View File

@@ -0,0 +1,156 @@
/*
* Copyright (c) 2004, 2005, 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.
*/
// Attributes2.java - extended Attributes
// http://www.saxproject.org
// Public Domain: no warranty.
// $Id: Attributes2.java,v 1.2 2004/11/03 22:49:07 jsuttor Exp $
package org.xml.sax.ext;
import org.xml.sax.Attributes;
/**
* SAX2 extension to augment the per-attribute information
* provided though {@link Attributes}.
* If an implementation supports this extension, the attributes
* provided in {@link org.xml.sax.ContentHandler#startElement
* ContentHandler.startElement() } will implement this interface,
* and the <em>http://xml.org/sax/features/use-attributes2</em>
* feature flag will have the value <em>true</em>.
*
* <blockquote>
* <em>This module, both source code and documentation, is in the
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
* </blockquote>
*
* <p> XMLReader implementations are not required to support this
* information, and it is not part of core-only SAX2 distributions.</p>
*
* <p>Note that if an attribute was defaulted (<em>!isSpecified()</em>)
* it will of necessity also have been declared (<em>isDeclared()</em>)
* in the DTD.
* Similarly if an attribute's type is anything except CDATA, then it
* must have been declared.
* </p>
*
* @since SAX 2.0 (extensions 1.1 alpha)
* @author David Brownell
*/
public interface Attributes2 extends Attributes
{
/**
* Returns false unless the attribute was declared in the DTD.
* This helps distinguish two kinds of attributes that SAX reports
* as CDATA: ones that were declared (and hence are usually valid),
* and those that were not (and which are never valid).
*
* @param index The attribute index (zero-based).
* @return true if the attribute was declared in the DTD,
* false otherwise.
* @exception java.lang.ArrayIndexOutOfBoundsException When the
* supplied index does not identify an attribute.
*/
public boolean isDeclared (int index);
/**
* Returns false unless the attribute was declared in the DTD.
* This helps distinguish two kinds of attributes that SAX reports
* as CDATA: ones that were declared (and hence are usually valid),
* and those that were not (and which are never valid).
*
* @param qName The XML qualified (prefixed) name.
* @return true if the attribute was declared in the DTD,
* false otherwise.
* @exception java.lang.IllegalArgumentException When the
* supplied name does not identify an attribute.
*/
public boolean isDeclared (String qName);
/**
* Returns false unless the attribute was declared in the DTD.
* This helps distinguish two kinds of attributes that SAX reports
* as CDATA: ones that were declared (and hence are usually valid),
* and those that were not (and which are never valid).
*
* <p>Remember that since DTDs do not "understand" namespaces, the
* namespace URI associated with an attribute may not have come from
* the DTD. The declaration will have applied to the attribute's
* <em>qName</em>.
*
* @param uri The Namespace URI, or the empty string if
* the name has no Namespace URI.
* @param localName The attribute's local name.
* @return true if the attribute was declared in the DTD,
* false otherwise.
* @exception java.lang.IllegalArgumentException When the
* supplied names do not identify an attribute.
*/
public boolean isDeclared (String uri, String localName);
/**
* Returns true unless the attribute value was provided
* by DTD defaulting.
*
* @param index The attribute index (zero-based).
* @return true if the value was found in the XML text,
* false if the value was provided by DTD defaulting.
* @exception java.lang.ArrayIndexOutOfBoundsException When the
* supplied index does not identify an attribute.
*/
public boolean isSpecified (int index);
/**
* Returns true unless the attribute value was provided
* by DTD defaulting.
*
* <p>Remember that since DTDs do not "understand" namespaces, the
* namespace URI associated with an attribute may not have come from
* the DTD. The declaration will have applied to the attribute's
* <em>qName</em>.
*
* @param uri The Namespace URI, or the empty string if
* the name has no Namespace URI.
* @param localName The attribute's local name.
* @return true if the value was found in the XML text,
* false if the value was provided by DTD defaulting.
* @exception java.lang.IllegalArgumentException When the
* supplied names do not identify an attribute.
*/
public boolean isSpecified (String uri, String localName);
/**
* Returns true unless the attribute value was provided
* by DTD defaulting.
*
* @param qName The XML qualified (prefixed) name.
* @return true if the value was found in the XML text,
* false if the value was provided by DTD defaulting.
* @exception java.lang.IllegalArgumentException When the
* supplied name does not identify an attribute.
*/
public boolean isSpecified (String qName);
}

View File

@@ -0,0 +1,332 @@
/*
* Copyright (c) 2004, 2005, 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.
*/
// Attributes2Impl.java - extended AttributesImpl
// http://www.saxproject.org
// Public Domain: no warranty.
// $Id: Attributes2Impl.java,v 1.3 2005/02/24 11:20:18 gg156739 Exp $
package org.xml.sax.ext;
import org.xml.sax.Attributes;
import org.xml.sax.helpers.AttributesImpl;
/**
* SAX2 extension helper for additional Attributes information,
* implementing the {@link Attributes2} interface.
*
* <blockquote>
* <em>This module, both source code and documentation, is in the
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
* </blockquote>
*
* <p>This is not part of core-only SAX2 distributions.</p>
*
* <p>The <em>specified</em> flag for each attribute will always
* be true, unless it has been set to false in the copy constructor
* or using {@link #setSpecified}.
* Similarly, the <em>declared</em> flag for each attribute will
* always be false, except for defaulted attributes (<em>specified</em>
* is false), non-CDATA attributes, or when it is set to true using
* {@link #setDeclared}.
* If you change an attribute's type by hand, you may need to modify
* its <em>declared</em> flag to match.
* </p>
*
* @since SAX 2.0 (extensions 1.1 alpha)
* @author David Brownell
*/
public class Attributes2Impl extends AttributesImpl implements Attributes2
{
private boolean declared [];
private boolean specified [];
/**
* Construct a new, empty Attributes2Impl object.
*/
public Attributes2Impl () {
specified = null;
declared = null;
}
/**
* Copy an existing Attributes or Attributes2 object.
* If the object implements Attributes2, values of the
* <em>specified</em> and <em>declared</em> flags for each
* attribute are copied.
* Otherwise the flag values are defaulted to assume no DTD was used,
* unless there is evidence to the contrary (such as attributes with
* type other than CDATA, which must have been <em>declared</em>).
*
* <p>This constructor is especially useful inside a
* {@link org.xml.sax.ContentHandler#startElement startElement} event.</p>
*
* @param atts The existing Attributes object.
*/
public Attributes2Impl (Attributes atts)
{
super (atts);
}
////////////////////////////////////////////////////////////////////
// Implementation of Attributes2
////////////////////////////////////////////////////////////////////
/**
* Returns the current value of the attribute's "declared" flag.
*/
// javadoc mostly from interface
public boolean isDeclared (int index)
{
if (index < 0 || index >= getLength ())
throw new ArrayIndexOutOfBoundsException (
"No attribute at index: " + index);
return declared [index];
}
/**
* Returns the current value of the attribute's "declared" flag.
*/
// javadoc mostly from interface
public boolean isDeclared (String uri, String localName)
{
int index = getIndex (uri, localName);
if (index < 0)
throw new IllegalArgumentException (
"No such attribute: local=" + localName
+ ", namespace=" + uri);
return declared [index];
}
/**
* Returns the current value of the attribute's "declared" flag.
*/
// javadoc mostly from interface
public boolean isDeclared (String qName)
{
int index = getIndex (qName);
if (index < 0)
throw new IllegalArgumentException (
"No such attribute: " + qName);
return declared [index];
}
/**
* Returns the current value of an attribute's "specified" flag.
*
* @param index The attribute index (zero-based).
* @return current flag value
* @exception java.lang.ArrayIndexOutOfBoundsException When the
* supplied index does not identify an attribute.
*/
public boolean isSpecified (int index)
{
if (index < 0 || index >= getLength ())
throw new ArrayIndexOutOfBoundsException (
"No attribute at index: " + index);
return specified [index];
}
/**
* Returns the current value of an attribute's "specified" flag.
*
* @param uri The Namespace URI, or the empty string if
* the name has no Namespace URI.
* @param localName The attribute's local name.
* @return current flag value
* @exception java.lang.IllegalArgumentException When the
* supplied names do not identify an attribute.
*/
public boolean isSpecified (String uri, String localName)
{
int index = getIndex (uri, localName);
if (index < 0)
throw new IllegalArgumentException (
"No such attribute: local=" + localName
+ ", namespace=" + uri);
return specified [index];
}
/**
* Returns the current value of an attribute's "specified" flag.
*
* @param qName The XML qualified (prefixed) name.
* @return current flag value
* @exception java.lang.IllegalArgumentException When the
* supplied name does not identify an attribute.
*/
public boolean isSpecified (String qName)
{
int index = getIndex (qName);
if (index < 0)
throw new IllegalArgumentException (
"No such attribute: " + qName);
return specified [index];
}
////////////////////////////////////////////////////////////////////
// Manipulators
////////////////////////////////////////////////////////////////////
/**
* Copy an entire Attributes object. The "specified" flags are
* assigned as true, and "declared" flags as false (except when
* an attribute's type is not CDATA),
* unless the object is an Attributes2 object.
* In that case those flag values are all copied.
*
* @see AttributesImpl#setAttributes
*/
public void setAttributes (Attributes atts)
{
int length = atts.getLength ();
super.setAttributes (atts);
declared = new boolean [length];
specified = new boolean [length];
if (atts instanceof Attributes2) {
Attributes2 a2 = (Attributes2) atts;
for (int i = 0; i < length; i++) {
declared [i] = a2.isDeclared (i);
specified [i] = a2.isSpecified (i);
}
} else {
for (int i = 0; i < length; i++) {
declared [i] = !"CDATA".equals (atts.getType (i));
specified [i] = true;
}
}
}
/**
* Add an attribute to the end of the list, setting its
* "specified" flag to true. To set that flag's value
* to false, use {@link #setSpecified}.
*
* <p>Unless the attribute <em>type</em> is CDATA, this attribute
* is marked as being declared in the DTD. To set that flag's value
* to true for CDATA attributes, use {@link #setDeclared}.
*
* @see AttributesImpl#addAttribute
*/
public void addAttribute (String uri, String localName, String qName,
String type, String value)
{
super.addAttribute (uri, localName, qName, type, value);
int length = getLength ();
if(specified==null)
{
specified = new boolean[length];
declared = new boolean[length];
} else if (length > specified.length) {
boolean newFlags [];
newFlags = new boolean [length];
System.arraycopy (declared, 0, newFlags, 0, declared.length);
declared = newFlags;
newFlags = new boolean [length];
System.arraycopy (specified, 0, newFlags, 0, specified.length);
specified = newFlags;
}
specified [length - 1] = true;
declared [length - 1] = !"CDATA".equals (type);
}
// javadoc entirely from superclass
public void removeAttribute (int index)
{
int origMax = getLength () - 1;
super.removeAttribute (index);
if (index != origMax) {
System.arraycopy (declared, index + 1, declared, index,
origMax - index);
System.arraycopy (specified, index + 1, specified, index,
origMax - index);
}
}
/**
* Assign a value to the "declared" flag of a specific attribute.
* This is normally needed only for attributes of type CDATA,
* including attributes whose type is changed to or from CDATA.
*
* @param index The index of the attribute (zero-based).
* @param value The desired flag value.
* @exception java.lang.ArrayIndexOutOfBoundsException When the
* supplied index does not identify an attribute.
* @see #setType
*/
public void setDeclared (int index, boolean value)
{
if (index < 0 || index >= getLength ())
throw new ArrayIndexOutOfBoundsException (
"No attribute at index: " + index);
declared [index] = value;
}
/**
* Assign a value to the "specified" flag of a specific attribute.
* This is the only way this flag can be cleared, except clearing
* by initialization with the copy constructor.
*
* @param index The index of the attribute (zero-based).
* @param value The desired flag value.
* @exception java.lang.ArrayIndexOutOfBoundsException When the
* supplied index does not identify an attribute.
*/
public void setSpecified (int index, boolean value)
{
if (index < 0 || index >= getLength ())
throw new ArrayIndexOutOfBoundsException (
"No attribute at index: " + index);
specified [index] = value;
}
}

View File

@@ -0,0 +1,170 @@
/*
* Copyright (c) 2000, 2005, 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.
*/
// DeclHandler.java - Optional handler for DTD declaration events.
// http://www.saxproject.org
// Public Domain: no warranty.
// $Id: DeclHandler.java,v 1.2 2004/11/03 22:49:08 jsuttor Exp $
package org.xml.sax.ext;
import org.xml.sax.SAXException;
/**
* SAX2 extension handler for DTD declaration events.
*
* <blockquote>
* <em>This module, both source code and documentation, is in the
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
* See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
* for further information.
* </blockquote>
*
* <p>This is an optional extension handler for SAX2 to provide more
* complete information about DTD declarations in an XML document.
* XML readers are not required to recognize this handler, and it
* is not part of core-only SAX2 distributions.</p>
*
* <p>Note that data-related DTD declarations (unparsed entities and
* notations) are already reported through the {@link
* org.xml.sax.DTDHandler DTDHandler} interface.</p>
*
* <p>If you are using the declaration handler together with a lexical
* handler, all of the events will occur between the
* {@link org.xml.sax.ext.LexicalHandler#startDTD startDTD} and the
* {@link org.xml.sax.ext.LexicalHandler#endDTD endDTD} events.</p>
*
* <p>To set the DeclHandler for an XML reader, use the
* {@link org.xml.sax.XMLReader#setProperty setProperty} method
* with the property name
* <code>http://xml.org/sax/properties/declaration-handler</code>
* and an object implementing this interface (or null) as the value.
* If the reader does not report declaration events, it will throw a
* {@link org.xml.sax.SAXNotRecognizedException SAXNotRecognizedException}
* when you attempt to register the handler.</p>
*
* @since SAX 2.0 (extensions 1.0)
* @author David Megginson
*/
public interface DeclHandler
{
/**
* Report an element type declaration.
*
* <p>The content model will consist of the string "EMPTY", the
* string "ANY", or a parenthesised group, optionally followed
* by an occurrence indicator. The model will be normalized so
* that all parameter entities are fully resolved and all whitespace
* is removed,and will include the enclosing parentheses. Other
* normalization (such as removing redundant parentheses or
* simplifying occurrence indicators) is at the discretion of the
* parser.</p>
*
* @param name The element type name.
* @param model The content model as a normalized string.
* @exception SAXException The application may raise an exception.
*/
public abstract void elementDecl (String name, String model)
throws SAXException;
/**
* Report an attribute type declaration.
*
* <p>Only the effective (first) declaration for an attribute will
* be reported. The type will be one of the strings "CDATA",
* "ID", "IDREF", "IDREFS", "NMTOKEN", "NMTOKENS", "ENTITY",
* "ENTITIES", a parenthesized token group with
* the separator "|" and all whitespace removed, or the word
* "NOTATION" followed by a space followed by a parenthesized
* token group with all whitespace removed.</p>
*
* <p>The value will be the value as reported to applications,
* appropriately normalized and with entity and character
* references expanded. </p>
*
* @param eName The name of the associated element.
* @param aName The name of the attribute.
* @param type A string representing the attribute type.
* @param mode A string representing the attribute defaulting mode
* ("#IMPLIED", "#REQUIRED", or "#FIXED") or null if
* none of these applies.
* @param value A string representing the attribute's default value,
* or null if there is none.
* @exception SAXException The application may raise an exception.
*/
public abstract void attributeDecl (String eName,
String aName,
String type,
String mode,
String value)
throws SAXException;
/**
* Report an internal entity declaration.
*
* <p>Only the effective (first) declaration for each entity
* will be reported. All parameter entities in the value
* will be expanded, but general entities will not.</p>
*
* @param name The name of the entity. If it is a parameter
* entity, the name will begin with '%'.
* @param value The replacement text of the entity.
* @exception SAXException The application may raise an exception.
* @see #externalEntityDecl
* @see org.xml.sax.DTDHandler#unparsedEntityDecl
*/
public abstract void internalEntityDecl (String name, String value)
throws SAXException;
/**
* Report a parsed external entity declaration.
*
* <p>Only the effective (first) declaration for each entity
* will be reported.</p>
*
* <p>If the system identifier is a URL, the parser must resolve it
* fully before passing it to the application.</p>
*
* @param name The name of the entity. If it is a parameter
* entity, the name will begin with '%'.
* @param publicId The entity's public identifier, or null if none
* was given.
* @param systemId The entity's system identifier.
* @exception SAXException The application may raise an exception.
* @see #internalEntityDecl
* @see org.xml.sax.DTDHandler#unparsedEntityDecl
*/
public abstract void externalEntityDecl (String name, String publicId,
String systemId)
throws SAXException;
}
// end of DeclHandler.java

View File

@@ -0,0 +1,154 @@
/*
* Copyright (c) 2004, 2005, 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.
*/
// DefaultHandler2.java - extended DefaultHandler
// http://www.saxproject.org
// Public Domain: no warranty.
// $Id: DefaultHandler2.java,v 1.2 2004/11/03 22:49:08 jsuttor Exp $
package org.xml.sax.ext;
import java.io.IOException;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
/**
* This class extends the SAX2 base handler class to support the
* SAX2 {@link LexicalHandler}, {@link DeclHandler}, and
* {@link EntityResolver2} extensions. Except for overriding the
* original SAX1 {@link DefaultHandler#resolveEntity resolveEntity()}
* method the added handler methods just return. Subclassers may
* override everything on a method-by-method basis.
*
* <blockquote>
* <em>This module, both source code and documentation, is in the
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
* </blockquote>
*
* <p> <em>Note:</em> this class might yet learn that the
* <em>ContentHandler.setDocumentLocator()</em> call might be passed a
* {@link Locator2} object, and that the
* <em>ContentHandler.startElement()</em> call might be passed a
* {@link Attributes2} object.
*
* @since SAX 2.0 (extensions 1.1 alpha)
* @author David Brownell
*/
public class DefaultHandler2 extends DefaultHandler
implements LexicalHandler, DeclHandler, EntityResolver2
{
/** Constructs a handler which ignores all parsing events. */
public DefaultHandler2 () { }
// SAX2 ext-1.0 LexicalHandler
public void startCDATA ()
throws SAXException
{}
public void endCDATA ()
throws SAXException
{}
public void startDTD (String name, String publicId, String systemId)
throws SAXException
{}
public void endDTD ()
throws SAXException
{}
public void startEntity (String name)
throws SAXException
{}
public void endEntity (String name)
throws SAXException
{}
public void comment (char ch [], int start, int length)
throws SAXException
{ }
// SAX2 ext-1.0 DeclHandler
public void attributeDecl (String eName, String aName,
String type, String mode, String value)
throws SAXException
{}
public void elementDecl (String name, String model)
throws SAXException
{}
public void externalEntityDecl (String name,
String publicId, String systemId)
throws SAXException
{}
public void internalEntityDecl (String name, String value)
throws SAXException
{}
// SAX2 ext-1.1 EntityResolver2
/**
* Tells the parser that if no external subset has been declared
* in the document text, none should be used.
*/
public InputSource getExternalSubset (String name, String baseURI)
throws SAXException, IOException
{ return null; }
/**
* Tells the parser to resolve the systemId against the baseURI
* and read the entity text from that resulting absolute URI.
* Note that because the older
* {@link DefaultHandler#resolveEntity DefaultHandler.resolveEntity()},
* method is overridden to call this one, this method may sometimes
* be invoked with null <em>name</em> and <em>baseURI</em>, and
* with the <em>systemId</em> already absolutized.
*/
public InputSource resolveEntity (String name, String publicId,
String baseURI, String systemId)
throws SAXException, IOException
{ return null; }
// SAX1 EntityResolver
/**
* Invokes
* {@link EntityResolver2#resolveEntity EntityResolver2.resolveEntity()}
* with null entity name and base URI.
* You only need to override that method to use this class.
*/
public InputSource resolveEntity (String publicId, String systemId)
throws SAXException, IOException
{ return resolveEntity (null, publicId, null, systemId); }
}

View File

@@ -0,0 +1,221 @@
/*
* Copyright (c) 2004, 2005, 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.
*/
// EntityResolver2.java - Extended SAX entity resolver.
// http://www.saxproject.org
// No warranty; no copyright -- use this as you will.
// $Id: EntityResolver2.java,v 1.2 2004/11/03 22:49:08 jsuttor Exp $
package org.xml.sax.ext;
import java.io.IOException;
import org.xml.sax.EntityResolver;
import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;
import org.xml.sax.SAXException;
/**
* Extended interface for mapping external entity references to input
* sources, or providing a missing external subset. The
* {@link XMLReader#setEntityResolver XMLReader.setEntityResolver()} method
* is used to provide implementations of this interface to parsers.
* When a parser uses the methods in this interface, the
* {@link EntityResolver2#resolveEntity EntityResolver2.resolveEntity()}
* method (in this interface) is used <em>instead of</em> the older (SAX 1.0)
* {@link EntityResolver#resolveEntity EntityResolver.resolveEntity()} method.
*
* <blockquote>
* <em>This module, both source code and documentation, is in the
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
* </blockquote>
*
* <p>If a SAX application requires the customized handling which this
* interface defines for external entities, it must ensure that it uses
* an XMLReader with the
* <em>http://xml.org/sax/features/use-entity-resolver2</em> feature flag
* set to <em>true</em> (which is its default value when the feature is
* recognized). If that flag is unrecognized, or its value is false,
* or the resolver does not implement this interface, then only the
* {@link EntityResolver} method will be used.
* </p>
*
* <p>That supports three categories of application that modify entity
* resolution. <em>Old Style</em> applications won't know about this interface;
* they will provide an EntityResolver.
* <em>Transitional Mode</em> provide an EntityResolver2 and automatically
* get the benefit of its methods in any systems (parsers or other tools)
* supporting it, due to polymorphism.
* Both <em>Old Style</em> and <em>Transitional Mode</em> applications will
* work with any SAX2 parser.
* <em>New style</em> applications will fail to run except on SAX2 parsers
* that support this particular feature.
* They will insist that feature flag have a value of "true", and the
* EntityResolver2 implementation they provide might throw an exception
* if the original SAX 1.0 style entity resolution method is invoked.
* </p>
*
* @see org.xml.sax.XMLReader#setEntityResolver
*
* @since SAX 2.0 (extensions 1.1 alpha)
* @author David Brownell
*/
public interface EntityResolver2 extends EntityResolver
{
/**
* Allows applications to provide an external subset for documents
* that don't explicitly define one. Documents with DOCTYPE declarations
* that omit an external subset can thus augment the declarations
* available for validation, entity processing, and attribute processing
* (normalization, defaulting, and reporting types including ID).
* This augmentation is reported
* through the {@link LexicalHandler#startDTD startDTD()} method as if
* the document text had originally included the external subset;
* this callback is made before any internal subset data or errors
* are reported.</p>
*
* <p>This method can also be used with documents that have no DOCTYPE
* declaration. When the root element is encountered,
* but no DOCTYPE declaration has been seen, this method is
* invoked. If it returns a value for the external subset, that root
* element is declared to be the root element, giving the effect of
* splicing a DOCTYPE declaration at the end the prolog of a document
* that could not otherwise be valid. The sequence of parser callbacks
* in that case logically resembles this:</p>
*
* <pre>
* ... comments and PIs from the prolog (as usual)
* startDTD ("rootName", source.getPublicId (), source.getSystemId ());
* startEntity ("[dtd]");
* ... declarations, comments, and PIs from the external subset
* endEntity ("[dtd]");
* endDTD ();
* ... then the rest of the document (as usual)
* startElement (..., "rootName", ...);
* </pre>
*
* <p>Note that the InputSource gets no further resolution.
* Implementations of this method may wish to invoke
* {@link #resolveEntity resolveEntity()} to gain benefits such as use
* of local caches of DTD entities. Also, this method will never be
* used by a (non-validating) processor that is not including external
* parameter entities. </p>
*
* <p>Uses for this method include facilitating data validation when
* interoperating with XML processors that would always require
* undesirable network accesses for external entities, or which for
* other reasons adopt a "no DTDs" policy.
* Non-validation motives include forcing documents to include DTDs so
* that attributes are handled consistently.
* For example, an XPath processor needs to know which attibutes have
* type "ID" before it can process a widely used type of reference.</p>
*
* <p><strong>Warning:</strong> Returning an external subset modifies
* the input document. By providing definitions for general entities,
* it can make a malformed document appear to be well formed.
* </p>
*
* @param name Identifies the document root element. This name comes
* from a DOCTYPE declaration (where available) or from the actual
* root element.
* @param baseURI The document's base URI, serving as an additional
* hint for selecting the external subset. This is always an absolute
* URI, unless it is null because the XMLReader was given an InputSource
* without one.
*
* @return An InputSource object describing the new external subset
* to be used by the parser, or null to indicate that no external
* subset is provided.
*
* @exception SAXException Any SAX exception, possibly wrapping
* another exception.
* @exception IOException Probably indicating a failure to create
* a new InputStream or Reader, or an illegal URL.
*/
public InputSource getExternalSubset (String name, String baseURI)
throws SAXException, IOException;
/**
* Allows applications to map references to external entities into input
* sources, or tell the parser it should use conventional URI resolution.
* This method is only called for external entities which have been
* properly declared.
* This method provides more flexibility than the {@link EntityResolver}
* interface, supporting implementations of more complex catalogue
* schemes such as the one defined by the <a href=
"http://www.oasis-open.org/committees/entity/spec-2001-08-06.html"
>OASIS XML Catalogs</a> specification.</p>
*
* <p>Parsers configured to use this resolver method will call it
* to determine the input source to use for any external entity
* being included because of a reference in the XML text.
* That excludes the document entity, and any external entity returned
* by {@link #getExternalSubset getExternalSubset()}.
* When a (non-validating) processor is configured not to include
* a class of entities (parameter or general) through use of feature
* flags, this method is not invoked for such entities. </p>
*
* <p>Note that the entity naming scheme used here is the same one
* used in the {@link LexicalHandler}, or in the {@link
org.xml.sax.ContentHandler#skippedEntity
ContentHandler.skippedEntity()}
* method. </p>
*
* @param name Identifies the external entity being resolved.
* Either "[dtd]" for the external subset, or a name starting
* with "%" to indicate a parameter entity, or else the name of
* a general entity. This is never null when invoked by a SAX2
* parser.
* @param publicId The public identifier of the external entity being
* referenced (normalized as required by the XML specification), or
* null if none was supplied.
* @param baseURI The URI with respect to which relative systemIDs
* are interpreted. This is always an absolute URI, unless it is
* null (likely because the XMLReader was given an InputSource without
* one). This URI is defined by the XML specification to be the one
* associated with the "&lt;" starting the relevant declaration.
* @param systemId The system identifier of the external entity
* being referenced; either a relative or absolute URI.
* This is never null when invoked by a SAX2 parser; only declared
* entities, and any external subset, are resolved by such parsers.
*
* @return An InputSource object describing the new input source to
* be used by the parser. Returning null directs the parser to
* resolve the system ID against the base URI and open a connection
* to resulting URI.
*
* @exception SAXException Any SAX exception, possibly wrapping
* another exception.
* @exception IOException Probably indicating a failure to create
* a new InputStream or Reader, or an illegal URL.
*/
public InputSource resolveEntity (
String name,
String publicId,
String baseURI,
String systemId
) throws SAXException, IOException;
}

View File

@@ -0,0 +1,236 @@
/*
* Copyright (c) 2000, 2005, 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.
*/
// LexicalHandler.java - optional handler for lexical parse events.
// http://www.saxproject.org
// Public Domain: no warranty.
// $Id: LexicalHandler.java,v 1.2 2004/11/03 22:49:08 jsuttor Exp $
package org.xml.sax.ext;
import org.xml.sax.SAXException;
/**
* SAX2 extension handler for lexical events.
*
* <blockquote>
* <em>This module, both source code and documentation, is in the
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
* See <a href='http://www.saxproject.org'>http://www.saxproject.org</a>
* for further information.
* </blockquote>
*
* <p>This is an optional extension handler for SAX2 to provide
* lexical information about an XML document, such as comments
* and CDATA section boundaries.
* XML readers are not required to recognize this handler, and it
* is not part of core-only SAX2 distributions.</p>
*
* <p>The events in the lexical handler apply to the entire document,
* not just to the document element, and all lexical handler events
* must appear between the content handler's startDocument and
* endDocument events.</p>
*
* <p>To set the LexicalHandler for an XML reader, use the
* {@link org.xml.sax.XMLReader#setProperty setProperty} method
* with the property name
* <code>http://xml.org/sax/properties/lexical-handler</code>
* and an object implementing this interface (or null) as the value.
* If the reader does not report lexical events, it will throw a
* {@link org.xml.sax.SAXNotRecognizedException SAXNotRecognizedException}
* when you attempt to register the handler.</p>
*
* @since SAX 2.0 (extensions 1.0)
* @author David Megginson
*/
public interface LexicalHandler
{
/**
* Report the start of DTD declarations, if any.
*
* <p>This method is intended to report the beginning of the
* DOCTYPE declaration; if the document has no DOCTYPE declaration,
* this method will not be invoked.</p>
*
* <p>All declarations reported through
* {@link org.xml.sax.DTDHandler DTDHandler} or
* {@link org.xml.sax.ext.DeclHandler DeclHandler} events must appear
* between the startDTD and {@link #endDTD endDTD} events.
* Declarations are assumed to belong to the internal DTD subset
* unless they appear between {@link #startEntity startEntity}
* and {@link #endEntity endEntity} events. Comments and
* processing instructions from the DTD should also be reported
* between the startDTD and endDTD events, in their original
* order of (logical) occurrence; they are not required to
* appear in their correct locations relative to DTDHandler
* or DeclHandler events, however.</p>
*
* <p>Note that the start/endDTD events will appear within
* the start/endDocument events from ContentHandler and
* before the first
* {@link org.xml.sax.ContentHandler#startElement startElement}
* event.</p>
*
* @param name The document type name.
* @param publicId The declared public identifier for the
* external DTD subset, or null if none was declared.
* @param systemId The declared system identifier for the
* external DTD subset, or null if none was declared.
* (Note that this is not resolved against the document
* base URI.)
* @exception SAXException The application may raise an
* exception.
* @see #endDTD
* @see #startEntity
*/
public abstract void startDTD (String name, String publicId,
String systemId)
throws SAXException;
/**
* Report the end of DTD declarations.
*
* <p>This method is intended to report the end of the
* DOCTYPE declaration; if the document has no DOCTYPE declaration,
* this method will not be invoked.</p>
*
* @exception SAXException The application may raise an exception.
* @see #startDTD
*/
public abstract void endDTD ()
throws SAXException;
/**
* Report the beginning of some internal and external XML entities.
*
* <p>The reporting of parameter entities (including
* the external DTD subset) is optional, and SAX2 drivers that
* report LexicalHandler events may not implement it; you can use the
* <code
* >http://xml.org/sax/features/lexical-handler/parameter-entities</code>
* feature to query or control the reporting of parameter entities.</p>
*
* <p>General entities are reported with their regular names,
* parameter entities have '%' prepended to their names, and
* the external DTD subset has the pseudo-entity name "[dtd]".</p>
*
* <p>When a SAX2 driver is providing these events, all other
* events must be properly nested within start/end entity
* events. There is no additional requirement that events from
* {@link org.xml.sax.ext.DeclHandler DeclHandler} or
* {@link org.xml.sax.DTDHandler DTDHandler} be properly ordered.</p>
*
* <p>Note that skipped entities will be reported through the
* {@link org.xml.sax.ContentHandler#skippedEntity skippedEntity}
* event, which is part of the ContentHandler interface.</p>
*
* <p>Because of the streaming event model that SAX uses, some
* entity boundaries cannot be reported under any
* circumstances:</p>
*
* <ul>
* <li>general entities within attribute values</li>
* <li>parameter entities within declarations</li>
* </ul>
*
* <p>These will be silently expanded, with no indication of where
* the original entity boundaries were.</p>
*
* <p>Note also that the boundaries of character references (which
* are not really entities anyway) are not reported.</p>
*
* <p>All start/endEntity events must be properly nested.
*
* @param name The name of the entity. If it is a parameter
* entity, the name will begin with '%', and if it is the
* external DTD subset, it will be "[dtd]".
* @exception SAXException The application may raise an exception.
* @see #endEntity
* @see org.xml.sax.ext.DeclHandler#internalEntityDecl
* @see org.xml.sax.ext.DeclHandler#externalEntityDecl
*/
public abstract void startEntity (String name)
throws SAXException;
/**
* Report the end of an entity.
*
* @param name The name of the entity that is ending.
* @exception SAXException The application may raise an exception.
* @see #startEntity
*/
public abstract void endEntity (String name)
throws SAXException;
/**
* Report the start of a CDATA section.
*
* <p>The contents of the CDATA section will be reported through
* the regular {@link org.xml.sax.ContentHandler#characters
* characters} event; this event is intended only to report
* the boundary.</p>
*
* @exception SAXException The application may raise an exception.
* @see #endCDATA
*/
public abstract void startCDATA ()
throws SAXException;
/**
* Report the end of a CDATA section.
*
* @exception SAXException The application may raise an exception.
* @see #startCDATA
*/
public abstract void endCDATA ()
throws SAXException;
/**
* Report an XML comment anywhere in the document.
*
* <p>This callback will be used for comments inside or outside the
* document element, including comments in the external DTD
* subset (if read). Comments in the DTD must be properly
* nested inside start/endDTD and start/endEntity events (if
* used).</p>
*
* @param ch An array holding the characters in the comment.
* @param start The starting position in the array.
* @param length The number of characters to use from the array.
* @exception SAXException The application may raise an exception.
*/
public abstract void comment (char ch[], int start, int length)
throws SAXException;
}
// end of LexicalHandler.java

View File

@@ -0,0 +1,99 @@
/*
* Copyright (c) 2004, 2005, 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.
*/
// Locator2.java - extended Locator
// http://www.saxproject.org
// Public Domain: no warranty.
// $Id: Locator2.java,v 1.2 2004/11/03 22:49:08 jsuttor Exp $
package org.xml.sax.ext;
import org.xml.sax.Locator;
/**
* SAX2 extension to augment the entity information provided
* though a {@link Locator}.
* If an implementation supports this extension, the Locator
* provided in {@link org.xml.sax.ContentHandler#setDocumentLocator
* ContentHandler.setDocumentLocator() } will implement this
* interface, and the
* <em>http://xml.org/sax/features/use-locator2</em> feature
* flag will have the value <em>true</em>.
*
* <blockquote>
* <em>This module, both source code and documentation, is in the
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
* </blockquote>
*
* <p> XMLReader implementations are not required to support this
* information, and it is not part of core-only SAX2 distributions.</p>
*
* @since SAX 2.0 (extensions 1.1 alpha)
* @author David Brownell
*/
public interface Locator2 extends Locator
{
/**
* Returns the version of XML used for the entity. This will
* normally be the identifier from the current entity's
* <em>&lt;?xml&nbsp;version='...'&nbsp;...?&gt;</em> declaration,
* or be defaulted by the parser.
*
* @return Identifier for the XML version being used to interpret
* the entity's text, or null if that information is not yet
* available in the current parsing state.
*/
public String getXMLVersion ();
/**
* Returns the name of the character encoding for the entity.
* If the encoding was declared externally (for example, in a MIME
* Content-Type header), that will be the name returned. Else if there
* was an <em>&lt;?xml&nbsp;...encoding='...'?&gt;</em> declaration at
* the start of the document, that encoding name will be returned.
* Otherwise the encoding will been inferred (normally to be UTF-8, or
* some UTF-16 variant), and that inferred name will be returned.
*
* <p>When an {@link org.xml.sax.InputSource InputSource} is used
* to provide an entity's character stream, this method returns the
* encoding provided in that input stream.
*
* <p> Note that some recent W3C specifications require that text
* in some encodings be normalized, using Unicode Normalization
* Form C, before processing. Such normalization must be performed
* by applications, and would normally be triggered based on the
* value returned by this method.
*
* <p> Encoding names may be those used by the underlying JVM,
* and comparisons should be case-insensitive.
*
* @return Name of the character encoding being used to interpret
* * the entity's text, or null if this was not provided for a *
* character stream passed through an InputSource or is otherwise
* not yet available in the current parsing state.
*/
public String getEncoding ();
}

View File

@@ -0,0 +1,125 @@
/*
* Copyright (c) 2004, 2005, 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.
*/
// Locator2Impl.java - extended LocatorImpl
// http://www.saxproject.org
// Public Domain: no warranty.
// $Id: Locator2Impl.java,v 1.2 2004/11/03 22:49:08 jsuttor Exp $
package org.xml.sax.ext;
import org.xml.sax.Locator;
import org.xml.sax.helpers.LocatorImpl;
/**
* SAX2 extension helper for holding additional Entity information,
* implementing the {@link Locator2} interface.
*
* <blockquote>
* <em>This module, both source code and documentation, is in the
* Public Domain, and comes with <strong>NO WARRANTY</strong>.</em>
* </blockquote>
*
* <p> This is not part of core-only SAX2 distributions.</p>
*
* @since SAX 2.0.2
* @author David Brownell
*/
public class Locator2Impl extends LocatorImpl implements Locator2
{
private String encoding;
private String version;
/**
* Construct a new, empty Locator2Impl object.
* This will not normally be useful, since the main purpose
* of this class is to make a snapshot of an existing Locator.
*/
public Locator2Impl () { }
/**
* Copy an existing Locator or Locator2 object.
* If the object implements Locator2, values of the
* <em>encoding</em> and <em>version</em>strings are copied,
* otherwise they set to <em>null</em>.
*
* @param locator The existing Locator object.
*/
public Locator2Impl (Locator locator)
{
super (locator);
if (locator instanceof Locator2) {
Locator2 l2 = (Locator2) locator;
version = l2.getXMLVersion ();
encoding = l2.getEncoding ();
}
}
////////////////////////////////////////////////////////////////////
// Locator2 method implementations
////////////////////////////////////////////////////////////////////
/**
* Returns the current value of the version property.
*
* @see #setXMLVersion
*/
public String getXMLVersion ()
{ return version; }
/**
* Returns the current value of the encoding property.
*
* @see #setEncoding
*/
public String getEncoding ()
{ return encoding; }
////////////////////////////////////////////////////////////////////
// Setters
////////////////////////////////////////////////////////////////////
/**
* Assigns the current value of the version property.
*
* @param version the new "version" value
* @see #getXMLVersion
*/
public void setXMLVersion (String version)
{ this.version = version; }
/**
* Assigns the current value of the encoding property.
*
* @param encoding the new "encoding" value
* @see #getEncoding
*/
public void setEncoding (String encoding)
{ this.encoding = encoding; }
}