diff options
Diffstat (limited to 'libjava/classpath/javax/xml')
95 files changed, 11619 insertions, 0 deletions
diff --git a/libjava/classpath/javax/xml/XMLConstants.java b/libjava/classpath/javax/xml/XMLConstants.java new file mode 100644 index 000000000..82485c8df --- /dev/null +++ b/libjava/classpath/javax/xml/XMLConstants.java @@ -0,0 +1,131 @@ +/* XMLConstants.java -- + Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml; + +/** + * Repository for well-known XML constants. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.5 + */ +public final class XMLConstants +{ + + private XMLConstants() + { + // to prevent instantiation + } + + /** + * Dummy namespace URI indicating that there is no namespace. + * @see http://www.w3.org/TR/REC-xml-names/#defaulting + */ + public static final String NULL_NS_URI = ""; + + /** + * Dummy namespace prefix indicating that there is no namespace. + * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames + */ + public static final String DEFAULT_NS_PREFIX = ""; + + /** + * The XML Namespace URI. + * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames + */ + public static final String XML_NS_URI = + "http://www.w3.org/XML/1998/namespace"; + + /** + * The XML Namespace prefix. + * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames + */ + public static final String XML_NS_PREFIX = "xml"; + + /** + * The XML Namespace declaration URI. + * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames + */ + public static final String XMLNS_ATTRIBUTE_NS_URI = + "http://www.w3.org/2000/xmlns/"; + + /** + * The XML Namespace declaration attribute. + * @see http://www.w3.org/TR/REC-xml-names/#ns-qualnames + */ + public static final String XMLNS_ATTRIBUTE = "xmlns"; + + /** + * The XML Schema (XSD) namespace URI. + * @see http://www.w3.org/TR/xmlschema-1/#Instance_Document_Constructions + */ + public static final String W3C_XML_SCHEMA_NS_URI = + "http://www.w3.org/2001/XMLSchema"; + + /** + * The XML Schema Instance (XSI) namespace URI. + * @see http://www.w3.org/TR/xmlschema-1/#Instance_Document_Constructions + */ + public static final String W3C_XML_SCHEMA_INSTANCE_NS_URI = + "http://www.w3.org/2001/XMLSchema-instance"; + + /** + * The XPath 2.0 datatypes namespace URI. + * @see http://www.w3.org/TR/xpath-datamodel + */ + public static final String W3C_XPATH_DATATYPE_NS_URI = + "http://www.w3.org/2003/11/xpath-datatypes"; + + /** + * The XML DTD namespace URI. + */ + public static final String XML_DTD_NS_URI = "http://www.w3.org/TR/REC-xml"; + + /** + * The RELAX NG Namespace URI. + * @see http://relaxng.org/spec-20011203.html + */ + public static final String RELAXNG_NS_URI = + "http://relaxng.org/ns/structure/1.0"; + + /** + * DOM feature for secure processing. + */ + public static final String FEATURE_SECURE_PROCESSING = + "http://javax.xml.XMLConstants/feature/secure-processing"; + +} diff --git a/libjava/classpath/javax/xml/datatype/DatatypeConfigurationException.java b/libjava/classpath/javax/xml/datatype/DatatypeConfigurationException.java new file mode 100644 index 000000000..642cdcaf3 --- /dev/null +++ b/libjava/classpath/javax/xml/datatype/DatatypeConfigurationException.java @@ -0,0 +1,70 @@ +/* DatatypeConfigurationException.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.datatype; + +/** + * A serious error during datatype configuration. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public class DatatypeConfigurationException + extends Exception +{ + + public DatatypeConfigurationException() + { + super(); + } + + public DatatypeConfigurationException(String message) + { + super(message); + } + + public DatatypeConfigurationException(String message, Throwable cause) + { + super(message, cause); + } + + public DatatypeConfigurationException(Throwable cause) + { + super(cause); + } + +} diff --git a/libjava/classpath/javax/xml/datatype/DatatypeConstants.java b/libjava/classpath/javax/xml/datatype/DatatypeConstants.java new file mode 100644 index 000000000..1fe439e00 --- /dev/null +++ b/libjava/classpath/javax/xml/datatype/DatatypeConstants.java @@ -0,0 +1,264 @@ +/* DatatypeConstants.java -- + Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.datatype; + +import javax.xml.namespace.QName; + +/** + * Basic data type constants. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.5 + */ +public final class DatatypeConstants +{ + + private DatatypeConstants() + { + // to prevent instantiation + } + + /** + * Typesafe enumerated class representing the six fields of the + * <a href='Duration.html'>Duration</a> class. + */ + public static final class Field + { + + final int id; + final String name; + + Field(int id, String name) + { + this.id = id; + this.name = name; + } + + public int getId() + { + return id; + } + + public String toString() + { + return name; + } + + } + + /** + * Value for January. + */ + public static final int JANUARY = 1; + + /** + * Value for February. + */ + public static final int FEBRUARY = 2; + + /** + * Value for March. + */ + public static final int MARCH = 3; + + /** + * Value for April. + */ + public static final int APRIL = 4; + + /** + * Value for May. + */ + public static final int MAY = 5; + + /** + * Value for June. + */ + public static final int JUNE = 6; + + /** + * Value for July. + */ + public static final int JULY = 7; + + /** + * Value for August. + */ + public static final int AUGUST = 8; + + /** + * Value for September. + */ + public static final int SEPTEMBER = 9; + + /** + * Value for October. + */ + public static final int OCTOBER = 10; + + /** + * Value for November. + */ + public static final int NOVEMBER = 11; + + /** + * Value for December. + */ + public static final int DECEMBER = 12; + + /** + * Comparison result. + */ + public static final int LESSER = -1; + + /** + * Comparison result. + */ + public static final int EQUAL = 0; + + /** + * Comparison result. + */ + public static final int GREATER = 1; + + /** + * Comparison result. + */ + public static final int INDETERMINATE = 2; + + /** + * Comparison result. + */ + public static final int FIELD_UNDEFINED = -2147483648; + + /** + * Constant that represents the years field. + */ + public static final Field YEARS = new Field(1, "YEARS"); + + /** + * Constant that represents the months field. + */ + public static final Field MONTHS = new Field(2, "MONTHS"); + + /** + * Constant that represents the days field. + */ + public static final Field DAYS = new Field(3, "DAYS"); + + /** + * Constant that represents the hours field. + */ + public static final Field HOURS = new Field(4, "HOURS"); + + /** + * Constant that represents the minutes field. + */ + public static final Field MINUTES = new Field(5, "MINUTES"); + + /** + * Constant that represents the seconds field. + */ + public static final Field SECONDS = new Field(6, "SECONDS"); + + /** + * The qualified-name for the <code>dateTime</code> data type. + */ + public static final QName DATETIME = new QName ("http://www.w3.org/2001/XMLSchema#dateTime", ""); + + /** + * The qualified-name for the <code>time</code> data type. + */ + public static final QName TIME = new QName ("http://www.w3.org/2001/XMLSchema#time", ""); + + /** + * The qualified-name for the <code>date</code> data type. + */ + public static final QName DATE = new QName ("http://www.w3.org/2001/XMLSchema#date", ""); + + /** + * The qualified-name for the <code>gYearMonth</code> data type. + */ + public static final QName GYEARMONTH = new QName ("http://www.w3.org/2001/XMLSchema#gYearMonth", ""); + + /** + * The qualified-name for the <code>gMonthDay</code> data type. + */ + public static final QName GMONTHDAY = new QName ("http://www.w3.org/2001/XMLSchema#gMonthDay", ""); + + /** + * The qualified-name for the <code>gYear</code> data type. + */ + public static final QName GYEAR = new QName ("http://www.w3.org/2001/XMLSchema#gYear", ""); + + /** + * The qualified-name for the <code>gMonth</code> data type. + */ + public static final QName GMONTH = new QName ("http://www.w3.org/2001/XMLSchema#gMonth", ""); + + /** + * The qualified-name for the <code>gDay</code> data type. + */ + public static final QName GDAY = new QName ("http://www.w3.org/2001/XMLSchema#gDay", ""); + + /** + * The qualified-name for the <code>duration</code> data type. + */ + public static final QName DURATION = new QName ("http://www.w3.org/2001/XMLSchema#duration", ""); + + /** + * The qualified-name for the <code>dayTimeDuration</code> data type. + */ + public static final QName DURATION_DAYTIME = new QName ("http://www.w3.org/2001/XMLSchema#dayTimeDuration", ""); + + /** + * The qualified-name for the <code>yearMonthDuration</code> data type. + */ + public static final QName DURATION_YEARMONTH = new QName ("http://www.w3.org/2001/XMLSchema#yearMonthDuration", ""); + + /** + * XML Schema maximum timezone offset, in minutes. + */ + public static final int MAX_TIMEZONE_OFFSET = -840; + + /** + * XML Schema minimum timezone offset, in minutes. + */ + public static final int MIN_TIMEZONE_OFFSET = 840; + +} diff --git a/libjava/classpath/javax/xml/datatype/DatatypeFactory.java b/libjava/classpath/javax/xml/datatype/DatatypeFactory.java new file mode 100644 index 000000000..924a610c1 --- /dev/null +++ b/libjava/classpath/javax/xml/datatype/DatatypeFactory.java @@ -0,0 +1,421 @@ +/* DatatypeFactory.java -- + Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.datatype; + +import java.io.File; +import java.io.FileInputStream; +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.GregorianCalendar; +import java.util.Iterator; +import java.util.Properties; +import java.util.ServiceLoader; + +/** + * Factory class to create new datatype objects mapping XML to and from Java + * objects. + * + * @author Chris Burdess + * @since 1.5 + */ +public abstract class DatatypeFactory +{ + + /** + * JAXP 1.3 default property name. + */ + public static final String DATATYPEFACTORY_PROPERTY = "javax.xml.datatype.DatatypeFactory"; + + /** + * JAXP 1.3 default implementation class name. + */ + public static final String DATATYPEFACTORY_IMPLEMENTATION_CLASS = "gnu.xml.datatype.JAXPDatatypeFactory"; + + protected DatatypeFactory() + { + } + + /** + * Returns a new factory instance. + */ + public static DatatypeFactory newInstance() + throws DatatypeConfigurationException + { + try + { + // 1. system property + String className = System.getProperty(DATATYPEFACTORY_PROPERTY); + if (className != null) + return (DatatypeFactory) Class.forName(className).newInstance(); + // 2. jaxp.properties property + File javaHome = new File(System.getProperty("java.home")); + File javaHomeLib = new File(javaHome, "lib"); + File jaxpProperties = new File(javaHomeLib, "jaxp.properties"); + if (jaxpProperties.exists()) + { + FileInputStream in = new FileInputStream(jaxpProperties); + Properties p = new Properties(); + p.load(in); + in.close(); + className = p.getProperty(DATATYPEFACTORY_PROPERTY); + if (className != null) + return (DatatypeFactory) Class.forName(className).newInstance(); + } + // 3. services + Iterator<DatatypeFactory> i = ServiceLoader.load(DatatypeFactory.class).iterator(); + if (i.hasNext()) + return i.next(); + // 4. fallback + Class<?> t = Class.forName(DATATYPEFACTORY_IMPLEMENTATION_CLASS); + return (DatatypeFactory) t.newInstance(); + } + catch (Exception e) + { + throw new DatatypeConfigurationException(e); + } + } + + /** + * Returns a new duration from its string representation. + * @param lexicalRepresentation the lexical representation of the + * duration, as specified in XML Schema 1.0 section 3.2.6.1. + */ + public abstract Duration newDuration(String lexicalRepresentation); + + /** + * Returns a new duration. + * @param durationInMilliSeconds the duration in milliseconds + */ + public abstract Duration newDuration(long durationInMilliSeconds); + + /** + * Returns a new duration by specifying the individual components. + * @param isPositive whether the duration is positive + * @param years the number of years + * @param months the number of months + * @param days the number of days + * @param hours the number of hours + * @param minutes th number of minutes + * @param seconds the number of seconds + */ + public abstract Duration newDuration(boolean isPositive, + BigInteger years, + BigInteger months, + BigInteger days, + BigInteger hours, + BigInteger minutes, + BigDecimal seconds); + + /** + * Returns a new duration by specifying the individual components. + * @param isPositive whether the duration is positive + * @param years the number of years + * @param months the number of months + * @param days the number of days + * @param hours the number of hours + * @param minutes th number of minutes + * @param seconds the number of seconds + */ + public Duration newDuration(boolean isPositive, + int years, + int months, + int days, + int hours, + int minutes, + int seconds) + { + return newDuration(isPositive, + BigInteger.valueOf((long) years), + BigInteger.valueOf((long) months), + BigInteger.valueOf((long) days), + BigInteger.valueOf((long) hours), + BigInteger.valueOf((long) minutes), + BigDecimal.valueOf((long) seconds)); + } + + /** + * Returns a new dayTimeDuration from its string representation. + * @param lexicalRepresentation the lexical representation of the + * duration, as specified in XML Schema 1.0 section 3.2.6.1. + */ + public Duration newDurationDayTime(String lexicalRepresentation) + { + return newDuration(lexicalRepresentation); + } + + /** + * Returns a new dayTimeDuration. + * @param durationInMilliseconds the duration in milliseconds + */ + public Duration newDurationDayTime(long durationInMilliseconds) + { + // TODO xmlSchemaType + return newDuration(durationInMilliseconds); + } + + /** + * Returns a new dayTimeDuration by specifying the individual components. + * @param isPositive whether the duration is positive + * @param days the number of days + * @param hours the number of hours + * @param minutes th number of minutes + * @param seconds the number of seconds + */ + public Duration newDurationDayTime(boolean isPositive, + BigInteger days, + BigInteger hours, + BigInteger minutes, + BigInteger seconds) + { + return newDuration(isPositive, + null, + null, + days, + hours, + minutes, + new BigDecimal(seconds)); + } + + /** + * Returns a new dayTimeDuration by specifying the individual components. + * @param isPositive whether the duration is positive + * @param days the number of days + * @param hours the number of hours + * @param minutes th number of minutes + * @param seconds the number of seconds + */ + public Duration newDurationDayTime(boolean isPositive, + int days, + int hours, + int minutes, + int seconds) + { + return newDuration(isPositive, + null, + null, + BigInteger.valueOf((long) days), + BigInteger.valueOf((long) hours), + BigInteger.valueOf((long) minutes), + BigDecimal.valueOf((long) seconds)); + } + + /** + * Returns a new yearMonthDuration from its string representation. + * @param lexicalRepresentation the lexical representation of the + * duration, as specified in XML Schema 1.0 section 3.2.6.1. + */ + public Duration newDurationYearMonth(String lexicalRepresentation) + { + return newDuration(lexicalRepresentation); + } + + /** + * Returns a new yearMonthDuration. + * @param durationInMilliseconds the duration in milliseconds + */ + public Duration newDurationYearMonth(long durationInMilliseconds) + { + // TODO xmlSchemaType + return newDuration(durationInMilliseconds); + } + + /** + * Returns a new yearMonthDuration by specifying the individual components. + * @param isPositive whether the duration is positive + * @param years the number of years + * @param months the number of months + */ + public Duration newDurationYearMonth(boolean isPositive, + BigInteger years, + BigInteger months) + { + return newDuration(isPositive, + years, + months, + null, + null, + null, + null); + } + + /** + * Returns a new yearMonthDuration by specifying the individual components. + * @param isPositive whether the duration is positive + * @param years the number of years + * @param months the number of months + */ + public Duration newDurationYearMonth(boolean isPositive, + int years, + int months) + { + return newDuration(isPositive, + BigInteger.valueOf((long) years), + BigInteger.valueOf((long) months), + null, + null, + null, + null); + } + + /** + * Returns a new XMLGregorianCalendar with no fields initialized. + */ + public abstract XMLGregorianCalendar newXMLGregorianCalendar(); + + /** + * Returns a new XMLGregorianCalendar from a string representation. + * @param lexicalRepresentation the lexical representation as specified in + * XML Schema 1.0 Part 2, section 3.2.[7-14].1. + */ + public abstract XMLGregorianCalendar newXMLGregorianCalendar(String lexicalRepresentation); + + /** + * Returns a new XMLGregorianCalendar based on the specified Gregorian + * calendar. + */ + public abstract XMLGregorianCalendar newXMLGregorianCalendar(GregorianCalendar cal); + + /** + * Returns a new XMLGregorianCalendar with the specified components. + */ + public abstract XMLGregorianCalendar newXMLGregorianCalendar(BigInteger year, + int month, + int day, + int hour, + int minute, + int second, + BigDecimal fractionalSecond, + int timezone); + + /** + * Returns a new XMLGregorianCalendar with the specified components. + */ + public XMLGregorianCalendar newXMLGregorianCalendar(int year, + int month, + int day, + int hour, + int minute, + int second, + int millisecond, + int timezone) + { + return newXMLGregorianCalendar(BigInteger.valueOf((long) year), + month, + day, + hour, + minute, + second, + new BigDecimal(((double) millisecond) / 1000.0), + timezone); + } + + /** + * Returns a new XMLGregorianCalendar with the specified components. + */ + public XMLGregorianCalendar newXMLGregorianCalendarDate(int year, + int month, + int day, + int timezone) + { + return newXMLGregorianCalendar(BigInteger.valueOf((long) year), + month, + day, + DatatypeConstants.FIELD_UNDEFINED, + DatatypeConstants.FIELD_UNDEFINED, + DatatypeConstants.FIELD_UNDEFINED, + null, + timezone); + } + + /** + * Returns a new XMLGregorianCalendar with the specified components. + */ + public XMLGregorianCalendar newXMLGregorianCalendarTime(int hours, + int minutes, + int seconds, + int timezone) + { + return newXMLGregorianCalendar(null, + DatatypeConstants.FIELD_UNDEFINED, + DatatypeConstants.FIELD_UNDEFINED, + hours, + minutes, + seconds, + null, + timezone); + } + + /** + * Returns a new XMLGregorianCalendar with the specified components. + */ + public XMLGregorianCalendar newXMLGregorianCalendarTime(int hours, + int minutes, + int seconds, + BigDecimal fractionalSecond, + int timezone) + { + return newXMLGregorianCalendar(null, + DatatypeConstants.FIELD_UNDEFINED, + DatatypeConstants.FIELD_UNDEFINED, + hours, + minutes, + seconds, + fractionalSecond, + timezone); + } + + /** + * Returns a new XMLGregorianCalendar with the specified components. + */ + public XMLGregorianCalendar newXMLGregorianCalendarTime(int hours, + int minutes, + int seconds, + int milliseconds, + int timezone) + { + return newXMLGregorianCalendar(null, + DatatypeConstants.FIELD_UNDEFINED, + DatatypeConstants.FIELD_UNDEFINED, + hours, + minutes, + seconds, + new BigDecimal(((double) milliseconds) / 1000.0), + timezone); + } + +} diff --git a/libjava/classpath/javax/xml/datatype/Duration.java b/libjava/classpath/javax/xml/datatype/Duration.java new file mode 100644 index 000000000..7f53021ce --- /dev/null +++ b/libjava/classpath/javax/xml/datatype/Duration.java @@ -0,0 +1,291 @@ +/* Duration.java -- + Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.datatype; + +import java.math.BigDecimal; +import java.util.Calendar; +import java.util.Date; +import java.util.GregorianCalendar; +import javax.xml.datatype.DatatypeConstants; +import javax.xml.namespace.QName; + +/** + * An immutable time space as specified in XML Schema 1.0. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.5 + */ +public abstract class Duration +{ + + /** + * Returns the name of the XML Schema data type this value maps to. + */ + public QName getXMLSchemaType() + { + int state = 0; + state |= isSet(DatatypeConstants.YEARS) ? 32 : 0; + state |= isSet(DatatypeConstants.MONTHS) ? 16 : 0; + state |= isSet(DatatypeConstants.DAYS) ? 8 : 0; + state |= isSet(DatatypeConstants.HOURS) ? 4 : 0; + state |= isSet(DatatypeConstants.MINUTES) ? 2 : 0; + state |= isSet(DatatypeConstants.SECONDS) ? 1 : 0; + switch (state) + { + case 63: + return DatatypeConstants.DURATION; + case 15: + return DatatypeConstants.DURATION_DAYTIME; + case 48: + return DatatypeConstants.DURATION_YEARMONTH; + default: + throw new IllegalStateException(); + } + } + + /** + * Returns the sign of this value. + */ + public abstract int getSign(); + + /** + * Returns the years in this duration as an int, or 0 if not present. + */ + public int getYears() + { + Number val = getField(DatatypeConstants.YEARS); + return (val == null) ? 0 : val.intValue(); + } + + /** + * Returns the months in this duration as an int, or 0 if not present. + */ + public int getMonths() + { + Number val = getField(DatatypeConstants.MONTHS); + return (val == null) ? 0 : val.intValue(); + } + + /** + * Returns the days in this duration as an int, or 0 if not present. + */ + public int getDays() + { + Number val = getField(DatatypeConstants.DAYS); + return (val == null) ? 0 : val.intValue(); + } + + /** + * Returns the hours in this duration as an int, or 0 if not present. + */ + public int getHours() + { + Number val = getField(DatatypeConstants.HOURS); + return (val == null) ? 0 : val.intValue(); + } + + /** + * Returns the minutes in this duration as an int, or 0 if not present. + */ + public int getMinutes() + { + Number val = getField(DatatypeConstants.MINUTES); + return (val == null) ? 0 : val.intValue(); + } + + /** + * Returns the seconds in this duration as an int, or 0 if not present. + */ + public int getSeconds() + { + Number val = getField(DatatypeConstants.SECONDS); + return (val == null) ? 0 : val.intValue(); + } + + /** + * Returns the duration length in milliseconds. + * Because the length of a month or year may vary depending on the year, + * the <code>startInstant</code> parameter is used to specify the duration + * offset. + */ + public long getTimeInMillis(Calendar startInstant) + { + Calendar cal = (Calendar) startInstant.clone(); + long t1 = cal.getTimeInMillis(); + addTo(cal); + long t2 = cal.getTimeInMillis(); + return t2 - t1; + } + + /** + * Returns the duration length in milliseconds. + * Because the length of a month or year may vary depending on the year, + * the <code>startInstant</code> parameter is used to specify the duration + * offset. + */ + public long getTimeInMillis(Date startInstant) + { + Date date = (Date) startInstant.clone(); + long t1 = date.getTime(); + addTo(date); + long t2 = date.getTime(); + return t2 - t1; + } + + /** + * Returns the value of the specified field, or <code>null</code> if the + * field is undefined. + */ + public abstract Number getField(DatatypeConstants.Field field); + + /** + * Indicates whether the specified field is set. + */ + public abstract boolean isSet(DatatypeConstants.Field field); + + /** + * Returns the result of adding the specified duration to this duration. + */ + public abstract Duration add(Duration rhs); + + /** + * Adds this duration to the specified calendar. + */ + public abstract void addTo(Calendar calendar); + /*{ + switch (getSign()) + { + case -1: + calendar.add(Calendar.YEAR, -getYears()); + calendar.add(Calendar.MONTH, -getMonths()); + calendar.add(Calendar.DATE, -getDays()); + calendar.add(Calendar.HOUR, -getHours()); + calendar.add(Calendar.MINUTE, -getMinutes()); + calendar.add(Calendar.SECOND, -getSeconds()); + break; + case 1: + calendar.add(Calendar.YEAR, getYears()); + calendar.add(Calendar.MONTH, getMonths()); + calendar.add(Calendar.DATE, getDays()); + calendar.add(Calendar.HOUR, getHours()); + calendar.add(Calendar.MINUTE, getMinutes()); + calendar.add(Calendar.SECOND, getSeconds()); + } + }*/ + + /** + * Adds this duration to the specified date. + */ + public void addTo(Date date) + { + Calendar calendar = new GregorianCalendar(); + calendar.setTimeInMillis(date.getTime()); + addTo(calendar); + date.setTime(calendar.getTimeInMillis()); + } + + /** + * Returns the result of subtracting the given duration from this + * duration. + */ + public Duration subtract(Duration rhs) + { + // TODO + throw new UnsupportedOperationException(); + } + + /** + * Returns the result of multiplying this duration by the given factor. + */ + public Duration multiply(int factor) + { + return multiply(BigDecimal.valueOf((long) factor)); + } + + /** + * Returns the result of multiplying this duration by the given factor. + */ + public abstract Duration multiply(BigDecimal factor); + + /** + * Returns the unary negative of this duration. + */ + public abstract Duration negate(); + + /** + * Converts the years and months fields into the days field using a + * specific time instant as the reference point. + */ + public abstract Duration normalizeWith(Calendar startTimeInstant); + + /** + * Partial order relation comparison with this duration, in accordance + * with XML Schema 1.0 Part 2, Section 3.2.7.6.2. + */ + public abstract int compare(Duration duration); + + public boolean isLongerThan(Duration duration) + { + // TODO + throw new UnsupportedOperationException(); + } + + public boolean isShorterThan(Duration duration) + { + // TODO + throw new UnsupportedOperationException(); + } + + public boolean equals(java.lang.Object duration) + { + // TODO + throw new UnsupportedOperationException(); + } + + public abstract int hashCode(); + + /** + * Returns the lexical representation of this duration. + */ + public String toString() + { + // TODO + throw new UnsupportedOperationException(); + } + +} diff --git a/libjava/classpath/javax/xml/datatype/XMLGregorianCalendar.java b/libjava/classpath/javax/xml/datatype/XMLGregorianCalendar.java new file mode 100644 index 000000000..a8a9272e0 --- /dev/null +++ b/libjava/classpath/javax/xml/datatype/XMLGregorianCalendar.java @@ -0,0 +1,217 @@ +/* XMLGregorianCalendar.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.datatype; + +import java.math.BigDecimal; +import java.math.BigInteger; +import java.util.GregorianCalendar; +import java.util.Locale; +import java.util.TimeZone; +import javax.xml.namespace.QName; + +/** + * An XML Schema 1.0 date/time data type. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public abstract class XMLGregorianCalendar + implements Cloneable +{ + + /** + * Resets all fields to undefined. + */ + public abstract void clear(); + + /** + * Resets all fields to their original values. + */ + public abstract void reset(); + + public abstract void setYear(BigInteger year); + + public abstract void setYear(int year); + + public abstract void setMonth(int month); + + public abstract void setDay(int day); + + public abstract void setTimezone(int offset); + + public void setTime(int hour, int minute, int second) + { + setHour(hour); + setMinute(minute); + setSecond(second); + } + + public abstract void setHour(int hour); + + public abstract void setMinute(int minute); + + public abstract void setSecond(int second); + + public abstract void setMillisecond(int millisecond); + + public abstract void setFractionalSecond(BigDecimal fractional); + + public void setTime(int hour, int minute, int second, BigDecimal fractional) + { + setHour(hour); + setMinute(minute); + setSecond(second); + setFractionalSecond(fractional); + } + + public void setTime(int hour, int minute, int second, int millisecond) + { + setHour(hour); + setMinute(minute); + setSecond(second); + setMillisecond(millisecond); + } + + public abstract BigInteger getEon(); + + public abstract int getYear(); + + public abstract BigInteger getEonAndYear(); + + public abstract int getMonth(); + + public abstract int getDay(); + + public abstract int getTimezone(); + + public abstract int getHour(); + + public abstract int getMinute(); + + public abstract int getSecond(); + + public int getMillisecond() + { + BigDecimal factor = BigDecimal.valueOf(1000L); + BigDecimal val = getFractionalSecond().multiply(factor); + return val.intValue(); + } + + public abstract BigDecimal getFractionalSecond(); + + public abstract int compare(XMLGregorianCalendar xmlGregorianCalendar); + + public abstract XMLGregorianCalendar normalize(); + + public boolean equals(Object obj) + { + if (obj instanceof XMLGregorianCalendar) + { + XMLGregorianCalendar xgc = (XMLGregorianCalendar) obj; + BigInteger y1 = getEonAndYear(); + BigInteger y2 = xgc.getEonAndYear(); + BigDecimal f1 = getFractionalSecond(); + BigDecimal f2 = xgc.getFractionalSecond(); + return ((y1 == null && y2 == null) || (y1 != null && y1.equals(y2))) && + getMonth() == xgc.getMonth() && + getDay() == xgc.getDay() && + getTimezone() == xgc.getTimezone() && + getHour() == xgc.getHour() && + getMinute() == xgc.getMinute() && + getSecond() == xgc.getSecond() && + ((f1 == null && f2 == null) || (f1 != null && f1.equals(f2))); + } + return false; + } + + public int hashCode() + { + int hash = 0; + BigInteger y = getEonAndYear(); + BigDecimal f = getFractionalSecond(); + if (y != null) + { + hash *= 31 + y.hashCode(); + } + hash *= 31 + getMonth(); + hash *= 31 + getDay(); + hash *= 31 + getTimezone(); + hash *= 31 + getHour(); + hash *= 31 + getMinute(); + hash *= 31 + getSecond(); + if (f != null) + { + hash *= 31 + f.hashCode(); + } + return hash; + } + + /** + * Returns the XML Schema lexical representation of this calendar. + */ + public abstract String toXMLFormat(); + + public abstract QName getXMLSchemaType(); + + public String toString() + { + return toXMLFormat(); + } + + /** + * Determines the validity of this calendar by + * <code>getXMLSchemaType</code> constraints. + */ + public abstract boolean isValid(); + + /** + * Adds the specified duration to this calendar. + */ + public abstract void add(Duration duration); + + public abstract GregorianCalendar toGregorianCalendar(); + + public abstract GregorianCalendar toGregorianCalendar(TimeZone timezone, + Locale locale, + XMLGregorianCalendar defaults); + + public abstract TimeZone getTimeZone(int defaultZoneoffset); + + public abstract Object clone(); + +} diff --git a/libjava/classpath/javax/xml/datatype/package.html b/libjava/classpath/javax/xml/datatype/package.html new file mode 100644 index 000000000..ffd850c04 --- /dev/null +++ b/libjava/classpath/javax/xml/datatype/package.html @@ -0,0 +1,57 @@ +<body> + +<div> +This package provides type mappings between XML and Java data types. +</div> + +<table summary='XML Schema type mappings'> + <tr> + <th>XML Schema data type</th><th>Java data type</th> + </tr> + <tr> + <td>xs:date</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td> + </tr> + <tr> + <td>xs:dateTime</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td> + </tr> + <tr> + <td>xs:duration</td><td><a href='Duration.html'>Duration</a></td> + </tr> + <tr> + <td>xs:gDay</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td> + </tr> + <tr> + <td>xs:gMonth</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td> + </tr> + <tr> + <td>xs:gMonthDay</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td> + </tr> + <tr> + <td>xs:gYear</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td> + </tr> + <tr> + <td>xs:gYearMonth</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td> + </tr> + <tr> + <td>xs:time</td><td><a href='XMLGregorianCalendar.html'>XMLGregorianCalendar</a></td> + </tr> +</table> + +<table summary='XPath 2.0 data type mappings'> + <tr> + <th>XPath 2.0 data type</th><th>Java data type</th> + </tr> + <tr> + <td>xdt:dayTimeDuration</td><td><a href='Duration.html'>Duration</a></td> + </tr> + <tr> + <td>xdt:yearMonthDuration</td><td><a href='Duration.html'>Duration</a></td> + </tr> +</table> + +<div> +Other XML Schema data types are considered to have a <q>natural</q> mapping to +Java types, which are defined by the Java Architecture for XML Binding (JAXB). +</div> + +</body> diff --git a/libjava/classpath/javax/xml/namespace/NamespaceContext.java b/libjava/classpath/javax/xml/namespace/NamespaceContext.java new file mode 100644 index 000000000..b3e1e1f61 --- /dev/null +++ b/libjava/classpath/javax/xml/namespace/NamespaceContext.java @@ -0,0 +1,67 @@ +/* NamespaceContext.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.namespace; + +import java.util.Iterator; + +/** + * Interface by which namespace properties are made available. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public interface NamespaceContext +{ + + /** + * Returns the namespace URI currently bound to the given prefix. + */ + public String getNamespaceURI(String prefix); + + /** + * Returns the prefix currently bound to the given namespace URI. + */ + public String getPrefix(String namespaceURI); + + /** + * Returns all the prefixes currently bound to the given namespace URI. + */ + @SuppressWarnings("unchecked") + public Iterator getPrefixes(String namespaceURI); + +} diff --git a/libjava/classpath/javax/xml/namespace/QName.java b/libjava/classpath/javax/xml/namespace/QName.java new file mode 100644 index 000000000..4033febfc --- /dev/null +++ b/libjava/classpath/javax/xml/namespace/QName.java @@ -0,0 +1,173 @@ +/* QName.java - An XML qualified name. + Copyright (C) 2004,2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + + +package javax.xml.namespace; + +import gnu.java.lang.CPStringBuilder; + +import java.io.Serializable; + +import javax.xml.XMLConstants; + +/** + * An XML + * <a href='http://www.w3.org/TR/REC-xml-names/#ns-qualnames'>qualified name</a>. + * + * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a> + * @since 1.3 + */ +public class QName implements Serializable +{ + private static final long serialVersionUID = 4418622981026545151L; + + private final String namespaceURI; + private final String localPart; + private final String prefix; + private transient String qName; + transient int hashCode = -1; + + public QName(String namespaceURI, String localPart) + { + this(namespaceURI, localPart, null); + } + + public QName(String namespaceURI, String localPart, String prefix) + { + if (namespaceURI == null) + namespaceURI = XMLConstants.NULL_NS_URI; + if (localPart == null) + throw new IllegalArgumentException(); + if (prefix == null) + prefix = XMLConstants.DEFAULT_NS_PREFIX; + else + { + if (XMLConstants.XML_NS_PREFIX.equals(prefix)) + namespaceURI = XMLConstants.XML_NS_URI; + else if (XMLConstants.XMLNS_ATTRIBUTE.equals(prefix)) + namespaceURI = XMLConstants.XMLNS_ATTRIBUTE_NS_URI; + } + this.namespaceURI = namespaceURI; + this.localPart = localPart; + this.prefix = prefix; + } + + public QName(String localPart) + { + this(null, localPart, null); + } + + public String getNamespaceURI() + { + return namespaceURI; + } + + public String getLocalPart() + { + return localPart; + } + + public String getPrefix() + { + return prefix; + } + + public final boolean equals(Object obj) + { + if (obj instanceof QName) + { + QName qname = (QName) obj; + return qname.getLocalPart().equals(localPart) && + qname.getNamespaceURI().equals(namespaceURI); + } + return false; + } + + public final int hashCode() + { + if (hashCode == -1) + hashCode = localPart.hashCode() ^ namespaceURI.hashCode(); + return hashCode; + } + + public synchronized String toString() + { + if (qName == null) + { + CPStringBuilder buf = new CPStringBuilder(); + if (namespaceURI.length() > 0) + { + buf.append('{'); + buf.append(namespaceURI); + buf.append('}'); + } + if (prefix.length() > 0) + { + buf.append(prefix); + buf.append(':'); + } + buf.append(localPart); + qName = buf.toString(); + } + return qName; + } + + public static QName valueOf(String qNameAsString) + { + if (qNameAsString == null) + throw new IllegalArgumentException("qNameAsString can't be null"); + + String namespaceUri = "", prefix = null; + int start = qNameAsString.indexOf('{'); + int end = qNameAsString.indexOf('}'); + if (start != -1) + { + if (end < start) + throw new IllegalArgumentException(qNameAsString); + namespaceUri = qNameAsString.substring(start + 1, end); + qNameAsString = qNameAsString.substring(end + 1); + } + start = qNameAsString.indexOf(':'); + if (start != -1) + { + prefix = qNameAsString.substring(0, start); + qNameAsString = qNameAsString.substring(start + 1); + } + return new QName(namespaceUri, qNameAsString, prefix); + } + +} diff --git a/libjava/classpath/javax/xml/namespace/package.html b/libjava/classpath/javax/xml/namespace/package.html new file mode 100644 index 000000000..00929f8a0 --- /dev/null +++ b/libjava/classpath/javax/xml/namespace/package.html @@ -0,0 +1,9 @@ +<html> +<body> + +<div> +<a href='http://www.w3.org/TR/REC-xml-names'>XML Namespace</a> processing. +</div> + +</body> +</html> diff --git a/libjava/classpath/javax/xml/parsers/DocumentBuilder.java b/libjava/classpath/javax/xml/parsers/DocumentBuilder.java new file mode 100644 index 000000000..8e4eccbb0 --- /dev/null +++ b/libjava/classpath/javax/xml/parsers/DocumentBuilder.java @@ -0,0 +1,203 @@ +/* DocumentBuilder.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.parsers; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.IOException; +import javax.xml.validation.Schema; +import org.w3c.dom.Document; +import org.w3c.dom.DOMImplementation; +import org.xml.sax.InputSource; +import org.xml.sax.EntityResolver; +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXException; + +/** + * Convenience class for parsing an XML document into a W3C DOM object + * graph. + * Instances of this class are <em>not</em> guaranteed to be thread safe. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public abstract class DocumentBuilder +{ + + protected DocumentBuilder() + { + } + + /** + * Parse the specified input stream and return a DOM Document. + * Prefer the version of this method that specifies a system ID, in order + * to resolve external references correctly. + * @param is an XML input stream + * @exception IllegalArgumentException if the input stream is null + */ + public Document parse(InputStream is) + throws SAXException, IOException + { + if (is == null) + { + throw new IllegalArgumentException("input stream is null"); + } + return parse(new InputSource(is)); + } + + /** + * Parse the specified input stream and return a DOM Document. + * @param is an XML input stream + * @param systemId the system ID of the XML document + * @exception IllegalArgumentException if the input stream is null + */ + public Document parse(InputStream is, String systemId) + throws SAXException, IOException + { + if (is == null) + { + throw new IllegalArgumentException("input stream is null"); + } + InputSource source = new InputSource(is); + source.setSystemId(systemId); + return parse(source); + } + + /** + * Parse the content of the specified URI and return a DOM Document. + * @param uri an XML system ID + * @exception IllegalArgumentException if the URI is null + */ + public Document parse(String uri) + throws SAXException, IOException + { + if (uri == null) + { + throw new IllegalArgumentException("URI is null"); + } + return parse(new InputSource(uri)); + } + + /** + * Parse the specified file and return a DOM Document. + * @param f the XML file + * @exception IllegalArgumentException if the file is null + */ + public Document parse(File f) + throws SAXException, IOException + { + if (f == null) + { + throw new IllegalArgumentException("file is null"); + } + InputSource source = new InputSource(new FileInputStream(f)); + source.setSystemId(f.toURL().toString()); + return parse(source); + } + + /** + * Parse the specified input source and return a DOM Document. + * @param source the input source + * @exception IllegalArgumentException if the input source is null + */ + public abstract Document parse(InputSource source) + throws SAXException, IOException; + + /** + * Indicates whether this document builder is XML Namespace aware. + */ + public abstract boolean isNamespaceAware(); + + /** + * Indicates whether this document builder will validate its input. + */ + public abstract boolean isValidating(); + + /** + * Sets the SAX entity resolver callback used to resolve external entities + * in the XML document(s) to parse. + * @param er an entity resolver + */ + public abstract void setEntityResolver(EntityResolver er); + + /** + * Sets the SAX error handler callback used to report parsing errors. + * @param eh the error handler + */ + public abstract void setErrorHandler(ErrorHandler eh); + + /** + * Creates a new, empty DOM Document. + * To create a document with a root element and optional doctype, use the + * <code>DOMImplementation</code> instead. + * @see org.w3c.dom.DOMImplementation#createDocument + */ + public abstract Document newDocument(); + + /** + * Returns the DOM implementation. + */ + public abstract DOMImplementation getDOMImplementation(); + + // -- JAXP 1.3 methods -- + + /** + * Reset this document builder to its original configuration. + * @since 1.3 + */ + public void reset() + { + } + + /** + * Returns the schema in use by the XML processor. + */ + public Schema getSchema() + { + return null; + } + + /** + * Returns the XInclude processing mode in use by the parser. + */ + public boolean isXIncludeAware() + { + return false; + } + +} diff --git a/libjava/classpath/javax/xml/parsers/DocumentBuilderFactory.java b/libjava/classpath/javax/xml/parsers/DocumentBuilderFactory.java new file mode 100644 index 000000000..5f8b49d7c --- /dev/null +++ b/libjava/classpath/javax/xml/parsers/DocumentBuilderFactory.java @@ -0,0 +1,369 @@ +/* DocumentBuilderFactory.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.parsers; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.util.Properties; +import javax.xml.validation.Schema; + +/** + * Factory for obtaining document builders. + * Instances of this class are <em>not</em> guaranteed to be thread safe. + * + * @author <a href='mailto:dog@gnu.org'>Chris Burdess</a> + */ +public abstract class DocumentBuilderFactory +{ + + private boolean namespaceAware; + private boolean validating; + private boolean ignoringElementContentWhitespace; + private boolean expandEntityReferences = true; + private boolean ignoringComments; + private boolean coalescing; + private Schema schema; + private boolean xIncludeAware; + + protected DocumentBuilderFactory() + { + } + + /** + * Creates a new factory instance. + * The implementation class to load is the first found in the following + * locations: + * <ol> + * <li>the <code>javax.xml.parsers.DocumentBuilderFactory</code> system + * property</li> + * <li>the above named property value in the + * <code><i>$JAVA_HOME</i>/lib/jaxp.properties</code> file</li> + * <li>the class name specified in the + * <code>META-INF/services/javax.xml.parsers.DocumentBuilderFactory</code> + * system resource</li> + * <li>the default factory class</li> + * </ol> + */ + public static DocumentBuilderFactory newInstance() + { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + if (loader == null) + { + loader = DocumentBuilderFactory.class.getClassLoader(); + } + String className = null; + int count = 0; + do + { + className = getFactoryClassName(loader, count++); + if (className != null) + { + try + { + Class<?> t = (loader != null) ? loader.loadClass(className) : + Class.forName(className); + return (DocumentBuilderFactory) t.newInstance(); + } + catch (ClassNotFoundException e) + { + className = null; + } + catch (Exception e) + { + throw new FactoryConfigurationError(e, + "error instantiating class " + className); + } + } + } + while (className == null && count < 3); + return new gnu.xml.dom.DomDocumentBuilderFactory(); + } + + private static String getFactoryClassName(ClassLoader loader, int attempt) + { + final String propertyName = "javax.xml.parsers.DocumentBuilderFactory"; + switch (attempt) + { + case 0: + return System.getProperty(propertyName); + case 1: + try + { + File file = new File(System.getProperty("java.home")); + file = new File(file, "lib"); + file = new File(file, "jaxp.properties"); + InputStream in = new FileInputStream(file); + Properties props = new Properties(); + props.load(in); + in.close(); + return props.getProperty(propertyName); + } + catch (IOException e) + { + return null; + } + case 2: + try + { + String serviceKey = "/META-INF/services/" + propertyName; + InputStream in = (loader != null) ? + loader.getResourceAsStream(serviceKey) : + DocumentBuilderFactory.class.getResourceAsStream(serviceKey); + if (in != null) + { + BufferedReader r = + new BufferedReader(new InputStreamReader(in)); + String ret = r.readLine(); + r.close(); + return ret; + } + } + catch (IOException e) + { + } + return null; + default: + return null; + } + } + + /** + * Creates a new document builder instance using the currently specified + * factory configuration. + * @exception ParserConfigurationException if the specified configuration + * is not supported + */ + public abstract DocumentBuilder newDocumentBuilder() + throws ParserConfigurationException; + + /** + * Sets whether document builders obtained from this factory will be XML + * Namespace aware. + */ + public void setNamespaceAware(boolean awareness) + { + namespaceAware = awareness; + } + + /** + * Sets whether document builders obtained from this factory will validate + * their input. + */ + public void setValidating(boolean validating) + { + this.validating = validating; + } + + /** + * Sets whether document builders obtained from this factory will + * eliminate whitespace within elements that have an element-only content + * model. + */ + public void setIgnoringElementContentWhitespace(boolean whitespace) + { + ignoringElementContentWhitespace = whitespace; + } + + /** + * Sets whether document builders obtained from this factory will expand + * entity reference nodes. + */ + public void setExpandEntityReferences(boolean expandEntityRef) + { + expandEntityReferences = expandEntityRef; + } + + /** + * Sets whether document builders obtained from this factory will discard + * comment nodes. + */ + public void setIgnoringComments(boolean ignoreComments) + { + ignoringComments = ignoreComments; + } + + /** + * Sets whether document builders obtained from this factory will convert + * CDATA sections to text nodes and normalize adjacent text nodes into a + * single text node. + */ + public void setCoalescing(boolean coalescing) + { + this.coalescing = coalescing; + } + + /** + * Indicates whether document builders obtained from this factory will be + * XML Namespace aware. + */ + public boolean isNamespaceAware() + { + return namespaceAware; + } + + /** + * Indicates whether document builders obtained from this factory will + * validate their input. + */ + public boolean isValidating() + { + return validating; + } + + /** + * Indicates whether document builders obtained from this factory will + * eliminate whitespace within elements that have an element-only content + * model. + */ + public boolean isIgnoringElementContentWhitespace() + { + return ignoringElementContentWhitespace; + } + + /** + * Indicates whether document builders obtained from this factory will + * expand entity reference nodes. + */ + public boolean isExpandEntityReferences() + { + return expandEntityReferences; + } + + /** + * Indicates whether document builders obtained from this factory will + * discard comment nodes. + */ + public boolean isIgnoringComments() + { + return ignoringComments; + } + + /** + * Indicates whether document builders obtained from this factory will + * convert CDATA sections to text nodes and normalize adjacent text nodes + * into a single text node. + */ + public boolean isCoalescing() + { + return coalescing; + } + + /** + * Set the named attribute on the underlying implementation. + * @param name the name of the attribute + * @param value the new value + * @exception IllegalArgumentException if the attribute is not recognized + */ + public abstract void setAttribute(String name, Object value) + throws IllegalArgumentException; + + /** + * Retrieves the named attribute value from the underlying implementation. + * @param name the name of the attribute + * @exception IllegalArgumentException if the attribute is not recognized + */ + public abstract Object getAttribute(String name) + throws IllegalArgumentException; + + // -- JAXP 1.3 methods -- + + /** + * Returns the schema. + * @see #setSchema + * @since 1.5 + */ + public Schema getSchema() + { + return schema; + } + + /** + * Sets the schema. + * @see #getSchema + * @since 1.5 + */ + public void setSchema(Schema schema) + { + this.schema = schema; + } + + /** + * Indicates whether parsers obtained from this factory will be XInclude + * aware. + * @since 1.5 + */ + public boolean isXIncludeAware() + { + return xIncludeAware; + } + + /** + * Sets whether parsers obtained from this factory will be XInclude aware. + * @since 1.5 + */ + public void setXIncludeAware(boolean state) + { + xIncludeAware = state; + } + + /** + * Sets the value of the specified feature. + * @param name the feature name (URI) + * @param value whether to enable the feature or not + * @exception ParserConfigurationException if the feature is not + * supported. + * @since 1.5 + */ + public abstract void setFeature(String name, boolean value) + throws ParserConfigurationException; + + /** + * Returns the value of the specified feature. + * @param name the feature name (URI) + * @exception ParserConfigurationException if the feature is not + * supported. + * @since 1.5 + */ + public abstract boolean getFeature(String name) + throws ParserConfigurationException; + +} diff --git a/libjava/classpath/javax/xml/parsers/FactoryConfigurationError.java b/libjava/classpath/javax/xml/parsers/FactoryConfigurationError.java new file mode 100644 index 000000000..6e2ebfadb --- /dev/null +++ b/libjava/classpath/javax/xml/parsers/FactoryConfigurationError.java @@ -0,0 +1,113 @@ +/* FactoryConfigurationError.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.parsers; + +/** + * An error occurred during configuration of the parser factory. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class FactoryConfigurationError + extends Error +{ + + /** + * The underlying cause of this exception, if any. + */ + private Exception exception; + + /** + * Constructor with no detail message. + */ + public FactoryConfigurationError() + { + super(); + } + + /** + * Constructor with the specified detail message. + * @param msg the detail message + */ + public FactoryConfigurationError(String msg) + { + super(msg); + } + + /** + * Constructor with the specified underlying cause. + * @param e the underlying cause of this exception + */ + public FactoryConfigurationError(Exception e) + { + super(e); + exception = e; + } + + /** + * Constructor with the specified underlying cause and detail message. + * @param e the underlying cause of this exception + * @param msg the detail message + */ + public FactoryConfigurationError(Exception e, String msg) + { + super(msg, e); + exception = e; + } + + /** + * Returns the message for this error, if any. + */ + public String getMessage() + { + String message = super.getMessage(); + if (message == null && exception != null) + { + message = exception.getMessage(); + } + return message; + } + + /** + * Returns the underlying cause of this exception, if any. + */ + public Exception getException() + { + return exception; + } + +} diff --git a/libjava/classpath/javax/xml/parsers/ParserConfigurationException.java b/libjava/classpath/javax/xml/parsers/ParserConfigurationException.java new file mode 100644 index 000000000..a58decedb --- /dev/null +++ b/libjava/classpath/javax/xml/parsers/ParserConfigurationException.java @@ -0,0 +1,66 @@ +/* ParserConfigurationException.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.parsers; + +/** + * An exception occurred during configuration of the XML parser. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class ParserConfigurationException + extends Exception +{ + + /** + * Constructor with no detail message. + */ + public ParserConfigurationException() + { + super(); + } + + /** + * Constructor with the specified detail message. + * @param msg the detail message + */ + public ParserConfigurationException(String msg) + { + super(msg); + } + +} diff --git a/libjava/classpath/javax/xml/parsers/SAXParser.java b/libjava/classpath/javax/xml/parsers/SAXParser.java new file mode 100644 index 000000000..e53558760 --- /dev/null +++ b/libjava/classpath/javax/xml/parsers/SAXParser.java @@ -0,0 +1,340 @@ +/* SAXParser.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.parsers; + +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.IOException; +import javax.xml.validation.Schema; +import org.xml.sax.HandlerBase; +import org.xml.sax.InputSource; +import org.xml.sax.Parser; +import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; +import org.xml.sax.XMLReader; +import org.xml.sax.helpers.DefaultHandler; + +/** + * Convenience class for using or accessing a SAX version 1 or 2 parser. + * Instances of this class are <em>not</em> guaranteed to be thread safe. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public abstract class SAXParser +{ + + protected SAXParser() + { + } + + /** + * Parse the specifed input stream, reporting SAX1 events to the given + * handler. + * Prefer the SAX2 version of this method, since the HandlerBase class is + * now deprecated. + * Also prefer the version of this method that specifies a system ID, in + * order to resolve external references correctly. + * @param is an XML input stream + * @param hb the SAX1 handler + * @exception IllegalArgumentException if the input stream is null + * @see #parse(java.io.InputStream,org.xml.sax.helpers.DefaultHandler) + */ + public void parse(InputStream is, HandlerBase hb) + throws SAXException, IOException + { + if (is == null) + { + throw new IllegalArgumentException("input stream is null"); + } + parse(new InputSource(is), hb); + } + + /** + * Parse the specified input stream, reporting SAX1 events to the given + * handler. + * Prefer the SAX2 version of this method, since the HandlerBase class is + * now deprecated. + * @param is an XML input stream + * @param hb the SAX1 handler + * @param systemId the system ID of the XML document + * @exception IllegalArgumentException if the input stream is null + * @see #parse(java.io.InputStream,org.xml.sax.helpers.DefaultHandler,java.lang.String) + */ + public void parse(InputStream is, HandlerBase hb, String systemId) + throws SAXException, IOException + { + if (is == null) + { + throw new IllegalArgumentException("input stream is null"); + } + InputSource source = new InputSource(is); + source.setSystemId(systemId); + parse(source, hb); + } + + /** + * Parse the specified input stream, reporting SAX2 events to the given + * handler. + * Prefer the version of this method that specifies a system ID, in + * order to resolve external references correctly. + * @param is an XML input stream + * @param dh the SAX2 handler + * @exception IllegalArgumentException if the input stream is null + */ + public void parse(InputStream is, DefaultHandler dh) + throws SAXException, IOException + { + if (is == null) + { + throw new IllegalArgumentException("input stream is null"); + } + parse(new InputSource(is), dh); + } + + /** + * Parse the specified input stream, reporting SAX2 events to the given + * handler. + * @param is an XML input stream + * @param dh the SAX2 handler + * @param systemId the system ID of the XML document + * @exception IllegalArgumentException if the input stream is null + */ + public void parse (InputStream is, DefaultHandler dh, String systemId) + throws SAXException, IOException + { + if (is == null) + { + throw new IllegalArgumentException("input stream is null"); + } + InputSource source = new InputSource(is); + source.setSystemId(systemId); + parse(source, dh); + } + + /** + * Parse the content of the specified URI, reporting SAX1 events to the + * given handler. + * Prefer the SAX2 version of this method, since the HandlerBase class is + * now deprecated. + * @param uri an XML system ID + * @param hb the SAX1 handler + * @exception IllegalArgumentException if the URI is null + * @see #parse(java.lang.String,org.xml.sax.helpers.DefaultHandler) + */ + public void parse(String uri, HandlerBase hb) + throws SAXException, IOException + { + if (uri == null) + { + throw new IllegalArgumentException("URI is null"); + } + parse(new InputSource(uri), hb); + } + + /** + * Parse the content of the specified URI, reporting SAX2 events to the + * given handler. + * @param uri an XML system ID + * @param dh the SAX2 handler + * @exception IllegalArgumentException if the URI is null + */ + public void parse(String uri, DefaultHandler dh) + throws SAXException, IOException + { + if (uri == null) + { + throw new IllegalArgumentException("URI is null"); + } + parse(new InputSource(uri), dh); + } + + /** + * Parse the content of the specified file, reporting SAX1 events to the + * given handler. + * Prefer the SAX2 version of this method, since the HandlerBase class is + * now deprecated. + * @param f an XML file + * @param hb the SAX1 handler + * @exception IllegalArgumentException if the file is null + * @see #parse(java.io.File,org.xml.sax.helpers.DefaultHandler) + */ + public void parse(File f, HandlerBase hb) + throws SAXException, IOException + { + if (f == null) + { + throw new IllegalArgumentException("file is null"); + } + InputSource source = new InputSource(new FileInputStream(f)); + source.setSystemId(f.toURL().toString()); + parse(source, hb); + } + + /** + * Parse the content of the specified file, reporting SAX2 events to the + * given handler. + * @param f an XML file + * @param dh the SAX2 handler + * @exception IllegalArgumentException if the file is null + */ + public void parse(File f, DefaultHandler dh) + throws SAXException, IOException + { + if (f == null) + { + throw new IllegalArgumentException("file is null"); + } + InputSource source = new InputSource(new FileInputStream(f)); + source.setSystemId(f.toURL().toString()); + parse(source, dh); + } + + /** + * Parse the specified input source, reporting SAX1 events to the + * given handler. + * Prefer the SAX2 version of this method, since the HandlerBase class is + * now deprecated. + * @param is the SAX input source + * @param hb the SAX1 handler + * @exception IllegalArgumentException if the input source is null + * @see #parse(org.xml.sax.InputSource,org.xml.sax.helpers.DefaultHandler) + */ + public void parse(InputSource is, HandlerBase hb) + throws SAXException, IOException + { + if (is == null) + { + throw new IllegalArgumentException("input source is null"); + } + Parser parser = getParser(); + parser.setDocumentHandler(hb); + parser.setDTDHandler(hb); + parser.setEntityResolver(hb); + parser.setErrorHandler(hb); + parser.parse(is); + } + + /** + * Parse the specified input source, reporting SAX2 events to the + * given handler. + * @param is an XML file + * @param dh the SAX2 handler + * @exception IllegalArgumentException if the input source is null + */ + public void parse(InputSource is, DefaultHandler dh) + throws SAXException, IOException + { + if (is == null) + { + throw new IllegalArgumentException("input source is null"); + } + XMLReader reader = getXMLReader(); + reader.setContentHandler(dh); + reader.setDTDHandler(dh); + reader.setEntityResolver(dh); + reader.setErrorHandler(dh); + reader.parse(is); + } + + /** + * Returns the underlying SAX1 parser. + */ + public abstract Parser getParser() throws SAXException; + + /** + * Returns the underlying SAX2 parser. + * @since 1.1 + */ + public abstract XMLReader getXMLReader() throws SAXException; + + /** + * Indicates whether this parser is XML Namespace aware. + */ + public abstract boolean isNamespaceAware(); + + /** + * Indicates whether this parser will validate its input. + */ + public abstract boolean isValidating(); + + /** + * Sets the specified SAX2 parser property. + * @param name the name of the property + * @param value the value of the property + */ + public abstract void setProperty(String name, Object value) + throws SAXNotRecognizedException, SAXNotSupportedException; + + /** + * Returns the value of the specified SAX2 parser property. + * @param name the name of the property + */ + public abstract Object getProperty(String name) + throws SAXNotRecognizedException, SAXNotSupportedException; + + // -- JAXP 1.3 methods -- + + /** + * Resets this parser to its original configuration. + * @since 1.3 + */ + public void reset() + { + } + + /** + * Returns the schema in use by this parser. + * @since 1.3 + */ + public Schema getSchema() + { + return null; + } + + /** + * Indicates whether this parser is XInclude-aware. + * @since 1.3 + */ + public boolean isXIncludeAware() + { + return false; + } + +} diff --git a/libjava/classpath/javax/xml/parsers/SAXParserFactory.java b/libjava/classpath/javax/xml/parsers/SAXParserFactory.java new file mode 100644 index 000000000..13aca0f2b --- /dev/null +++ b/libjava/classpath/javax/xml/parsers/SAXParserFactory.java @@ -0,0 +1,273 @@ +/* SAXParserFactory.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.parsers; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.util.Properties; +import javax.xml.validation.Schema; +import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; + +/** + * Factory for obtaining SAX parsers. + * Instances of this class are <em>not</em> guaranteed to be thread safe. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public abstract class SAXParserFactory +{ + + private boolean validating; + private boolean namespaceAware; + private Schema schema; + private boolean xIncludeAware; + + protected SAXParserFactory() + { + } + + /** + * Creates a new factory instance. + * The implementation class to load is the first found in the following + * locations: + * <ol> + * <li>the <code>javax.xml.parsers.SAXParserFactory</code> system + * property</li> + * <li>the above named property value in the + * <code><i>$JAVA_HOME</i>/lib/jaxp.properties</code> file</li> + * <li>the class name specified in the + * <code>META-INF/services/javax.xml.parsers.SAXParserFactory</code> + * system resource</li> + * <li>the default factory class</li> + * </ol> + */ + public static SAXParserFactory newInstance() + throws FactoryConfigurationError + { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + if (loader == null) + { + loader = SAXParserFactory.class.getClassLoader(); + } + String className = null; + int count = 0; + do + { + className = getFactoryClassName(loader, count++); + if (className != null) + { + try + { + Class<?> t = (loader != null) ? loader.loadClass(className) : + Class.forName(className); + return (SAXParserFactory) t.newInstance(); + } + catch (ClassNotFoundException e) + { + className = null; + } + catch (Exception e) + { + throw new FactoryConfigurationError(e, + "error instantiating class " + className); + } + } + } + while (className == null && count < 3); + return new gnu.xml.stream.SAXParserFactory(); + } + + private static String getFactoryClassName(ClassLoader loader, int attempt) + { + final String propertyName = "javax.xml.parsers.SAXParserFactory"; + switch (attempt) + { + case 0: + return System.getProperty(propertyName); + case 1: + try + { + File file = new File(System.getProperty("java.home")); + file = new File(file, "lib"); + file = new File(file, "jaxp.properties"); + InputStream in = new FileInputStream(file); + Properties props = new Properties(); + props.load(in); + in.close(); + return props.getProperty(propertyName); + } + catch (IOException e) + { + return null; + } + case 2: + try + { + String serviceKey = "/META-INF/services/" + propertyName; + InputStream in = (loader != null) ? + loader.getResourceAsStream(serviceKey) : + SAXParserFactory.class.getResourceAsStream(serviceKey); + if (in != null) + { + BufferedReader r = + new BufferedReader(new InputStreamReader(in)); + String ret = r.readLine(); + r.close(); + return ret; + } + } + catch (IOException e) + { + } + return null; + default: + return null; + } + } + + /** + * Creates a new parser instance using the currently specified factory + * configuration. + * @exception ParserConfigurationException if the specified configuration + * is not supported + */ + public abstract SAXParser newSAXParser() + throws ParserConfigurationException, SAXException; + + /** + * Sets whether parsers obtained from this factory will be XML Namespace + * aware. + */ + public void setNamespaceAware(boolean awareness) + { + namespaceAware = awareness; + } + + /** + * Sets whether parsers obtained from this factory will validate their + * input. + */ + public void setValidating(boolean validating) + { + this.validating = validating; + } + + /** + * Indicates whether parsers obtained from this factory will be XML + * Namespace aware. + */ + public boolean isNamespaceAware() + { + return namespaceAware; + } + + /** + * Indicates whether parsers obtained from this factory will validate + * their input. + */ + public boolean isValidating() + { + return validating; + } + + /** + * Sets the specified feature for SAX2 parsers obtained from this factory. + * @param name the feature name + * @param value the featurevalue + */ + public abstract void setFeature(String name, boolean value) + throws ParserConfigurationException, SAXNotRecognizedException, + SAXNotSupportedException; + + /** + * Returns the specified feature for SAX2 parsers obtained from this + * factory. + * @param name the feature name + */ + public abstract boolean getFeature(String name) + throws ParserConfigurationException, SAXNotRecognizedException, + SAXNotSupportedException; + + // -- JAXP 1.3 methods -- + + /** + * Returns the schema. + * @since 1.3 + * @see #setSchema + */ + public Schema getSchema() + { + return schema; + } + + /** + * Sets the schema. + * @since 1.3 + * @see #getSchema + */ + public void setSchema(Schema schema) + { + this.schema = schema; + } + + /** + * Indicates whether parsers obtained from this factory will be XInclude + * aware. + * @since 1.3 + */ + public boolean isXIncludeAware() + { + return xIncludeAware; + } + + /** + * Sets whether parsers obtained from this factory will be XInclude aware. + * @since 1.3 + */ + public void setXIncludeAware(boolean state) + { + xIncludeAware = state; + } + +} diff --git a/libjava/classpath/javax/xml/parsers/package.html b/libjava/classpath/javax/xml/parsers/package.html new file mode 100644 index 000000000..71739b92c --- /dev/null +++ b/libjava/classpath/javax/xml/parsers/package.html @@ -0,0 +1,16 @@ +<html><head>javax.xml.parsers</head><body> + +<p>Bootstrapping APIs for JAXP parsers. +This is the first portable API defined for bootstrapping DOM. + +<p>JAXP parsers bootstrap in two stages. +First is getting a factory, and configuring it. +Second is asking that factory for a parser. + +<p>The SAX bootstrapping support corresponds to functionality +found in the <em>org.xml.sax.helpers</em> package, except +that it uses the JAXP two stage bootstrap paradigm and +that the parser that's bootstrapped is normally wrapping +a SAX parser rather than exposing it for direct use. + +</body></html> diff --git a/libjava/classpath/javax/xml/stream/EventFilter.java b/libjava/classpath/javax/xml/stream/EventFilter.java new file mode 100644 index 000000000..eed54f8a9 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/EventFilter.java @@ -0,0 +1,53 @@ +/* EventFilter.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +import javax.xml.stream.events.XMLEvent; + +/** + * Simple filter interface for XML events. + */ +public interface EventFilter +{ + + /** + * Indicates whether this filter can accept the specified event. + */ + boolean accept(XMLEvent event); + +} diff --git a/libjava/classpath/javax/xml/stream/FactoryConfigurationError.java b/libjava/classpath/javax/xml/stream/FactoryConfigurationError.java new file mode 100644 index 000000000..104b160cd --- /dev/null +++ b/libjava/classpath/javax/xml/stream/FactoryConfigurationError.java @@ -0,0 +1,85 @@ +/* FactoryConfigurationError.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +/** + * Error indicating that a factory could not be configured. + */ +public class FactoryConfigurationError + extends Error +{ + + private final Exception exception; + + public FactoryConfigurationError() + { + this((String) null, (Exception) null); + } + + public FactoryConfigurationError(Exception e) + { + this(e, null); + } + + public FactoryConfigurationError(Exception e, String msg) + { + super(msg); + exception = e; + } + + public FactoryConfigurationError(String msg, Exception e) + { + this(e, msg); + } + + public FactoryConfigurationError(String msg) + { + this(null, msg); + } + + public Exception getException() + { + return exception; + } + + public String getMessage() + { + return super.getMessage(); + } + +} diff --git a/libjava/classpath/javax/xml/stream/Location.java b/libjava/classpath/javax/xml/stream/Location.java new file mode 100644 index 000000000..6e3483a5c --- /dev/null +++ b/libjava/classpath/javax/xml/stream/Location.java @@ -0,0 +1,75 @@ +/* Location.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +/** + * Information about the location of an XML event within the underlying + * stream. + */ +public interface Location +{ + + /** + * Returns the line number at which the current event ends, + * or -1 if this is not available. + */ + int getLineNumber(); + + /** + * Returns the column number at which the current event ends, + * or -1 if this is not available. + */ + int getColumnNumber(); + + /** + * Returns the offset from the start of the source, in bytes or characters + * depending on the nature of the source, or -1 if this is not available. + */ + int getCharacterOffset(); + + /** + * Returns the public identifier for this location, if any. + */ + String getPublicId(); + + /** + * Returns the system identifier for the underlying source. + */ + String getSystemId(); + +} diff --git a/libjava/classpath/javax/xml/stream/StreamFilter.java b/libjava/classpath/javax/xml/stream/StreamFilter.java new file mode 100644 index 000000000..a0ff2c8f3 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/StreamFilter.java @@ -0,0 +1,52 @@ +/* StreamFilter.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +/** + * Simple filter interface for XMLStreamReaders. + */ +public interface StreamFilter +{ + + /** + * Indicates whether the current state of the specified reader in part of + * this stream. + */ + boolean accept(XMLStreamReader reader); + +} diff --git a/libjava/classpath/javax/xml/stream/XMLEventFactory.java b/libjava/classpath/javax/xml/stream/XMLEventFactory.java new file mode 100644 index 000000000..fc2d493d5 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLEventFactory.java @@ -0,0 +1,352 @@ +/* XMLEventFactory.java -- + Copyright (C) 2005,2006,2009 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.util.Iterator; +import java.util.Properties; +import javax.xml.namespace.NamespaceContext; +import javax.xml.namespace.QName; +import javax.xml.stream.events.Attribute; +import javax.xml.stream.events.Characters; +import javax.xml.stream.events.Comment; +import javax.xml.stream.events.DTD; +import javax.xml.stream.events.EndDocument; +import javax.xml.stream.events.EndElement; +import javax.xml.stream.events.EntityDeclaration; +import javax.xml.stream.events.EntityReference; +import javax.xml.stream.events.Namespace; +import javax.xml.stream.events.ProcessingInstruction; +import javax.xml.stream.events.StartDocument; +import javax.xml.stream.events.StartElement; + +/** + * Factory for XML events. + */ +public abstract class XMLEventFactory +{ + + protected XMLEventFactory() + { + } + + /** + * Create a new factory instance. + * @see #newInstance(String,ClassLoader) + */ + public static XMLEventFactory newInstance() + throws FactoryConfigurationError + { + return newInstance(null, null); + } + + /** + * Create a new factory instance. + * The implementation class to load is the first found in the following + * locations: + * <ol> + * <li>the <code>javax.xml.stream.XMLEventFactory</code> system + * property</li> + * <li>the above named property value in the + * <code><i>$JAVA_HOME</i>/lib/stax.properties</code> file</li> + * <li>the class name specified in the + * <code>META-INF/services/javax.xml.stream.XMLEventFactory</code> + * system resource</li> + * <li>the default factory class</li> + * </ol> + * @param factoryId name of the factory to find, same as a property name + * @param classLoader the class loader to use + * @return the factory implementation + * @exception FactoryConfigurationError if an instance of this factory + * cannot be loaded + */ + public static XMLEventFactory newInstance(String factoryId, + ClassLoader classLoader) + throws FactoryConfigurationError + { + ClassLoader loader = classLoader; + if (loader == null) + { + loader = Thread.currentThread().getContextClassLoader(); + } + if (loader == null) + { + loader = XMLEventFactory.class.getClassLoader(); + } + String className = null; + int count = 0; + do + { + className = getFactoryClassName(loader, count++); + if (className != null) + { + try + { + Class<?> t = (loader != null) ? loader.loadClass(className) : + Class.forName(className); + return (XMLEventFactory) t.newInstance(); + } + catch (ClassNotFoundException e) + { + className = null; + } + catch (Exception e) + { + throw new FactoryConfigurationError(e, + "error instantiating class " + className); + } + } + } + while (className == null && count < 3); + return new gnu.xml.stream.XMLEventFactoryImpl(); + } + + private static String getFactoryClassName(ClassLoader loader, int attempt) + { + final String propertyName = "javax.xml.stream.XMLEventFactory"; + switch (attempt) + { + case 0: + return System.getProperty(propertyName); + case 1: + try + { + File file = new File(System.getProperty("java.home")); + file = new File(file, "lib"); + file = new File(file, "stax.properties"); + InputStream in = new FileInputStream(file); + Properties props = new Properties(); + props.load(in); + in.close(); + return props.getProperty(propertyName); + } + catch (IOException e) + { + return null; + } + case 2: + try + { + String serviceKey = "/META-INF/services/" + propertyName; + InputStream in = (loader != null) ? + loader.getResourceAsStream(serviceKey) : + XMLEventFactory.class.getResourceAsStream(serviceKey); + if (in != null) + { + BufferedReader r = + new BufferedReader(new InputStreamReader(in)); + String ret = r.readLine(); + r.close(); + return ret; + } + } + catch (IOException e) + { + } + return null; + default: + return null; + } + } + + /** + * Sets the location for each event created by this factory. + */ + public abstract void setLocation(Location location); + + /** + * Create an attribute event. + */ + public abstract Attribute createAttribute(String prefix, String namespaceURI, + String localName, String value); + + /** + * Create an attribute event. + */ + public abstract Attribute createAttribute(String localName, String value); + + /** + * Create an attribute event. + */ + public abstract Attribute createAttribute(QName name, String value); + + /** + * Create a namespace declaration event. + */ + public abstract Namespace createNamespace(String namespaceURI); + + /** + * Create a namespace declaration event. + */ + public abstract Namespace createNamespace(String prefix, String namespaceUri); + + /** + * Create a start-element event. + */ + @SuppressWarnings("unchecked") + public abstract StartElement createStartElement(QName name, + Iterator attributes, + Iterator namespaces); + + /** + * Create a start-element event. + */ + public abstract StartElement createStartElement(String prefix, + String namespaceUri, + String localName); + + /** + * Create a start-element event. + */ + @SuppressWarnings("unchecked") + public abstract StartElement createStartElement(String prefix, + String namespaceUri, + String localName, + Iterator attributes, + Iterator namespaces); + + /** + * Create a start-element event. + */ + @SuppressWarnings("unchecked") + public abstract StartElement createStartElement(String prefix, + String namespaceUri, + String localName, + Iterator attributes, + Iterator namespaces, + NamespaceContext context); + + /** + * Create an end-element event. + */ + @SuppressWarnings("unchecked") + public abstract EndElement createEndElement(QName name, + Iterator namespaces); + + /** + * Create an end-element event. + */ + public abstract EndElement createEndElement(String prefix, + String namespaceUri, + String localName); + + /** + * Create an end-element event. + */ + @SuppressWarnings("unchecked") + public abstract EndElement createEndElement(String prefix, + String namespaceUri, + String localName, + Iterator namespaces); + + /** + * Create a text event. + */ + public abstract Characters createCharacters(String content); + + /** + * Create a text event of type CDATA section. + */ + public abstract Characters createCData(String content); + + /** + * Create a text event of type whitespace. + */ + public abstract Characters createSpace(String content); + + /** + * Create a text event of type ignorable whitespace. + */ + public abstract Characters createIgnorableSpace(String content); + + /** + * Create a start-document event. + */ + public abstract StartDocument createStartDocument(); + + /** + * Create a start-document event. + */ + public abstract StartDocument createStartDocument(String encoding, + String version, + boolean standalone); + + /** + * Create a start-document event. + */ + public abstract StartDocument createStartDocument(String encoding, + String version); + + /** + * Create a start-document event. + */ + public abstract StartDocument createStartDocument(String encoding); + + /** + * Create an end-document event. + */ + public abstract EndDocument createEndDocument(); + + /** + * Create an entity reference event. + */ + public abstract EntityReference createEntityReference(String name, + EntityDeclaration declaration); + + /** + * Create a comment event. + */ + public abstract Comment createComment(String text); + + /** + * Create a processing instruction event. + */ + public abstract ProcessingInstruction createProcessingInstruction(String target, + String data); + + /** + * Create a DOCTYPE declaration event. + */ + public abstract DTD createDTD(String dtd); + +} diff --git a/libjava/classpath/javax/xml/stream/XMLEventReader.java b/libjava/classpath/javax/xml/stream/XMLEventReader.java new file mode 100644 index 000000000..d5c76b6b1 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLEventReader.java @@ -0,0 +1,102 @@ +/* XMLEventReader.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +import java.util.Iterator; +import javax.xml.stream.events.XMLEvent; + +/** + * An XML parser. + */ +@SuppressWarnings("unchecked") +public interface XMLEventReader + extends Iterator +{ + + /** + * Returns the next XML event. + */ + XMLEvent nextEvent() + throws XMLStreamException; + + /** + * Indicates whether there are more XML events to be read. + */ + boolean hasNext(); + + /** + * Looks at the next XML event without advancing the cursor in the stream. + * Returns <code>null</code> if there are no more events to read. + */ + XMLEvent peek() + throws XMLStreamException; + + /** + * Reads the text context of an element. + * When invoked, the current event must be START_ELEMENT. + * On completion, the current event will be END_ELEMENT. + */ + String getElementText() + throws XMLStreamException; + + /** + * Returns the next element event. + * This method skips insignificant space until a START_ELEMENT or + * END_ELEMENT event is found. + * @exception XMLStreamException if an event that was not an insignificant + * space event was encountered + */ + XMLEvent nextTag() + throws XMLStreamException; + + /** + * Returns the implementation-specific feature or property of the given + * name. + * @exception IllegalArgumentException if the property is not supported + */ + Object getProperty(String name) + throws IllegalArgumentException; + + /** + * Free any resources associated with this parser. + * This method will not close the underlying input source. + */ + void close() + throws XMLStreamException; + +} diff --git a/libjava/classpath/javax/xml/stream/XMLEventWriter.java b/libjava/classpath/javax/xml/stream/XMLEventWriter.java new file mode 100644 index 000000000..5eb18760a --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLEventWriter.java @@ -0,0 +1,108 @@ +/* XMLEventWriter.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +import javax.xml.namespace.NamespaceContext; +import javax.xml.stream.events.XMLEvent; +import javax.xml.stream.util.XMLEventConsumer; + +/** + * Interface for writing XML documents from a series of events. + */ +public interface XMLEventWriter + extends XMLEventConsumer +{ + + /** + * Ensures that any cached events are written to the underlying output + * sink. + */ + void flush() + throws XMLStreamException; + + /** + * Frees any resources used by this writer. + */ + void close() + throws XMLStreamException; + + /** + * Adds the specified event to this writer. + */ + void add(XMLEvent event) + throws XMLStreamException; + + /** + * Adds the specified XML stream to this writer. + * The implementation will call <code>next</code> on the given argument + * while <code>hasNext</code> returns true. + */ + void add(XMLEventReader reader) + throws XMLStreamException; + + /** + * Returns the namespace prefix the specified URI is currently associated + * with. + */ + String getPrefix(String uri) + throws XMLStreamException; + + /** + * Associates the given namespace prefix and URI. + */ + void setPrefix(String prefix, String uri) + throws XMLStreamException; + + /** + * Sets the current default namespace URI. + */ + void setDefaultNamespace(String uri) + throws XMLStreamException; + + /** + * Sets the namespace context for managing namespace prefixes and URIs. + */ + void setNamespaceContext(NamespaceContext context) + throws XMLStreamException; + + /** + * Returns the namespace context. + */ + NamespaceContext getNamespaceContext(); + +} diff --git a/libjava/classpath/javax/xml/stream/XMLInputFactory.java b/libjava/classpath/javax/xml/stream/XMLInputFactory.java new file mode 100644 index 000000000..39ba8e3b4 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLInputFactory.java @@ -0,0 +1,451 @@ +/* XMLInputFactory.java -- + Copyright (C) 2005,2006,2009 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.io.Reader; +import java.util.Properties; +import javax.xml.stream.util.XMLEventAllocator; +import javax.xml.transform.Source; + +/** + * Factory for creating stream and event readers from various kinds of input + * source. + * <h3>Parameters</h3> + * <table> + * <tr> + * <th>Name</th> + * <th>Description</th> + * <th>Type</th> + * <th>Default</th> + * <th>Required</th> + * </tr> + * <tr> + * <td>javax.xml.stream.isValidating</td> + * <td>Controls DTD validation</td> + * <td>Boolean</td> + * <td>Boolean.FALSE</td> + * <td>no</td> + * </tr> + * <tr> + * <td>javax.xml.stream.isNamespaceAware</td> + * <td>Controls namespace processing for XML 1.0</td> + * <td>Boolean</td> + * <td>Boolean.TRUE</td> + * <td>true is required, false is optional</td> + * </tr> + * <tr> + * <td>javax.xml.stream.isCoalescing</td> + * <td>Controls coalescing (normalization of adjacent character data)</td> + * <td>Boolean</td> + * <td>Boolean.FALSE</td> + * <td>yes</td> + * </tr> + * <tr> + * <td>javax.xml.stream.isReplacingEntityReferences</td> + * <td>Controls replacement of entity references with their replacement + * text</td> + * <td>Boolean</td> + * <td>Boolean.TRUE</td> + * <td>yes</td> + * </tr> + * <tr> + * <td>javax.xml.stream.isSupportingExternalEntities</td> + * <td>Controls whether to resolve external entities</td> + * <td>Boolean</td> + * <td>not specified</td> + * <td>yes</td> + * </tr> + * <tr> + * <td>javax.xml.stream.supportDTD</td> + * <td>Controls whether to support DTDs</td> + * <td>Boolean</td> + * <td>Boolean.TRUE</td> + * <td>yes</td> + * </tr> + * <tr> + * <td>javax.xml.stream.reporter</td> + * <td></td> + * <td>javax.xml.stream.XMLReporter</td> + * <td></td> + * <td>yes</td> + * </tr> + * <tr> + * <td>javax.xml.stream.resolver</td> + * <td></td> + * <td>javax.xml.stream.XMLResolver</td> + * <td></td> + * <td>yes</td> + * </tr> + * <tr> + * <td>javax.xml.stream.allocator</td> + * <td></td> + * <td>javax.xml.stream.util.XMLEventAllocator</td> + * <td></td> + * <td>yes</td> + * </tr> + * </table> + */ +public abstract class XMLInputFactory +{ + + /** + * Property used to control namespace support. + */ + public static final String IS_NAMESPACE_AWARE = + "javax.xml.stream.isNamespaceAware"; + + /** + * Property used to control DTD validation. + */ + public static final String IS_VALIDATING = "javax.xml.stream.isValidating"; + + /** + * Property used to control whether to coalesce adjacent text events. + */ + public static final String IS_COALESCING = "javax.xml.stream.isCoalescing"; + + /** + * Property used to control whether to replace entity references with + * their replacement text. + */ + public static final String IS_REPLACING_ENTITY_REFERENCES = + "javax.xml.stream.isReplacingEntityReferences"; + + /** + * Property used to control whether to resolve external entities. + */ + public static final String IS_SUPPORTING_EXTERNAL_ENTITIES = + "javax.xml.stream.isSupportingExternalEntities"; + + /** + * Property used to indicate whether to support DTDs. + */ + public static final String SUPPORT_DTD = "javax.xml.stream.supportDTD"; + + /** + * Property used to control the error reporter implementation. + */ + public static final String REPORTER = "javax.xml.stream.reporter"; + + /** + * Property used to control the entity resolver implementation. + */ + public static final String RESOLVER = "javax.xml.stream.resolver"; + + /** + * Property used to control the event allocator implementation. + */ + public static final String ALLOCATOR = "javax.xml.stream.allocator"; + + protected XMLInputFactory() + { + } + + /** + * Creates a new factory instance. + * @see #newInstance(String,ClassLoader) + */ + public static XMLInputFactory newInstance() + throws FactoryConfigurationError + { + return newInstance(null, null); + } + + /** + * Creates a new factory instance. + * The implementation class to load is the first found in the following + * locations: + * <ol> + * <li>the <code>javax.xml.stream.XMLInputFactory</code> system + * property</li> + * <li>the above named property value in the + * <code><i>$JAVA_HOME</i>/lib/stax.properties</code> file</li> + * <li>the class name specified in the + * <code>META-INF/services/javax.xml.stream.XMLInputFactory</code> + * system resource</li> + * <li>the default factory class</li> + * </ol> + * @param factoryId name of the factory, same as a property name + * @param classLoader the class loader to use + * @return the factory implementation + * @exception FactoryConfigurationError if an instance of this factory + * cannot be loaded + */ + public static XMLInputFactory newInstance(String factoryId, + ClassLoader classLoader) + throws FactoryConfigurationError + { + ClassLoader loader = classLoader; + if (loader == null) + { + loader = Thread.currentThread().getContextClassLoader(); + } + if (loader == null) + { + loader = XMLInputFactory.class.getClassLoader(); + } + String className = null; + int count = 0; + do + { + className = getFactoryClassName(loader, count++); + if (className != null) + { + try + { + Class<?> t = (loader != null) ? loader.loadClass(className) : + Class.forName(className); + return (XMLInputFactory) t.newInstance(); + } + catch (ClassNotFoundException e) + { + className = null; + } + catch (Exception e) + { + throw new FactoryConfigurationError(e, + "error instantiating class " + className); + } + } + } + while (className == null && count < 3); + return new gnu.xml.stream.XMLInputFactoryImpl(); + } + + private static String getFactoryClassName(ClassLoader loader, int attempt) + { + final String propertyName = "javax.xml.stream.XMLInputFactory"; + switch (attempt) + { + case 0: + return System.getProperty(propertyName); + case 1: + try + { + File file = new File(System.getProperty("java.home")); + file = new File(file, "lib"); + file = new File(file, "stax.properties"); + InputStream in = new FileInputStream(file); + Properties props = new Properties(); + props.load(in); + in.close(); + return props.getProperty(propertyName); + } + catch (IOException e) + { + return null; + } + case 2: + try + { + String serviceKey = "/META-INF/services/" + propertyName; + InputStream in = (loader != null) ? + loader.getResourceAsStream(serviceKey) : + XMLInputFactory.class.getResourceAsStream(serviceKey); + if (in != null) + { + BufferedReader r = + new BufferedReader(new InputStreamReader(in)); + String ret = r.readLine(); + r.close(); + return ret; + } + } + catch (IOException e) + { + } + return null; + default: + return null; + } + } + + /** + * Creates a new stream reader. + */ + public abstract XMLStreamReader createXMLStreamReader(Reader reader) + throws XMLStreamException; + + /** + * Creates a new stream reader. + */ + public abstract XMLStreamReader createXMLStreamReader(Source source) + throws XMLStreamException; + + /** + * Creates a new stream reader. + */ + public abstract XMLStreamReader createXMLStreamReader(InputStream stream) + throws XMLStreamException; + + /** + * Creates a new stream reader. + */ + public abstract XMLStreamReader createXMLStreamReader(InputStream stream, + String encoding) + throws XMLStreamException; + + /** + * Creates a new stream reader. + */ + public abstract XMLStreamReader createXMLStreamReader(String systemId, + InputStream stream) + throws XMLStreamException; + + /** + * Creates a new stream reader. + */ + public abstract XMLStreamReader createXMLStreamReader(String systemId, + Reader reader) + throws XMLStreamException; + + /** + * Creates a new event reader. + */ + public abstract XMLEventReader createXMLEventReader(Reader reader) + throws XMLStreamException; + + /** + * Creates a new event reader. + */ + public abstract XMLEventReader createXMLEventReader(String systemId, + Reader reader) + throws XMLStreamException; + + /** + * Creates a new event reader. + */ + public abstract XMLEventReader createXMLEventReader(XMLStreamReader reader) + throws XMLStreamException; + + /** + * Creates a new event reader. + */ + public abstract XMLEventReader createXMLEventReader(Source source) + throws XMLStreamException; + + /** + * Creates a new event reader. + */ + public abstract XMLEventReader createXMLEventReader(InputStream stream) + throws XMLStreamException; + + /** + * Creates a new event reader. + */ + public abstract XMLEventReader createXMLEventReader(InputStream stream, + String encoding) + throws XMLStreamException; + + /** + * Creates a new event reader. + */ + public abstract XMLEventReader createXMLEventReader(String systemId, + InputStream stream) + throws XMLStreamException; + + /** + * Create a new filtered reader. + */ + public abstract XMLStreamReader createFilteredReader(XMLStreamReader reader, + StreamFilter filter) + throws XMLStreamException; + + /** + * Create a new filtered reader. + */ + public abstract XMLEventReader createFilteredReader(XMLEventReader reader, + EventFilter filter) + throws XMLStreamException; + + /** + * Returns the entity resolver. + */ + public abstract XMLResolver getXMLResolver(); + + /** + * Sets the entity resolver. + */ + public abstract void setXMLResolver(XMLResolver resolver); + + /** + * Returns the error reporter. + */ + public abstract XMLReporter getXMLReporter(); + + /** + * Sets the error reporter. + */ + public abstract void setXMLReporter(XMLReporter reporter); + + /** + * Sets the implementation-specific property of the given name. + * @exception IllegalArgumentException if the property is not supported + */ + public abstract void setProperty(String name, Object value) + throws IllegalArgumentException; + + /** + * Returns the implementation-specific property of the given name. + * @exception IllegalArgumentException if the property is not supported + */ + public abstract Object getProperty(String name) + throws IllegalArgumentException; + + /** + * Indicates whether the specified property is supported. + */ + public abstract boolean isPropertySupported(String name); + + /** + * Sets the event allocator. + */ + public abstract void setEventAllocator(XMLEventAllocator allocator); + + /** + * Returns the event allocator. + */ + public abstract XMLEventAllocator getEventAllocator(); + +} diff --git a/libjava/classpath/javax/xml/stream/XMLOutputFactory.java b/libjava/classpath/javax/xml/stream/XMLOutputFactory.java new file mode 100644 index 000000000..a8579aa31 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLOutputFactory.java @@ -0,0 +1,279 @@ +/* XMLOutputFactory.java -- + Copyright (C) 2005,2006,2009 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.io.OutputStream; +import java.io.Writer; +import java.util.Properties; +import javax.xml.transform.Result; + +/** + * Factory for obtaining XML stream and event writers for various kinds of + * output sink. + * <h3>Configuration</h3> + * <table> + * <tr> + * <th>Name</th> + * <th>Description</th> + * <th>Type</th> + * <th>Default</th> + * <th>Required</th> + * </tr> + * <tr> + * <td>javax.xml.stream.isRepairingNamespaces</td> + * <td>default namespace prefixes</td> + * <td>Boolean</td> + * <td>Boolean.FALSE</td> + * <td>yes</td> + * </tr> + * </table> + */ +public abstract class XMLOutputFactory +{ + + /** + * Property used to control whether to default namespace prefixes. + * If true, the writer will create a namespace declaration for any + * attribute that doesn't have a namespace declaration in scope. + */ + public static final java.lang.String IS_REPAIRING_NAMESPACES = + "javax.xml.stream.isRepairingNamespaces"; + + protected XMLOutputFactory() + { + } + + /** + * Creates a new <b>output</b> factory. + * @see #newInstance(String,ClassLoader) + */ + public static XMLOutputFactory newInstance() + throws FactoryConfigurationError + { + return newInstance(null, null); + } + + /** + * Creates a new <b>output</b> factory. + * The implementation class to load is the first found in the following + * locations: + * <ol> + * <li>the <code>javax.xml.stream.XMLOutputFactory</code> system + * property</li> + * <li>the above named property value in the + * <code><i>$JAVA_HOME</i>/lib/stax.properties</code> file</li> + * <li>the class name specified in the + * <code>META-INF/services/javax.xml.stream.XMLOutputFactory</code> + * system resource</li> + * <li>the default factory class</li> + * </ol> + * @param factoryId the name of the factory, same as the property + * @param classLoader the class loader to use + * @return a new factory instance + * @exception FactoryConfigurationError if an instance of this factory + * could not be loaded + */ + public static XMLOutputFactory newInstance(String factoryId, + ClassLoader classLoader) + throws FactoryConfigurationError + { + if (classLoader == null) + { + classLoader = Thread.currentThread().getContextClassLoader(); + } + if (classLoader == null) + { + classLoader = XMLOutputFactory.class.getClassLoader(); + } + String className = null; + int count = 0; + do + { + className = getFactoryClassName(classLoader, count++); + if (className != null) + { + try + { + Class<?> t = (classLoader != null) ? + classLoader.loadClass(className) : + Class.forName(className); + return (XMLOutputFactory) t.newInstance(); + } + catch (ClassNotFoundException e) + { + className = null; + } + catch (Exception e) + { + throw new FactoryConfigurationError(e, + "error instantiating class " + className); + } + } + } + while (className == null && count < 3); + return new gnu.xml.stream.XMLOutputFactoryImpl(); + } + + private static String getFactoryClassName(ClassLoader loader, int attempt) + { + final String propertyName = "javax.xml.stream.XMLOutputFactory"; + switch (attempt) + { + case 0: + return System.getProperty(propertyName); + case 1: + try + { + File file = new File(System.getProperty("java.home")); + file = new File(file, "lib"); + file = new File(file, "stax.properties"); + InputStream in = new FileInputStream(file); + Properties props = new Properties(); + props.load(in); + in.close(); + return props.getProperty(propertyName); + } + catch (IOException e) + { + return null; + } + case 2: + try + { + String serviceKey = "/META-INF/services/" + propertyName; + InputStream in = (loader != null) ? + loader.getResourceAsStream(serviceKey) : + XMLOutputFactory.class.getResourceAsStream(serviceKey); + if (in != null) + { + BufferedReader r = + new BufferedReader(new InputStreamReader(in)); + String ret = r.readLine(); + r.close(); + return ret; + } + } + catch (IOException e) + { + } + return null; + default: + return null; + } + } + + /** + * Creates a new stream writer. + */ + public abstract XMLStreamWriter createXMLStreamWriter(Writer stream) + throws XMLStreamException; + + /** + * Creates a new stream writer. + */ + public abstract XMLStreamWriter createXMLStreamWriter(OutputStream stream) + throws XMLStreamException; + + /** + * Creates a new stream writer. + */ + public abstract XMLStreamWriter createXMLStreamWriter(OutputStream stream, + String encoding) + throws XMLStreamException; + + /** + * Creates a new stream writer. + * @exception UnsupportedOperationException if this method is not + * supported + */ + public abstract XMLStreamWriter createXMLStreamWriter(Result result) + throws XMLStreamException; + + /** + * Creates a new event writer. + * @exception UnsupportedOperationException if this method is not + * supported + */ + public abstract XMLEventWriter createXMLEventWriter(Result result) + throws XMLStreamException; + + /** + * Creates a new event writer. + */ + public abstract XMLEventWriter createXMLEventWriter(OutputStream stream) + throws XMLStreamException; + + /** + * Creates a new event writer. + */ + public abstract XMLEventWriter createXMLEventWriter(OutputStream stream, + String encoding) + throws XMLStreamException; + + /** + * Creates a new event writer. + */ + public abstract XMLEventWriter createXMLEventWriter(Writer stream) + throws XMLStreamException; + + /** + * Sets the implementation-specific property of the given name. + * @exception IllegalArgumentException if the property is not supported + */ + public abstract void setProperty(String name, Object value) + throws IllegalArgumentException; + + /** + * Returns the implementation-specific property of the given name. + * @exception IllegalArgumentException if the property is not supported + */ + public abstract Object getProperty(String name) + throws IllegalArgumentException; + + /** + * Indicates whether the specified property is supported. + */ + public abstract boolean isPropertySupported(String name); + +} diff --git a/libjava/classpath/javax/xml/stream/XMLReporter.java b/libjava/classpath/javax/xml/stream/XMLReporter.java new file mode 100644 index 000000000..389437542 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLReporter.java @@ -0,0 +1,57 @@ +/* XMLReporter.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +/** + * Interface used to report non-fatal errors during parsing. + */ +public interface XMLReporter +{ + + /** + * Reports an error. + * @param message the error message + * @param errorType an implementation-specific error type + * @param relatedInformation additional information, if any + * @param location the error location, if available + */ + void report(String message, String errorType, + Object relatedInformation, Location location) + throws XMLStreamException; + +} diff --git a/libjava/classpath/javax/xml/stream/XMLResolver.java b/libjava/classpath/javax/xml/stream/XMLResolver.java new file mode 100644 index 000000000..e537bb74c --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLResolver.java @@ -0,0 +1,65 @@ +/* XMLResolver.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +/** + * Interface used to resolve XML external entities during parsing. + */ +public interface XMLResolver +{ + + /** + * Returns an input source from which the specified external entity can be + * read. The following return types are possible: + * <ol> + * <li><code>java.io.InputStream</code></li> + * <li><code>javax.xml.stream.XMLStreamReader</code></li> + * <li><code>java.xml.stream.XMLEventReader</code></li> + * </ol> + * If <code>null</code> is returned, the processor will attempt to resolve + * the entity itself. + * @param publicID the public ID of the external entity + * @param systemID the system ID of the external entity + * @param baseURI the absolute base URI of the referring entity + * @param namespace the namespace of the external entity + */ + Object resolveEntity(String publicID, String systemID, + String baseURI, String namespace) + throws XMLStreamException; + +} diff --git a/libjava/classpath/javax/xml/stream/XMLStreamConstants.java b/libjava/classpath/javax/xml/stream/XMLStreamConstants.java new file mode 100644 index 000000000..60541344e --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLStreamConstants.java @@ -0,0 +1,121 @@ +/* XMLStreamConstants.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +/** + * STaX constants. + */ +public interface XMLStreamConstants +{ + + /** + * A start element event. + */ + static final int START_ELEMENT = 1; + + /** + * An end element event. + */ + static final int END_ELEMENT = 2; + + /** + * A processing instruction event. + */ + static final int PROCESSING_INSTRUCTION = 3; + + /** + * A text event. + */ + static final int CHARACTERS = 4; + + /** + * A comment event. + */ + static final int COMMENT = 5; + + /** + * An ignorable whitespace event. + */ + static final int SPACE = 6; + + /** + * A start document event. + */ + static final int START_DOCUMENT = 7; + + /** + * An end document event. + */ + static final int END_DOCUMENT = 8; + + /** + * An entity reference event. + */ + static final int ENTITY_REFERENCE = 9; + + /** + * An attribute event. + */ + static final int ATTRIBUTE = 10; + + /** + * A DOCTYPE declaration event. + */ + static final int DTD = 11; + + /** + * A CDATA section event. + */ + static final int CDATA = 12; + + /** + * A namespace event. + */ + static final int NAMESPACE = 13; + + /** + * A notation declaration event. + */ + static final int NOTATION_DECLARATION = 14; + + /** + * An entity declaration event. + */ + static final int ENTITY_DECLARATION = 15; + +} diff --git a/libjava/classpath/javax/xml/stream/XMLStreamException.java b/libjava/classpath/javax/xml/stream/XMLStreamException.java new file mode 100644 index 000000000..929afbb75 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLStreamException.java @@ -0,0 +1,98 @@ +/* XMLStreamException.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +/** + * Exception indicating an XML stream processing error. + */ +public class XMLStreamException + extends Exception +{ + + protected Location location; + protected Throwable nested; + + public XMLStreamException() + { + this(null, null, null); + } + + public XMLStreamException(String msg) + { + this(msg, null, null); + } + + public XMLStreamException(Throwable th) + { + this(null, null, th); + } + + public XMLStreamException(String msg, Throwable th) + { + this(msg, null, th); + } + + public XMLStreamException(String msg, Location location, Throwable th) + { + super(msg); + this.location = location; + nested = th; + } + + public XMLStreamException(String msg, Location location) + { + this(msg, location, null); + } + + /** + * Returns the nested exception. + */ + public Throwable getNestedException() + { + return nested; + } + + /** + * Returns the location of the exception. + */ + public Location getLocation() + { + return location; + } + +} diff --git a/libjava/classpath/javax/xml/stream/XMLStreamReader.java b/libjava/classpath/javax/xml/stream/XMLStreamReader.java new file mode 100644 index 000000000..10bc4a5a5 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLStreamReader.java @@ -0,0 +1,300 @@ +/* XMLStreamReader.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +import javax.xml.namespace.NamespaceContext; +import javax.xml.namespace.QName; + +/** + * Interface implemented by an XML parser. + */ +public interface XMLStreamReader + extends XMLStreamConstants +{ + + /** + * Returns the implementation-specific feature or property of the given + * name. + */ + Object getProperty(String name) + throws IllegalArgumentException; + + /** + * Returns the next parsing event. + */ + int next() + throws XMLStreamException; + + /** + * Tests whether the current event is of the given type and namespace. + * @exception XMLStreamException if the test fails + */ + void require(int type, String namespaceURI, String localName) + throws XMLStreamException; + + /** + * Returns the text content of a text-only element. + * When invoked, the current event must be START_ELEMENT. + * On completion, the current event will be END_ELEMENT. + */ + String getElementText() + throws XMLStreamException; + + /** + * Skips any ignorable whitespace, comments, and processing instructions + * until a START_ELEMENT or END_ELEMENT event is encountered. + * @exception XMLStreamException if an event of any other type is + * encountered + */ + int nextTag() + throws XMLStreamException; + + /** + * Indicates whether there are any remaining events to be read. + */ + boolean hasNext() + throws XMLStreamException; + + /** + * Frees any resources used by this parser. + * This method will not close the underlying input source. + */ + void close() + throws XMLStreamException; + + /** + * Returns the namespace URI for the given prefix. + */ + String getNamespaceURI(String prefix); + + /** + * Indicates whether the current event is START_ELEMENT. + */ + boolean isStartElement(); + + /** + * Indicates whether the current event is END_ELEMENT. + */ + boolean isEndElement(); + + /** + * Indicates whether the current event is character data. + */ + boolean isCharacters(); + + /** + * Indicates whether the current event is ignorable whitespace. + */ + boolean isWhiteSpace(); + + /** + * Returns the normalized attribute value for the given attribute. + */ + String getAttributeValue(String namespaceURI, String localName); + + /** + * Returns the number of attributes on this element. + * This method can only be invoked on a START_ELEMENT event. + */ + int getAttributeCount(); + + /** + * Returns the QName of the attribute at the given index. + */ + QName getAttributeName(int index); + + /** + * Returns the namespace URI of the attribute at the given index. + */ + String getAttributeNamespace(int index); + + /** + * Returns the local-name of the attribute at the given index. + */ + String getAttributeLocalName(int index); + + /** + * Returns the namespace prefix of the attribute at the given index. + */ + String getAttributePrefix(int index); + + /** + * Returns the type of the attribute at the specified index. + */ + String getAttributeType(int index); + + /** + * Returns the normalized value of the attribute at the given index. + */ + String getAttributeValue(int index); + + /** + * Indicates whether the attribute at the given index was specified in the + * underlying XML source or created by default. + */ + boolean isAttributeSpecified(int index); + + /** + * Returns the number of namespaces declared on this event. + * This method is only valid on a START_ELEMENT, END_ELEMENT, or NAMESPACE + * event. + */ + int getNamespaceCount(); + + /** + * Returns the prefix of the namespace at the given index, or null if this + * is the default namespace declaration. + */ + String getNamespacePrefix(int index); + + /** + * Returns the URI of the namespace at the given index. + */ + String getNamespaceURI(int index); + + /** + * Returns the namespace context for the current position. + */ + NamespaceContext getNamespaceContext(); + + /** + * Returns the type of the current event. + */ + int getEventType(); + + /** + * Returns the string value of the current event. + */ + String getText(); + + /** + * Returns the string value of the current event as a character array. + */ + char[] getTextCharacters(); + + /** + * Copies the string value of the current event into the specified + * character array. + */ + int getTextCharacters(int sourceStart, char[] target, + int targetStart, int length) + throws XMLStreamException; + + /** + * Returns the offset of the first character in the text character array. + */ + int getTextStart(); + + /** + * Returns the length of the characters in the text character array. + */ + int getTextLength(); + + /** + * Returns the input encoding. + */ + String getEncoding(); + + /** + * Indicates whether the current event has text. + */ + boolean hasText(); + + /** + * Returns the current location of the parser cursor in the underlying + * input source. + */ + Location getLocation(); + + /** + * Returns the QName of the current element. + * This method is only valid on a START_ELEMENT or END_ELEMENT event. + */ + QName getName(); + + /** + * Returns the local-name of the current element. + */ + String getLocalName(); + + /** + * Indicates whether the current event has a name. + */ + boolean hasName(); + + /** + * Returns the namespace URI of the current element. + */ + String getNamespaceURI(); + + /** + * Returns the namespace prefix of the current element. + */ + String getPrefix(); + + /** + * Returns the XML version declared in the XML declaration. + */ + String getVersion(); + + /** + * Returns the standalone flag declared in the XML declaration. + */ + boolean isStandalone(); + + /** + * Indicates whether the standalone flag was set in the document. + */ + boolean standaloneSet(); + + /** + * Returns the encoding declared in the XML declaration. + */ + String getCharacterEncodingScheme(); + + /** + * Returns the target of the current processing instruction event. + */ + String getPITarget(); + + /** + * Returns the data of the current processing instruction event. + */ + String getPIData(); + +} diff --git a/libjava/classpath/javax/xml/stream/XMLStreamWriter.java b/libjava/classpath/javax/xml/stream/XMLStreamWriter.java new file mode 100644 index 000000000..d7d739660 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/XMLStreamWriter.java @@ -0,0 +1,243 @@ +/* XMLStreamWriter.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream; + +import javax.xml.namespace.NamespaceContext; + +/** + * Interface for writing XML to a stream. + */ +public interface XMLStreamWriter +{ + + /** + * Write the start of a tag. + */ + void writeStartElement(String localName) + throws XMLStreamException; + + /** + * Write the start of a tag. + */ + void writeStartElement(String namespaceURI, String localName) + throws XMLStreamException; + + /** + * Write the start of a tag. + */ + void writeStartElement(String prefix, String localName, String namespaceURI) + throws XMLStreamException; + + /** + * Write an empty tag. + */ + void writeEmptyElement(String namespaceURI, String localName) + throws XMLStreamException; + + /** + * Write an empty tag. + */ + void writeEmptyElement(String prefix, String localName, String namespaceURI) + throws XMLStreamException; + + /** + * Write an empty tag. + */ + void writeEmptyElement(String localName) + throws XMLStreamException; + + /** + * Closes the currently open tag. + */ + void writeEndElement() + throws XMLStreamException; + + /** + * Closes any currently open tags. + */ + void writeEndDocument() + throws XMLStreamException; + + /** + * Frees any resources used by this writer. + * This will not close the underlying output sink. + */ + void close() + throws XMLStreamException; + + /** + * Flushes any cached information to the underlying output sink. + */ + void flush() + throws XMLStreamException; + + /** + * Write an attribute. + */ + void writeAttribute(String localName, String value) + throws XMLStreamException; + + /** + * Write an attribute. + */ + void writeAttribute(String prefix, String namespaceURI, + String localName, String value) + throws XMLStreamException; + + /** + * Write an attribute. + */ + void writeAttribute(String namespaceURI, String localName, String value) + throws XMLStreamException; + + /** + * Write a namespace declaration. + */ + void writeNamespace(String prefix, String namespaceURI) + throws XMLStreamException; + + /** + * Write a default namespace declaration. + */ + void writeDefaultNamespace(String namespaceURI) + throws XMLStreamException; + + /** + * Write a comment. + */ + void writeComment(String data) + throws XMLStreamException; + + /** + * Write a processing instruction. + */ + void writeProcessingInstruction(String target) + throws XMLStreamException; + + /** + * Write a processing instruction. + */ + void writeProcessingInstruction(String target, String data) + throws XMLStreamException; + + /** + * Write a CDATA section. + */ + void writeCData(String data) + throws XMLStreamException; + + /** + * Write a DOCTYPE declaration. + */ + void writeDTD(String dtd) + throws XMLStreamException; + + /** + * Write an entity reference. + */ + void writeEntityRef(String name) + throws XMLStreamException; + + /** + * Write an XML declaration. + */ + void writeStartDocument() + throws XMLStreamException; + + /** + * Write an XML declaration with the specified XML version. + */ + void writeStartDocument(String version) + throws XMLStreamException; + + /** + * Write an XML declaration with the specifed XML version and encoding. + */ + void writeStartDocument(String encoding, String version) + throws XMLStreamException; + + /** + * Write the specified text. + */ + void writeCharacters(String text) + throws XMLStreamException; + + /** + * Write the specified text. + */ + void writeCharacters(char[] text, int start, int len) + throws XMLStreamException; + + /** + * Returns the prefix associated with the given namespace URI. + */ + String getPrefix(String uri) + throws XMLStreamException; + + /** + * Sets the prefix for the given namespace URI. + */ + void setPrefix(String prefix, String uri) + throws XMLStreamException; + + /** + * Sets the URI for the default namespace. + */ + void setDefaultNamespace(String uri) + throws XMLStreamException; + + /** + * Sets the namespace context for namespace resolution. + */ + void setNamespaceContext(NamespaceContext context) + throws XMLStreamException; + + /** + * Returns the current namespace context. + */ + NamespaceContext getNamespaceContext(); + + /** + * Returns the implementation-specific feature or property of the given + * name. + * @exception IllegalArgumentException if the property is not supported + */ + Object getProperty(String name) + throws IllegalArgumentException; + +} diff --git a/libjava/classpath/javax/xml/stream/events/Attribute.java b/libjava/classpath/javax/xml/stream/events/Attribute.java new file mode 100644 index 000000000..1824a9c02 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/Attribute.java @@ -0,0 +1,70 @@ +/* Attribute.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +import javax.xml.namespace.QName; + +/** + * An attribute event. + */ +public interface Attribute + extends XMLEvent +{ + + /** + * Returns the name of this attribute. + */ + QName getName(); + + /** + * Returns the normalized value of this attribute. + */ + String getValue(); + + /** + * Returns the type of this attribute. + */ + String getDTDType(); + + /** + * Indicates whether this attribute was specified in the input source, or + * just defaulted by the DTD. + */ + boolean isSpecified(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/Characters.java b/libjava/classpath/javax/xml/stream/events/Characters.java new file mode 100644 index 000000000..d82009247 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/Characters.java @@ -0,0 +1,67 @@ +/* Characters.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +/** + * A character data (text) event. + */ +public interface Characters + extends XMLEvent +{ + + /** + * Returns the character data assocated with this event. + */ + String getData(); + + /** + * Indicates whether this text is all whitespace. + */ + boolean isWhiteSpace(); + + /** + * Indicates whether this is a CDATA section. + */ + boolean isCData(); + + /** + * Indicates whether this text is all ignorable whitespace. + */ + boolean isIgnorableWhiteSpace(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/Comment.java b/libjava/classpath/javax/xml/stream/events/Comment.java new file mode 100644 index 000000000..4419e58f2 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/Comment.java @@ -0,0 +1,52 @@ +/* Comment.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +/** + * A comment event. + */ +public interface Comment + extends XMLEvent +{ + + /** + * Returns the comment text. + */ + String getText(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/DTD.java b/libjava/classpath/javax/xml/stream/events/DTD.java new file mode 100644 index 000000000..b1a906919 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/DTD.java @@ -0,0 +1,72 @@ +/* DTD.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +import java.util.List; + +/** + * A DOCTYPE declaration event. + */ +public interface DTD + extends XMLEvent +{ + + /** + * Returns the body of the DTD, including the internal DTD subset. + */ + String getDocumentTypeDeclaration(); + + /** + * Returns an implementation-specific representation of the DTD, or null + * if no such representation is available. + */ + Object getProcessedDTD(); + + /** + * Returns the notations declared in the DTD. + */ + @SuppressWarnings("unchecked") + List getNotations(); + + /** + * Returns the entities declared in the DTD. + */ + @SuppressWarnings("unchecked") + List getEntities(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/EndDocument.java b/libjava/classpath/javax/xml/stream/events/EndDocument.java new file mode 100644 index 000000000..fd7e3fa4f --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/EndDocument.java @@ -0,0 +1,46 @@ +/* EndDocument.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +/** + * An end-document event. + */ +public interface EndDocument + extends XMLEvent +{ +} diff --git a/libjava/classpath/javax/xml/stream/events/EndElement.java b/libjava/classpath/javax/xml/stream/events/EndElement.java new file mode 100644 index 000000000..a6b5c3fa2 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/EndElement.java @@ -0,0 +1,61 @@ +/* EndElement.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +import java.util.Iterator; +import javax.xml.namespace.QName; + +/** + * An end-element event. + */ +public interface EndElement + extends XMLEvent +{ + + /** + * Returns the element name. + */ + QName getName(); + + /** + * Returns the namespaces that have gone out of scope. + */ + @SuppressWarnings("unchecked") + Iterator getNamespaces(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/EntityDeclaration.java b/libjava/classpath/javax/xml/stream/events/EntityDeclaration.java new file mode 100644 index 000000000..61fa177f9 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/EntityDeclaration.java @@ -0,0 +1,77 @@ +/* EntityDeclaration.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +/** + * An entity declaration event. + */ +public interface EntityDeclaration + extends XMLEvent +{ + + /** + * Returns the public identifier of the entity. + */ + String getPublicId(); + + /** + * Returns the system identifier of the entity. + */ + String getSystemId(); + + /** + * Returns the name of the entity. + */ + String getName(); + + /** + * Returns the name of the associated notation. + */ + String getNotationName(); + + /** + * Returns the replacement text for the entity. + */ + String getReplacementText(); + + /** + * Returns the base URI for the entity. + */ + String getBaseURI(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/EntityReference.java b/libjava/classpath/javax/xml/stream/events/EntityReference.java new file mode 100644 index 000000000..27bcb040f --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/EntityReference.java @@ -0,0 +1,57 @@ +/* EntityReference.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +/** + * An entity reference event. + */ +public interface EntityReference + extends XMLEvent +{ + + /** + * Returns the declaration of this reference. + */ + EntityDeclaration getDeclaration(); + + /** + * Returns the entity name. + */ + String getName(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/Namespace.java b/libjava/classpath/javax/xml/stream/events/Namespace.java new file mode 100644 index 000000000..05de86c96 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/Namespace.java @@ -0,0 +1,62 @@ +/* Namespace.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +/** + * A namespace declaration event. + */ +public interface Namespace + extends Attribute +{ + + /** + * Returns the namespace prefix, if any. + */ + String getPrefix(); + + /** + * Returns the namespace URI. + */ + String getNamespaceURI(); + + /** + * Indicates whether this event declares the default namespace. + */ + boolean isDefaultNamespaceDeclaration(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/NotationDeclaration.java b/libjava/classpath/javax/xml/stream/events/NotationDeclaration.java new file mode 100644 index 000000000..708beb5f5 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/NotationDeclaration.java @@ -0,0 +1,62 @@ +/* NotationDeclaration.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +/** + * A notation declaration event. + */ +public interface NotationDeclaration + extends XMLEvent +{ + + /** + * Returns the name of the notation. + */ + String getName(); + + /** + * Returns the public identifier of the notation. + */ + String getPublicId(); + + /** + * Returns the system identifier of the notation. + */ + String getSystemId(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/ProcessingInstruction.java b/libjava/classpath/javax/xml/stream/events/ProcessingInstruction.java new file mode 100644 index 000000000..340202300 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/ProcessingInstruction.java @@ -0,0 +1,57 @@ +/* ProcessingInstruction.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +/** + * A processing instruction event. + */ +public interface ProcessingInstruction + extends XMLEvent +{ + + /** + * Returns the processing instruction target. + */ + String getTarget(); + + /** + * Returns the processing instruction data. + */ + String getData(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/StartDocument.java b/libjava/classpath/javax/xml/stream/events/StartDocument.java new file mode 100644 index 000000000..7a5434624 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/StartDocument.java @@ -0,0 +1,79 @@ +/* StartDocument.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +/** + * A start-document event. + */ +public interface StartDocument + extends XMLEvent +{ + + /** + * Returns the system identifier of the document entity. + */ + String getSystemId(); + + /** + * Returns the character encoding of the document. + */ + String getCharacterEncodingScheme(); + + /** + * Indicates whether the character encoding was set in the XML + * declaration. + */ + boolean encodingSet(); + + /** + * Indicates whether the document is standalone. + */ + boolean isStandalone(); + + /** + * Indicates whether the standalone parameter was set in the XML + * declaration. + */ + boolean standaloneSet(); + + /** + * Returns the XML version of the document. + */ + String getVersion(); + +} diff --git a/libjava/classpath/javax/xml/stream/events/StartElement.java b/libjava/classpath/javax/xml/stream/events/StartElement.java new file mode 100644 index 000000000..359b57eef --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/StartElement.java @@ -0,0 +1,83 @@ +/* StartElement.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +import java.util.Iterator; +import javax.xml.namespace.NamespaceContext; +import javax.xml.namespace.QName; + +/** + * A start-element event. + */ +public interface StartElement + extends XMLEvent +{ + + /** + * Returns the element name. + */ + QName getName(); + + /** + * Returns the attributes declared on this element. + */ + @SuppressWarnings("unchecked") + Iterator getAttributes(); + + /** + * Returns the namespaces declared on this element. + */ + @SuppressWarnings("unchecked") + Iterator getNamespaces(); + + /** + * Returns an attribute by name. + */ + Attribute getAttributeByName(QName name); + + /** + * Returns a read-only namespace context associated with this event. + */ + NamespaceContext getNamespaceContext(); + + /** + * Returns the namespace URI associated with the given prefix. + */ + String getNamespaceURI(String prefix); + +} diff --git a/libjava/classpath/javax/xml/stream/events/XMLEvent.java b/libjava/classpath/javax/xml/stream/events/XMLEvent.java new file mode 100644 index 000000000..90f354667 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/events/XMLEvent.java @@ -0,0 +1,135 @@ +/* XMLEvent.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.events; + +import java.io.Writer; +import javax.xml.namespace.QName; +import javax.xml.stream.Location; +import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamException; + +/** + * An XML stream event. + */ +public interface XMLEvent + extends XMLStreamConstants +{ + + /** + * Returns the type of this event. + */ + int getEventType(); + + /** + * Returns the location of this event. + */ + Location getLocation(); + + /** + * Indicates whether this event is a start-element event. + */ + boolean isStartElement(); + + /** + * Indicates whether this event is an attribute event. + */ + boolean isAttribute(); + + /** + * Indicates whether this event is a namespace declaration event. + */ + boolean isNamespace(); + + /** + * Indicates whether this event is an end-element event. + */ + boolean isEndElement(); + + /** + * Indicates whether this event is an entity reference event. + */ + boolean isEntityReference(); + + /** + * Indicates whether this event is a processing instruction event. + */ + boolean isProcessingInstruction(); + + /** + * Indicates whether this event is a text event. + */ + boolean isCharacters(); + + /** + * Indicates whether this event is a start-document event. + */ + boolean isStartDocument(); + + /** + * Indicates whether this event is an end-document event. + */ + boolean isEndDocument(); + + /** + * Returns this event as a start-element event. + */ + StartElement asStartElement(); + + /** + * Returns this event as an end-element event. + */ + EndElement asEndElement(); + + /** + * Returns this event as a text event. + */ + Characters asCharacters(); + + /** + * Returns schema-related type information about this event, or null if + * not available. + */ + QName getSchemaType(); + + /** + * Writes this event to the specified writer. + */ + void writeAsEncodedUnicode(Writer writer) + throws XMLStreamException; + +} diff --git a/libjava/classpath/javax/xml/stream/util/EventReaderDelegate.java b/libjava/classpath/javax/xml/stream/util/EventReaderDelegate.java new file mode 100644 index 000000000..2c04c09de --- /dev/null +++ b/libjava/classpath/javax/xml/stream/util/EventReaderDelegate.java @@ -0,0 +1,151 @@ +/* EventReaderDelegate.java -- + Copyright (C) 2005,2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.util; + +import java.util.NoSuchElementException; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLEventReader; +import javax.xml.stream.events.XMLEvent; + +/** + * Base class for event reader filters. + */ +public class EventReaderDelegate + implements XMLEventReader +{ + + private XMLEventReader parent; + + /** + * Constructs an empty filter with no parent set. + */ + public EventReaderDelegate() + { + } + + /** + * Constructs an empty filter with the given parent. + */ + public EventReaderDelegate(XMLEventReader reader) + { + parent = reader; + } + + /** + * Sets the parent. + */ + public void setParent(XMLEventReader reader) + { + parent = reader; + } + + /** + * Returns the parent. + */ + public XMLEventReader getParent() + { + return parent; + } + + public XMLEvent nextEvent() + throws XMLStreamException + { + if (parent != null) + return parent.nextEvent(); + throw new NoSuchElementException(); + } + + public Object next() + { + if (parent != null) + return parent.next(); + throw new NoSuchElementException(); + } + + public boolean hasNext() + { + if (parent != null) + return parent.hasNext(); + return false; + } + + public XMLEvent peek() + throws XMLStreamException + { + if (parent != null) + return parent.peek(); + return null; + } + + public String getElementText() + throws XMLStreamException + { + if (parent != null) + return parent.getElementText(); + throw new XMLStreamException(); + } + + public XMLEvent nextTag() + throws XMLStreamException + { + if (parent != null) + return parent.nextTag(); + throw new XMLStreamException(); + } + + public Object getProperty(String name) + throws IllegalArgumentException + { + if (parent != null) + return parent.getProperty(name); + throw new IllegalArgumentException(name); + } + + public void close() + throws XMLStreamException + { + if (parent != null) + parent.close(); + } + + public void remove() + { + throw new UnsupportedOperationException(); + } + +} diff --git a/libjava/classpath/javax/xml/stream/util/StreamReaderDelegate.java b/libjava/classpath/javax/xml/stream/util/StreamReaderDelegate.java new file mode 100644 index 000000000..75a7ca597 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/util/StreamReaderDelegate.java @@ -0,0 +1,408 @@ +/* StreamReaderDelegate.java -- + Copyright (C) 2005,2006,2009 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.util; + +import javax.xml.namespace.NamespaceContext; +import javax.xml.namespace.QName; +import javax.xml.stream.Location; +import javax.xml.stream.XMLStreamConstants; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.XMLStreamReader; + +/** + * Base class for XML stream reader filters. + */ +public class StreamReaderDelegate + implements XMLStreamReader, XMLStreamConstants +{ + + private XMLStreamReader parent; + + /** + * Constructs an empty filter with no parent set. + */ + public StreamReaderDelegate() + { + } + + /** + * Constructs an empty filter with the specfied parent. + */ + public StreamReaderDelegate(XMLStreamReader reader) + { + parent = reader; + } + + /** + * Sets the parent. + */ + public void setParent(XMLStreamReader reader) + { + parent = reader; + } + + /** + * Returns the parent. + */ + public XMLStreamReader getParent() + { + return parent; + } + + public int next() + throws XMLStreamException + { + if (parent != null) + return parent.next(); + throw new XMLStreamException(); + } + + public int nextTag() + throws XMLStreamException + { + if (parent != null) + return parent.nextTag(); + throw new XMLStreamException(); + } + + public String getElementText() + throws XMLStreamException + { + if (parent != null) + return parent.getElementText(); + throw new XMLStreamException(); + } + + public void require(int type, String namespaceURI, String localName) + throws XMLStreamException + { + if (parent != null) + parent.require(type, namespaceURI, localName); + } + + public boolean hasNext() + throws XMLStreamException + { + if (parent != null) + return parent.hasNext(); + return false; + } + + public void close() + throws XMLStreamException + { + if (parent != null) + parent.close(); + } + + public String getNamespaceURI(String prefix) + { + if (parent != null) + return parent.getNamespaceURI(prefix); + return null; + } + + public NamespaceContext getNamespaceContext() + { + if (parent != null) + return parent.getNamespaceContext(); + return null; + } + + public boolean isStartElement() + { + if (parent != null) + return parent.isStartElement(); + return false; + } + + public boolean isEndElement() + { + if (parent != null) + return parent.isEndElement(); + return false; + } + + public boolean isCharacters() + { + if (parent != null) + return parent.isCharacters(); + return false; + } + + public boolean isWhiteSpace() + { + if (parent != null) + return parent.isWhiteSpace(); + return false; + } + + public String getAttributeValue(String namespaceUri, String localName) + { + if (parent != null) + return parent.getAttributeValue(namespaceUri, localName); + return null; + } + + public int getAttributeCount() + { + if (parent != null) + return parent.getAttributeCount(); + return 0; + } + + public QName getAttributeName(int index) + { + if (parent != null) + return parent.getAttributeName(index); + return null; + } + + public String getAttributePrefix(int index) + { + if (parent != null) + return parent.getAttributePrefix(index); + return null; + } + + public String getAttributeNamespace(int index) + { + if (parent != null) + return parent.getAttributeNamespace(index); + return null; + } + + public String getAttributeLocalName(int index) + { + if (parent != null) + return parent.getAttributeLocalName(index); + return null; + } + + public String getAttributeType(int index) + { + if (parent != null) + return parent.getAttributeType(index); + return null; + } + + public String getAttributeValue(int index) + { + if (parent != null) + return parent.getAttributeValue(index); + return null; + } + + public boolean isAttributeSpecified(int index) + { + if (parent != null) + return parent.isAttributeSpecified(index); + return false; + } + + public int getNamespaceCount() + { + if (parent != null) + return parent.getNamespaceCount(); + return 0; + } + + public String getNamespacePrefix(int index) + { + if (parent != null) + return parent.getNamespacePrefix(index); + return null; + } + + public String getNamespaceURI(int index) + { + if (parent != null) + return parent.getNamespaceURI(index); + return null; + } + + public int getEventType() + { + if (parent != null) + return parent.getEventType(); + return 0; + } + + public String getText() + { + if (parent != null) + return parent.getText(); + return null; + } + + public int getTextCharacters(int sourceStart, char[] target, + int targetStart, int length) + throws XMLStreamException + { + if (parent != null) + return parent.getTextCharacters(sourceStart, target, targetStart, length); + return 0; + } + + public char[] getTextCharacters() + { + if (parent != null) + return parent.getTextCharacters(); + return null; + } + + public int getTextStart() + { + if (parent != null) + return parent.getTextStart(); + return 0; + } + + public int getTextLength() + { + if (parent != null) + return parent.getTextLength(); + return 0; + } + + public String getEncoding() + { + if (parent != null) + return parent.getEncoding(); + return null; + } + + public boolean hasText() + { + if (parent != null) + return parent.hasText(); + return false; + } + + public Location getLocation() + { + if (parent != null) + return parent.getLocation(); + return null; + } + + public QName getName() + { + if (parent != null) + return parent.getName(); + return null; + } + + public String getLocalName() + { + if (parent != null) + return parent.getLocalName(); + return null; + } + + public boolean hasName() + { + if (parent != null) + return parent.hasName(); + return false; + } + + public String getNamespaceURI() + { + if (parent != null) + return parent.getNamespaceURI(); + return null; + } + + public String getPrefix() + { + if (parent != null) + return parent.getPrefix(); + return null; + } + + public String getVersion() + { + if (parent != null) + return parent.getVersion(); + return null; + } + + public boolean isStandalone() + { + if (parent != null) + return parent.isStandalone(); + return false; + } + + public boolean standaloneSet() + { + if (parent != null) + return parent.standaloneSet(); + return false; + } + + public String getCharacterEncodingScheme() + { + if (parent != null) + return parent.getCharacterEncodingScheme(); + return null; + } + + public String getPITarget() + { + if (parent != null) + return parent.getPITarget(); + return null; + } + + public String getPIData() + { + if (parent != null) + return parent.getPIData(); + return null; + } + + public Object getProperty(String name) + { + if (parent != null) + return parent.getProperty(name); + throw new IllegalArgumentException(); + } + +} diff --git a/libjava/classpath/javax/xml/stream/util/XMLEventAllocator.java b/libjava/classpath/javax/xml/stream/util/XMLEventAllocator.java new file mode 100644 index 000000000..b8a7ddab8 --- /dev/null +++ b/libjava/classpath/javax/xml/stream/util/XMLEventAllocator.java @@ -0,0 +1,68 @@ +/* XMLEventAllocator.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.util; + +import javax.xml.stream.XMLStreamReader; +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.XMLEvent; + +/** + * Interface for allocating events according to a stream reader. + */ +public interface XMLEventAllocator +{ + + /** + * Creates a new allocator. + */ + XMLEventAllocator newInstance(); + + /** + * Allocates an event based on the current state of the stream reader. + */ + XMLEvent allocate(XMLStreamReader reader) + throws XMLStreamException; + + /** + * Allocates one or more events based on the current state of the stream + * reader and adds those events to the specified consumer. + */ + void allocate(XMLStreamReader reader, XMLEventConsumer consumer) + throws XMLStreamException; + +} diff --git a/libjava/classpath/javax/xml/stream/util/XMLEventConsumer.java b/libjava/classpath/javax/xml/stream/util/XMLEventConsumer.java new file mode 100644 index 000000000..3a825f9de --- /dev/null +++ b/libjava/classpath/javax/xml/stream/util/XMLEventConsumer.java @@ -0,0 +1,55 @@ +/* XMLEventConsumer.java -- + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.stream.util; + +import javax.xml.stream.XMLStreamException; +import javax.xml.stream.events.XMLEvent; + +/** + * Interface for consuming XML events. + */ +public interface XMLEventConsumer +{ + + /** + * Consumes an event. + */ + void add(XMLEvent event) + throws XMLStreamException; + +} diff --git a/libjava/classpath/javax/xml/transform/ErrorListener.java b/libjava/classpath/javax/xml/transform/ErrorListener.java new file mode 100644 index 000000000..ac236642a --- /dev/null +++ b/libjava/classpath/javax/xml/transform/ErrorListener.java @@ -0,0 +1,66 @@ +/* ErrorListener.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ +package javax.xml.transform; + +/** + * Error reporting callback handler. + * Equivalent to the SAX ErrorHandler. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public interface ErrorListener +{ + + /** + * Reports a warning condition. + */ + public void warning(TransformerException exception) + throws TransformerException; + + /** + * Reports a recoverable error. + */ + public void error(TransformerException exception) + throws TransformerException; + + /** + * Reports a fatal error. + */ + public void fatalError(TransformerException exception) + throws TransformerException; + +} diff --git a/libjava/classpath/javax/xml/transform/OutputKeys.java b/libjava/classpath/javax/xml/transform/OutputKeys.java new file mode 100644 index 000000000..09cf96cb9 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/OutputKeys.java @@ -0,0 +1,103 @@ +/* OutputKeys.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform; + +/** + * Constants for XSLT output attributes. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class OutputKeys +{ + + /** + * The output method (xml, html, or text). + */ + public static final String METHOD = "method"; + + /** + * The version of the output method. + */ + public static final String VERSION = "version"; + + /** + * The preferred output character encoding. + */ + public static final String ENCODING = "encoding"; + + /** + * Whether not to output an XML declaration (yes or no). + */ + public static final String OMIT_XML_DECLARATION = "omit-xml-declaration"; + + /** + * Whether to output a standalone document declaration (yes or no). + */ + public static final String STANDALONE = "standalone"; + + /** + * The public ID to output in the doctype declaration. + */ + public static final String DOCTYPE_PUBLIC = "doctype-public"; + + /** + * The system ID to output in the doctype declaration. + */ + public static final String DOCTYPE_SYSTEM = "doctype-system"; + + /** + * Whitespace-separated list of element names for which text children + * should be output as CDATA sections. + */ + public static final String CDATA_SECTION_ELEMENTS = "cdata-section-elements"; + + /** + * Whether to indent the result tree (yes or no). + */ + public static final String INDENT = "indent"; + + /** + * The MIME content type of the output data. + */ + public static final String MEDIA_TYPE = "media-type"; + + private OutputKeys() + { + } + +} diff --git a/libjava/classpath/javax/xml/transform/Result.java b/libjava/classpath/javax/xml/transform/Result.java new file mode 100644 index 000000000..8f4d6c714 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/Result.java @@ -0,0 +1,72 @@ +/* Result.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ +package javax.xml.transform; + +/** + * The result of an XSL transformation. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public interface Result +{ + + /** + * Constant for the processing instruction sent when the result disables + * output escaping. + */ + public static final String PI_DISABLE_OUTPUT_ESCAPING = + "javax.xml.transform.disable-output-escaping"; + + /** + * Constant for the processing instruction sent when the result enables + * output escaping. + */ + public static final String PI_ENABLE_OUTPUT_ESCAPING = + "javax.xml.transform.enable-output-escaping"; + + /** + * Sets the XML system ID for this result. + * @param systemId the system ID URI + */ + public void setSystemId(String systemId); + + /** + * Returns the system ID for this result. + */ + public String getSystemId(); + +} diff --git a/libjava/classpath/javax/xml/transform/Source.java b/libjava/classpath/javax/xml/transform/Source.java new file mode 100644 index 000000000..f109dcc35 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/Source.java @@ -0,0 +1,60 @@ +/* Source.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ +package javax.xml.transform; + +/** + * An XML input source. + * This is equivalent to a SAX InputSource. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public interface Source +{ + + /** + * Sets the XML system ID for this source. + * This can be used to resolve external entities in the source. + * @param systemId the system ID URI + */ + public void setSystemId(String systemId); + + /** + * Returns the system ID for this source. + */ + public String getSystemId(); + +} diff --git a/libjava/classpath/javax/xml/transform/SourceLocator.java b/libjava/classpath/javax/xml/transform/SourceLocator.java new file mode 100644 index 000000000..190a3b165 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/SourceLocator.java @@ -0,0 +1,70 @@ +/* SourceLocator.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ +package javax.xml.transform; + +/** + * The location in an XML resource at which an event occurred. + * Tis is equivalent to the SAX Locator. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public interface SourceLocator +{ + + /** + * Returns the XML public ID for the document. + */ + public String getPublicId(); + + /** + * Returns the XML system ID for the document. + */ + public String getSystemId(); + + /** + * Returns the line number at which the event occurred. + * @return the line number, or -1 if not available + */ + public int getLineNumber(); + + /** + * Returns the column number at which the event occurred. + * @return the column number, or -1 if not available + */ + public int getColumnNumber(); + +} diff --git a/libjava/classpath/javax/xml/transform/Templates.java b/libjava/classpath/javax/xml/transform/Templates.java new file mode 100644 index 000000000..34d953327 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/Templates.java @@ -0,0 +1,67 @@ +/* Templates.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform; + +import java.util.Properties; + +/** + * A compiled, reusable XSL transformation. + * Implementations of this class are guaranteed to be thread safe. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public interface Templates +{ + + /** + * Creates a new transformer based on this transformation. + */ + public Transformer newTransformer() + throws TransformerConfigurationException; + + /** + * Returns the static properties for the <code>xsl:output</code> + * instruction. Missing properties are defaulted according the + * <a href='http://www.w3.org/TR/xslt#output'>XSLT Recommendation, section + * 16</a>: <code>getProperty(String)</code> returns all properties + * including defaulted ones, and <code>get(Object)</code> returns only the + * properties explicitly set in the stylesheet. + */ + public Properties getOutputProperties(); + +} diff --git a/libjava/classpath/javax/xml/transform/Transformer.java b/libjava/classpath/javax/xml/transform/Transformer.java new file mode 100644 index 000000000..316675b41 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/Transformer.java @@ -0,0 +1,164 @@ +/* Transformer.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform; + +import java.util.Properties; + +/** + * An XSL transformation. + * Instances of this class may be reused, but the same instance may not be + * used concurrently by different threads. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public abstract class Transformer +{ + + protected Transformer() + { + } + + /** + * Transforms the source XML to a result tree. + * @param xmlSource the XML source + * @param outputTarget the result of the transformation + */ + public abstract void transform(Source xmlSource, Result outputTarget) + throws TransformerException; + + /** + * Sets a parameter value for the transformation. + * Parameters may be referenced in the XSLT stylesheet. + * @param name the parameter name (an XML Name, or a namespace-prefixed + * XML Name of the form <code>{<i>namespaceURI</i>}<i>localName</i></code> + * @param value the value to assign + */ + public abstract void setParameter(String name, Object value); + + /** + * Returns the specified parameter value. + * @param name the parameter name (an XML Name, or a namespace-prefixed + * XML Name of the form <code>{<i>namespaceURI</i>}<i>localName</i></code> + */ + public abstract Object getParameter(String name); + + /** + * Clears all parameter values. + */ + public abstract void clearParameters(); + + /** + * Sets the callback used to resolve entities referenced by + * <code>xsl:include</code>, <code>xsl:import</code>, or the XPath + * <code>document()</code> function. + */ + public abstract void setURIResolver(URIResolver resolver); + + /** + * Returns the callback used to resolve entities referenced by + * <code>xsl:include</code>, <code>xsl:import</code>, or the XPath + * <code>document()</code> function. + */ + public abstract URIResolver getURIResolver(); + + /** + * Sets the output properties for the transformation, overriding any + * properties defined in the stylesheet. + * The format of property keys is as in the + * {@link #setOutputProperty(java.lang.String,java.lang.String)} method. + * @param oformat a set of output properties, or null to reset all the + * properties to their default values + */ + public abstract void setOutputProperties(Properties oformat) + throws IllegalArgumentException; + + /** + * Returns a copy of the output properties for the transformation. + * Missing properties are defaulted according the + * <a href='http://www.w3.org/TR/xslt#output'>XSLT Recommendation, section + * 16</a>: <code>getProperty(String)</code> returns all properties + * including defaulted ones, and <code>get(Object)</code> returns only the + * properties explicitly set in the stylesheet. + */ + public abstract Properties getOutputProperties(); + + /** + * Sets an output property for the transformation, overriding any property + * of the same name defined in the stylesheet. + * @param name the property name (an XML Name, or a namespace-prefixed + * XML Name of the form <code>{<i>namespaceURI</i>}<i>localName</i></code> + * @param value the string value of the property + * @exception IllegalArgumentException if the property is not supported + */ + public abstract void setOutputProperty(String name, String value) + throws IllegalArgumentException; + + /** + * Returns the value of an output property for the transformation. + * Only explicit properties set programmatically or defined in the + * stylesheet, not defaulted properties, are returned by this method. + * @param name the property name (an XML Name, or a namespace-prefixed + * XML Name of the form <code>{<i>namespaceURI</i>}<i>localName</i></code> + * @exception IllegalArgumentException if the property is not supported + */ + public abstract String getOutputProperty(String name) + throws IllegalArgumentException; + + /** + * Sets the callback used to report errors during the transformation. + * @exception IllegalArgumentException if the listener is null + */ + public abstract void setErrorListener(ErrorListener listener) + throws IllegalArgumentException; + + /** + * Returns the callback used to report errors during the transformation. + */ + public abstract ErrorListener getErrorListener(); + + // -- JAXP 1.3 methods -- + + /** + * Reset this Transformer to its original configuration. + * @since 1.3 + */ + public void reset() + { + } + +} diff --git a/libjava/classpath/javax/xml/transform/TransformerConfigurationException.java b/libjava/classpath/javax/xml/transform/TransformerConfigurationException.java new file mode 100644 index 000000000..3343a8041 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/TransformerConfigurationException.java @@ -0,0 +1,101 @@ +/* TransformerConfigurationException.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform; + +/** + * An exception occurred during configuration of the transformer. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class TransformerConfigurationException + extends TransformerException +{ + private static final long serialVersionUID = 1285547467942875745L; + + /** + * Constructor with no detail message. + */ + public TransformerConfigurationException() + { + this(null, null, null); + } + + /** + * Constructor with a detail message. + */ + public TransformerConfigurationException(String msg) + { + this(msg, null, null); + } + + /** + * Constructor with underlying cause. + */ + public TransformerConfigurationException(Throwable e) + { + this(e.getMessage(), null, e); + } + + /** + * Constructor with detail message and underlyinmg cause. + */ + public TransformerConfigurationException(String msg, Throwable e) + { + this(msg, null, e); + } + + /** + * Constructor with detail message and locator. + */ + public TransformerConfigurationException(String message, + SourceLocator locator) + { + this(message, locator, null); + } + + /** + * Constructor with detail message, locator and underlying cause. + */ + public TransformerConfigurationException(String message, + SourceLocator locator, + Throwable e) + { + super(message, locator, e); + } + +} diff --git a/libjava/classpath/javax/xml/transform/TransformerException.java b/libjava/classpath/javax/xml/transform/TransformerException.java new file mode 100644 index 000000000..ac83e969c --- /dev/null +++ b/libjava/classpath/javax/xml/transform/TransformerException.java @@ -0,0 +1,246 @@ +/* TransformerException.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform; + +import gnu.java.lang.CPStringBuilder; + +import java.io.PrintStream; +import java.io.PrintWriter; + +/** + * An exception occurred during the transformation process. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class TransformerException + extends Exception +{ + private static final long serialVersionUID = 975798773772956428L; + + // Field names fixed by serialization spec. + private SourceLocator locator; + private Throwable containedException; + + /** + * Constructor with a detail message. + */ + public TransformerException(String msg) + { + this(msg, null, null); + } + + /** + * Constructor with an underlying cause. + */ + public TransformerException(Throwable cause) + { + this(cause.getMessage(), null, cause); + } + + /** + * Constructor with a detail message and underlying cause. + */ + public TransformerException(String msg, Throwable cause) + { + this(msg, null, cause); + } + + /** + * Constructor with a detail message and locator. + */ + public TransformerException(String msg, SourceLocator locator) + { + this(msg, locator, null); + } + + /** + * Constructor with detail message, locator and underlying cause. + */ + public TransformerException(String msg, SourceLocator locator, + Throwable cause) + { + super(msg); + this.locator = locator; + if (cause != null) + { + initCause(cause); + this.containedException = cause; + } + } + + /** + * Returns a locator indicating where the error occurred. + */ + public SourceLocator getLocator() + { + return locator; + } + + /** + * Sets the locator indicating where the error occurred. + */ + public void setLocator(SourceLocator location) + { + locator = location; + } + + /** + * Returns the underlying cause of this exception. + */ + public Throwable getException() + { + return containedException; + } + + /** + * Returns the underlying cause of this exception. + */ + public Throwable getCause() + { + return containedException; + } + + /** + * Initializes the root cause of this exception. + * This method may be called only once, and will be called by the + * constructor if a non-null cause is specified. + * Really phenomenally poor API design. + * @param cause the underlying cause + * @exception IllegalArgumentException if this exception is passed as the + * argument + * @exception IllegalStateException if a cause has already been + * initialized + */ + public Throwable initCause(Throwable cause) + { + if (this.containedException != null) + { + throw new IllegalStateException(); + } + if (cause == this) + { + throw new IllegalArgumentException(); + } + this.containedException = cause; + return this; + } + + /** + * Returns the exception message with location information appended. + */ + public String getMessageAndLocation() + { + return (locator == null) ? getMessage() : + getMessage() + ": " + getLocationAsString(); + } + + /** + * Returns the location information as a string. + */ + public String getLocationAsString() + { + if (locator == null) + { + return null; + } + String publicId = locator.getPublicId(); + String systemId = locator.getSystemId(); + int lineNumber = locator.getLineNumber(); + int columnNumber = locator.getColumnNumber(); + CPStringBuilder buffer = new CPStringBuilder (); + if (publicId != null) + { + buffer.append ("publicId="); + buffer.append (publicId); + } + if (systemId != null) + { + if (buffer.length() > 0) + { + buffer.append(' '); + } + buffer.append ("systemId="); + buffer.append (systemId); + } + if (lineNumber != -1) + { + if (buffer.length() > 0) + { + buffer.append(' '); + } + buffer.append ("lineNumber="); + buffer.append (lineNumber); + } + if (columnNumber != -1) + { + if (buffer.length() > 0) + { + buffer.append(' '); + } + buffer.append ("columnNumber="); + buffer.append (columnNumber); + } + return buffer.toString(); + } + + public void printStackTrace() + { + printStackTrace(System.out); + } + + public void printStackTrace(PrintStream s) + { + super.printStackTrace(s); + if (containedException != null) + { + s.print("caused by "); + containedException.printStackTrace(s); + } + } + + public void printStackTrace(PrintWriter s) + { + super.printStackTrace(s); + if (containedException != null) + { + s.print("caused by "); + containedException.printStackTrace(s); + } + } + +} diff --git a/libjava/classpath/javax/xml/transform/TransformerFactory.java b/libjava/classpath/javax/xml/transform/TransformerFactory.java new file mode 100644 index 000000000..0bcc48627 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/TransformerFactory.java @@ -0,0 +1,284 @@ +/* TransformerFactory.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.util.Properties; + +/** + * Factory for obtaining transformation contexts. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public abstract class TransformerFactory +{ + + protected TransformerFactory() + { + } + + /** + * Creates a new factory instance. + * The implementation class to load is the first found in the following + * locations: + * <ol> + * <li>the <code>javax.xml.transform.TransformerFactory</code> system + * property</li> + * <li>the above named property value in the + * <code><i>$JAVA_HOME</i>/lib/jaxp.properties</code> file</li> + * <li>the class name specified in the + * <code>META-INF/services/javax.xml.parsers.DocumentBuilderFactory</code> + * system resource</li> + * <li>the default factory class</li> + * </ol> + */ + public static TransformerFactory newInstance() + throws TransformerFactoryConfigurationError + { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + if (loader == null) + { + loader = TransformerFactory.class.getClassLoader(); + } + String className = null; + int count = 0; + do + { + className = getFactoryClassName(loader, count++); + if (className != null) + { + try + { + Class<?> t = (loader != null) ? loader.loadClass(className) : + Class.forName(className); + return (TransformerFactory) t.newInstance(); + } + catch (ClassNotFoundException e) + { + className = null; + } + catch (Exception e) + { + throw new TransformerFactoryConfigurationError(e, + "error instantiating class " + className); + } + } + } + while (className == null && count < 3); + try + { + Class<?> t = + Class.forName("gnu.xml.transform.TransformerFactoryImpl"); + return (TransformerFactory) t.newInstance(); + } + catch (Exception e) + { + throw new TransformerFactoryConfigurationError(e); + } + } + + private static String getFactoryClassName(ClassLoader loader, int attempt) + { + final String propertyName = "javax.xml.transform.TransformerFactory"; + switch (attempt) + { + case 0: + return System.getProperty(propertyName); + case 1: + try + { + File file = new File(System.getProperty("java.home")); + file = new File(file, "lib"); + file = new File(file, "jaxp.properties"); + InputStream in = new FileInputStream(file); + Properties props = new Properties(); + props.load(in); + in.close(); + return props.getProperty(propertyName); + } + catch (IOException e) + { + return null; + } + case 2: + try + { + String serviceKey = "/META-INF/services/" + propertyName; + InputStream in = (loader != null) ? + loader.getResourceAsStream(serviceKey) : + TransformerFactory.class.getResourceAsStream(serviceKey); + if (in != null) + { + BufferedReader r = + new BufferedReader(new InputStreamReader(in)); + String ret = r.readLine(); + r.close(); + return ret; + } + } + catch (IOException e) + { + } + return null; + default: + return null; + } + } + + /** + * Creates a new transformer using the specified stylesheet. + * @param source the source of an <a href='http://www.w3.org/TR/xslt'>XSLT + * stylesheet</a> specifying the transformation to apply + */ + public abstract Transformer newTransformer(Source source) + throws TransformerConfigurationException; + + /** + * Creates a new transformer that applies the identity transform. + */ + public abstract Transformer newTransformer() + throws TransformerConfigurationException; + + /** + * Creates a new compiled transformation using the specified stylesheet. + * @param source the source of an <a href='http://www.w3.org/TR/xslt'>XSLT + * stylesheet</a> specifying the transformation to apply + */ + public abstract Templates newTemplates(Source source) + throws TransformerConfigurationException; + + /** + * Returns a source object representing the XML resource specified by the + * <a href='http://www.w3.org/TR/xml-stylesheet/'>xml-stylesheet</a> + * processing instruction and matching the given criteria. + * Note that if multiple stylesheets are selected, the source represents a + * stylesheet composed of a list of imports. + * @param source the source XML document + * @param media the media attribute to match, or <code>null</code> to match + * the preferred templates + * @param title the title attribute to match, or <code>null</code> to match + * any + * @param charset the charset attribute to match, or <code>null</code> to + * match any + */ + public abstract Source getAssociatedStylesheet(Source source, + String media, + String title, + String charset) + throws TransformerConfigurationException; + + /** + * Set the resolver callback to be used by transformers obtained from + * this factory. + */ + public abstract void setURIResolver(URIResolver resolver); + + /** + * Returns the resolver callback to be used by transformers obtained from + * this factory. + */ + public abstract URIResolver getURIResolver(); + + /** + * Sets a feature of transformers and templates obtained from this + * factory. + * Feature names are fully qualified URIs, and may depend on the factory + * implementation. + * @param name the name of the feature + * @param value the feature state + * @exception TransformerConfigurationException if the feature is + * unsupported + */ + public abstract void setFeature(String name, boolean value) + throws TransformerConfigurationException; + + /** + * Returns the state of a feature in the factory implementation. + * Feature names are fully qualified URIs, and may depend on the factory + * implementation. JAXP also predefines several features, including the + * constants in {@link javax.xml.XMLConstants} and + * <ul> + * <li>{@link javax.xml.transform.dom.DOMSource#FEATURE}</li> + * <li>{@link javax.xml.transform.dom.DOMResult#FEATURE}</li> + * <li>{@link javax.xml.transform.sax.SAXSource#FEATURE}</li> + * <li>{@link javax.xml.transform.sax.SAXResult#FEATURE}</li> + * <li>{@link javax.xml.transform.sax.SAXTransformerFactory#FEATURE}</li> + * <li>{@link javax.xml.transform.sax.SAXTransformerFactory#FEATURE_XMLFILTER}</li> + * <li>{@link javax.xml.transform.stream.StreamSource#FEATURE}</li> + * <li>{@link javax.xml.transform.stream.StreamResult#FEATURE}</li> + * </ul> + * The latter expose various capabilities of the factory implementation. + */ + public abstract boolean getFeature(String name); + + /** + * Set a named attribute on the underlying implementation. + * @param name the attribute name + * @param value the value to assign + * @exception IllegalArgumentException if the attribute is not supported + */ + public abstract void setAttribute(String name, Object value) + throws IllegalArgumentException; + + /** + * Retrieve the specified named attribute value. + * @param name the attribute name + * @exception IllegalArgumentException if the attribute is not supported + */ + public abstract Object getAttribute(String name) + throws IllegalArgumentException; + + /** + * Sets the callback to be used by transformers obtained from this factory + * to report transformation errors. + */ + public abstract void setErrorListener(ErrorListener listener) + throws IllegalArgumentException; + + /** + * Returns the callback to be used by transformers obtained from this + * factory to report transformation errors. + */ + public abstract ErrorListener getErrorListener(); + +} diff --git a/libjava/classpath/javax/xml/transform/TransformerFactoryConfigurationError.java b/libjava/classpath/javax/xml/transform/TransformerFactoryConfigurationError.java new file mode 100644 index 000000000..45e3d3928 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/TransformerFactoryConfigurationError.java @@ -0,0 +1,106 @@ +/* TransformerFactoryConfigurationError.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ +package javax.xml.transform; + +/** + * An error occurred during configuration of the transformer factory. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class TransformerFactoryConfigurationError + extends Error +{ + private static final long serialVersionUID = -6527718720676281516L; + + // Name is fixed by the serialization spec. + private final Exception exception; + + /** + * Constructor with no detail message. + */ + public TransformerFactoryConfigurationError() + { + this(null, null); + } + + /** + * Constructor with a detail message. + */ + public TransformerFactoryConfigurationError(String msg) + { + this(null, msg); + } + + /** + * Constructor with an underlying cause. + */ + public TransformerFactoryConfigurationError(Exception e) + { + this(e, null); + } + + /** + * Constructor with an underlying cause and detail message. + */ + public TransformerFactoryConfigurationError(Exception e, String msg) + { + super(msg); + exception = e; + } + + /** + * Returns the detail message. + */ + public String getMessage() + { + String message = super.getMessage(); + if (message == null && exception != null) + { + message = exception.getMessage(); + } + return message; + } + + /** + * Returns the underlying cause. + */ + public Exception getException() + { + return exception; + } + +} diff --git a/libjava/classpath/javax/xml/transform/URIResolver.java b/libjava/classpath/javax/xml/transform/URIResolver.java new file mode 100644 index 000000000..e6315bba4 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/URIResolver.java @@ -0,0 +1,58 @@ +/* URIResolver.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ +package javax.xml.transform; + +/** + * Callback that can resolve a URI into source XML for transformation. + * Equivalent to the SAX EntityResolver. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public interface URIResolver +{ + + /** + * Resolves an <code>xsl:include</code>, <code>xsl:import</code>, or + * XPath <code>document()</code> function. + * @param href the URI to resolve (relative or absolute) + * @param base the base URI relative to which the URI is to be resolved + * @return a source, or null if the resource could not be found + */ + public Source resolve(String href, String base) + throws TransformerException; + +} diff --git a/libjava/classpath/javax/xml/transform/dom/DOMLocator.java b/libjava/classpath/javax/xml/transform/dom/DOMLocator.java new file mode 100644 index 000000000..acea08e57 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/dom/DOMLocator.java @@ -0,0 +1,57 @@ +/* DOMLocator.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.dom; + +import javax.xml.transform.SourceLocator; +import org.w3c.dom.Node; + +/** + * Locator for reporting a location in a W3C DOM object graph. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public interface DOMLocator + extends SourceLocator +{ + + /** + * Returns the node on which the event originated. + */ + public Node getOriginatingNode(); + +} diff --git a/libjava/classpath/javax/xml/transform/dom/DOMResult.java b/libjava/classpath/javax/xml/transform/dom/DOMResult.java new file mode 100644 index 000000000..7577f2d98 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/dom/DOMResult.java @@ -0,0 +1,163 @@ +/* DOMResult.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.dom; + +import javax.xml.transform.Result; +import org.w3c.dom.Node; + +/** + * Output result specified as a W3C DOM object graph. + * The result tree may be appended to an existing tree. + * If no target node is specified, the result tree will be made available by + * the {@link #getNode} method after the transformation. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class DOMResult + implements Result +{ + + /** + * Factory feature indicating that DOM results are supported. + */ + public static final String FEATURE = + "http://javax.xml.transform.dom.DOMResult/feature"; + + private Node node; + private Node nextSibling; + private String systemId; + + /** + * Default constructor. + */ + public DOMResult() + { + this(null, null, null); + } + + /** + * Constructor with the node to append to. + */ + public DOMResult(Node node) + { + this(node, null, null); + } + + /** + * Constructor with the node to append to and the child node before which + * the result should be appended. + * @since 1.3 + */ + public DOMResult(Node node, Node nextSibling) + { + this(node, nextSibling, null); + } + + /** + * Constructor with the node to append to and the system ID. + */ + public DOMResult(Node node, String systemID) + { + this(node, null, systemID); + } + + /** + * Constructor with the node to append to, the child node before which + * the result should be appended, and the system ID. + * @since 1.3 + */ + public DOMResult(Node node, Node nextSibling, String systemID) + { + this.node = node; + this.nextSibling = nextSibling; + this.systemId = systemID; + } + + /** + * Sets the node to which the result tree will be appended. + * @param node the node + */ + public void setNode(Node node) + { + this.node = node; + } + + /** + * Returns the node to which the result tree is to be appended, + * or the result tree after transformation if no node was previously set. + */ + public Node getNode() + { + return node; + } + + /** + * Sets the child node before which the result nodes will be inserted. + * @since 1.3 + */ + public void setNextSibling(Node nextSibling) + { + this.nextSibling = nextSibling; + } + + /** + * Returns the child node before which the result nodes will be inserted. + * @since 1.3 + */ + public Node getNextSibling() + { + return nextSibling; + } + + /** + * Sets the system ID used to resolve external entities. + */ + public void setSystemId(String systemId) + { + this.systemId = systemId; + } + + /** + * Returns the system ID used to resolve external entities. + */ + public String getSystemId() + { + return systemId; + } + +} diff --git a/libjava/classpath/javax/xml/transform/dom/DOMSource.java b/libjava/classpath/javax/xml/transform/dom/DOMSource.java new file mode 100644 index 000000000..5922665a0 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/dom/DOMSource.java @@ -0,0 +1,118 @@ +/* DOMSource.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.dom; + +import javax.xml.transform.Source; +import org.w3c.dom.Node; + +/** + * An XML source specified as a W3C DOM node context. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class DOMSource + implements Source +{ + + /** + * Factory feature indicating that DOM sources are supported. + */ + public static final String FEATURE = + "http://javax.xml.transform.dom.DOMSource/feature"; + + private Node node; + private String systemId; + + /** + * Default constructor. + */ + public DOMSource() + { + this(null, null); + } + + /** + * Constructor with a context node. + */ + public DOMSource(Node node) + { + this(node, null); + } + + /** + * Constructor with a context node and system ID. + */ + public DOMSource(Node node, String systemId) + { + this.node = node; + this.systemId = systemId; + } + + /** + * Sets the context node. + */ + public void setNode(Node node) + { + this.node = node; + } + + /** + * Returns the context node. + */ + public Node getNode() + { + return node; + } + + /** + * Sets the base URI to use as the context for resolving entities. + */ + public void setSystemId(String systemId) + { + this.systemId = systemId; + } + + /** + * Returns the base URI to use as the context for resolving entities. + */ + public String getSystemId() + { + return systemId; + } + +} diff --git a/libjava/classpath/javax/xml/transform/dom/package.html b/libjava/classpath/javax/xml/transform/dom/package.html new file mode 100644 index 000000000..0600fc724 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/dom/package.html @@ -0,0 +1,5 @@ +<html><head>trax for dom</head><body> + +<p>Support for DOM inputs and outputs to transformers. + +</body></html> diff --git a/libjava/classpath/javax/xml/transform/package.html b/libjava/classpath/javax/xml/transform/package.html new file mode 100644 index 000000000..bc67c2b80 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/package.html @@ -0,0 +1,38 @@ +<html><head>trax </head><body> + +<p>Base "TRAX" API for XSLT transformers. +This API borrows many structural notions from SAX, +such as the way error handling and external entity +resolution are handled, although it does not reuse +the corresponding SAX classes. +To use XSLT transformers: <ul> + +<li>Start with <em>TransformerFactory.newInstance()</em>; + +<li>Then you may wish to configure that factory through +its features and properties. This includes modifying +the way errors are handled and URIs are resolved. + +<li>Then you have several options for how to perform +the XSLT transformations. One generic option is to ask the +factory for a <a href="Transformer.html">Transformer</a> +and then use <em>Transformer.transform()</em> to pull +input text onto output text. + +<li>Alternatively, most factories support flexible integration +with SAX event streams. You can cast such factories to a +<a href="sax/SAXTransformerFactory.html">SAXTransformerFactory</a> +and perform either push or pull mode transformations. + +</ul> + +<p>The <a href="OutputKeys.html">OutputKeys</a> class +holds constants that can be used to configure output +properties used with <em>Result</em> objects, as if +they were specified in <em>xslt:output</em> attributes +in the stylesheet specifying the transform. + +<p>The <a href="Templates.html">Templates</a> class +accomodates the notion of "compiled" transforms. + +</body></html> diff --git a/libjava/classpath/javax/xml/transform/sax/SAXResult.java b/libjava/classpath/javax/xml/transform/sax/SAXResult.java new file mode 100644 index 000000000..265b9512c --- /dev/null +++ b/libjava/classpath/javax/xml/transform/sax/SAXResult.java @@ -0,0 +1,132 @@ +/* SAXResult.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.sax; + +import javax.xml.transform.Result; +import org.xml.sax.ContentHandler; +import org.xml.sax.ext.LexicalHandler; + +/** + * Specifies SAX handlers to be used as a result sink during a + * transformation. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class SAXResult implements Result +{ + + /** + * Factory feature indicating that SAX results are supported. + */ + public static final String FEATURE = + "http://javax.xml.transform.sax.SAXResult/feature"; + + private ContentHandler handler; + private LexicalHandler lexicalHandler; + private String systemId; + + /** + * Default constructor. + */ + public SAXResult() + { + } + + /** + * Constructor specifying a content handler. + */ + public SAXResult(ContentHandler handler) + { + this.handler = handler; + } + + /** + * Sets the content handler to which result document events will be + * propagated. + */ + public void setHandler(ContentHandler handler) + { + this.handler = handler; + } + + /** + * Returns the content handler to which result document events will be + * propagated. + */ + public ContentHandler getHandler() + { + return handler; + } + + /** + * Sets the lexical handler to which lexical events will be propagated. + * If a lexical handler is not set, the transformer should attempt to cast + * the content handler to a lexical handler. + */ + public void setLexicalHandler(LexicalHandler handler) + { + lexicalHandler = handler; + } + + /** + * Returns the lexical handler to which lexical events will be propagated. + * If a lexical handler is not set, the transformer should attempt to cast + * the content handler to a lexical handler. + */ + public LexicalHandler getLexicalHandler() + { + return lexicalHandler; + } + + /** + * Sets the system ID which this result represents. + */ + public void setSystemId(String systemId) + { + this.systemId = systemId; + } + + /** + * Returns the system ID which this result represnts. + */ + public String getSystemId() + { + return systemId; + } + +} diff --git a/libjava/classpath/javax/xml/transform/sax/SAXSource.java b/libjava/classpath/javax/xml/transform/sax/SAXSource.java new file mode 100644 index 000000000..1ef4b7391 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/sax/SAXSource.java @@ -0,0 +1,197 @@ +/* SAXSource.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.sax; + +import java.io.InputStream; +import java.io.Reader; +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import org.xml.sax.InputSource; +import org.xml.sax.XMLReader; + +/** + * Specifies a SAX XML source. This is a tuple of input source and SAX + * parser. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class SAXSource + implements Source +{ + + /** + * Factory feature indicating that SAX sources are supported. + */ + public static final String FEATURE = + "http://javax.xml.transform.sax.SAXSource/feature"; + + private XMLReader xmlReader; + private InputSource inputSource; + + /** + * Default constructor. + */ + public SAXSource() + { + } + + /** + * Constructor with a SAX parser and input source. + */ + public SAXSource(XMLReader reader, InputSource inputSource) + { + xmlReader = reader; + this.inputSource = inputSource; + } + + /** + * Constructor with an input source. + * The SAX parser will be instantiated by the transformer. + */ + public SAXSource(InputSource inputSource) + { + this.inputSource = inputSource; + } + + /** + * Sets the SAX parser to be used by this source. + * If null, the transformer will instantiate its own parser. + */ + public void setXMLReader(XMLReader reader) + { + xmlReader = reader; + } + + /** + * Returns the SAX parser to be used by this source. + * If null, the transformer will instantiate its own parser. + */ + public XMLReader getXMLReader() + { + return xmlReader; + } + + /** + * Sets the input source to parse. + */ + public void setInputSource(InputSource inputSource) + { + this.inputSource = inputSource; + } + + /** + * Returns the input source to parse. + */ + public InputSource getInputSource() + { + return inputSource; + } + + /** + * Sets the system ID for this source. + */ + public void setSystemId(String systemId) + { + if (inputSource != null) + { + inputSource.setSystemId(systemId); + } + } + + /** + * Returns the system ID for this source. + */ + public String getSystemId() + { + if (inputSource != null) + { + return inputSource.getSystemId(); + } + return null; + } + + /** + * Converts a source into a SAX input source. + * This method can use a StreamSource or the system ID. + * @return an input source or null + */ + public static InputSource sourceToInputSource(Source source) + { + InputSource in = null; + if (source instanceof SAXSource) + { + in = ((SAXSource) source).getInputSource(); + } + else if (source instanceof StreamSource) + { + StreamSource streamSource = (StreamSource) source; + InputStream inputStream = streamSource.getInputStream(); + if (inputStream != null) + { + in = new InputSource(inputStream); + } + else + { + Reader reader = streamSource.getReader(); + if (reader != null) + { + in = new InputSource(reader); + } + } + String publicId = streamSource.getPublicId(); + if (publicId != null && in != null) + { + in.setPublicId(publicId); + } + } + String systemId = source.getSystemId(); + if (systemId != null) + { + if (in == null) + { + in = new InputSource(systemId); + } + else + { + in.setSystemId(systemId); + } + } + return in; + } + +} diff --git a/libjava/classpath/javax/xml/transform/sax/SAXTransformerFactory.java b/libjava/classpath/javax/xml/transform/sax/SAXTransformerFactory.java new file mode 100644 index 000000000..2e3713760 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/sax/SAXTransformerFactory.java @@ -0,0 +1,115 @@ +/* SAXTransformerFactory.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.sax; + +import javax.xml.transform.Source; +import javax.xml.transform.Templates; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.TransformerFactory; +import org.xml.sax.XMLFilter; + +/** + * Specialized transformer factory with support for SAX-specific factory + * methods. + * This factory provides SAX content handlers that can create transformation + * templates and transformers. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public abstract class SAXTransformerFactory extends TransformerFactory +{ + + /** + * Factory feature indicating that the factory can be cast to this class. + */ + public static final String FEATURE = + "http://javax.xml.transform.sax.SAXTransformerFactory/feature"; + + /** + * Factory feature indicating that this factory can create new XMLFilters. + */ + public static final String FEATURE_XMLFILTER = + "http://javax.xml.transform.sax.SAXTransformerFactory/feature/xmlfilter"; + + protected SAXTransformerFactory() + { + } + + /** + * Returns a content handler that can process SAX events into a result, + * using the specified transformation. + * @param src the source stylesheet + */ + public abstract TransformerHandler newTransformerHandler(Source src) + throws TransformerConfigurationException; + + /** + * Returns a content handler that can process SAX events into a result, + * using the specified transformation. + * @param templates the compiled stylesheet + */ + public abstract TransformerHandler newTransformerHandler(Templates templates) + throws TransformerConfigurationException; + + /** + * Returns a content handler that can process SAX events into a result, + * using the identity transform. + */ + public abstract TransformerHandler newTransformerHandler() + throws TransformerConfigurationException; + + /** + * Returns a content handler that can process SAX events into a + * transformation template. + */ + public abstract TemplatesHandler newTemplatesHandler() + throws TransformerConfigurationException; + + /** + * Creates an XML filter for the specified source. + */ + public abstract XMLFilter newXMLFilter(Source src) + throws TransformerConfigurationException; + + /** + * Creates an XML filter for the specified compiled stylesheet. + */ + public abstract XMLFilter newXMLFilter(Templates templates) + throws TransformerConfigurationException; + +} diff --git a/libjava/classpath/javax/xml/transform/sax/TemplatesHandler.java b/libjava/classpath/javax/xml/transform/sax/TemplatesHandler.java new file mode 100644 index 000000000..86d46aceb --- /dev/null +++ b/libjava/classpath/javax/xml/transform/sax/TemplatesHandler.java @@ -0,0 +1,68 @@ +/* TemplatesHandler.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.sax; + +import javax.xml.transform.Templates; +import org.xml.sax.ContentHandler; + +/** + * A content handler that processes SAX parse events into a compiled + * transformation template. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public interface TemplatesHandler + extends ContentHandler +{ + + /** + * Returns the templates object created by the parsing of the SAX events. + */ + public Templates getTemplates(); + + /** + * Sets the system ID for the templates object created by this processor. + */ + public void setSystemId(String systemId); + + /** + * Returns the system ID for the templates object created by this processor. + */ + public String getSystemId(); + +} diff --git a/libjava/classpath/javax/xml/transform/sax/TransformerHandler.java b/libjava/classpath/javax/xml/transform/sax/TransformerHandler.java new file mode 100644 index 000000000..aae56e2a9 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/sax/TransformerHandler.java @@ -0,0 +1,78 @@ +/* TransformerHandler.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.sax; + +import javax.xml.transform.Result; +import javax.xml.transform.Transformer; +import org.xml.sax.ContentHandler; +import org.xml.sax.DTDHandler; +import org.xml.sax.ext.LexicalHandler; + +/** + * A content handler that transforms SAX events into a result tree. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public interface TransformerHandler + extends ContentHandler, LexicalHandler, DTDHandler +{ + + /** + * Sets the result sink to be used as the output of the transformation. + * @exception IllegalArgumentException if the result is not a valid target + */ + public void setResult(Result result) + throws IllegalArgumentException; + + /** + * Sets the system ID relative to which URLs will be resolved. + */ + public void setSystemId(String systemID); + + /** + * Returns the system ID relative to which URLs will be resolved. + */ + public String getSystemId(); + + /** + * Returns the transformer associated with this handler in order to set + * parameters and output properties. + */ + public Transformer getTransformer(); + +} diff --git a/libjava/classpath/javax/xml/transform/sax/package.html b/libjava/classpath/javax/xml/transform/sax/package.html new file mode 100644 index 000000000..b2d2978a3 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/sax/package.html @@ -0,0 +1,9 @@ +<html><head>trax for sax</head><body> + +<p>Support for SAX2-based XSLT transformers. +Normally you would cast a TransformerFactory to a +<a href="SAXTransformerFactory.html">SAXTransformerFactory</a> +and use that to in any of the various modes supported +(such as push or pull). + +</body></html> diff --git a/libjava/classpath/javax/xml/transform/stream/StreamResult.java b/libjava/classpath/javax/xml/transform/stream/StreamResult.java new file mode 100644 index 000000000..b44e6ce58 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/stream/StreamResult.java @@ -0,0 +1,173 @@ +/* StreamResult.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.stream; + +import java.io.File; +import java.io.IOException; +import java.io.OutputStream; +import java.io.Writer; +import javax.xml.transform.Result; + +/** + * Specifies a stream to which to write the transformation result. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class StreamResult + implements Result +{ + + /** + * Factory feature indicating that stream results are supported. + */ + public static final String FEATURE = + "http://javax.xml.transform.stream.StreamResult/feature"; + + private String systemId; + private OutputStream outputStream; + private Writer writer; + + /** + * Default constructor. + */ + public StreamResult() + { + } + + /** + * Constructor with an output stream. + */ + public StreamResult(OutputStream stream) + { + this.outputStream = stream; + } + + /** + * Constructor with a writer. + * Prefer to use an output stream rather than a writer, so that the + * output encoding can be controlled by transformation properties. + */ + public StreamResult(Writer writer) + { + this.writer = writer; + } + + /** + * Constructor with a system ID. + */ + public StreamResult(String systemID) + { + this.systemId = systemID; + } + + /** + * Constructor with a system ID specified as a File object. + */ + public StreamResult(File file) + { + setSystemId(file); + } + + /** + * Sets the target output stream. + */ + public void setOutputStream(OutputStream outputStream) + { + this.outputStream = outputStream; + } + + /** + * Returns the target output stream. + */ + public OutputStream getOutputStream() + { + return outputStream; + } + + /** + * Sets the target writer. + * Prefer to use an output stream rather than a writer, so that the + * output encoding can be controlled by transformation properties. + */ + public void setWriter(Writer writer) + { + this.writer = writer; + } + + /** + * Returns the target writer. + */ + public Writer getWriter() + { + return writer; + } + + /** + * Sets the system ID. + * If neither the out stream nor the writer have been specified, the + * system ID will be treated as a URL for writing to. + */ + public void setSystemId(String systemID) + { + this.systemId = systemID; + } + + /** + * Sets the system ID from a File reference. + */ + public void setSystemId(File f) + { + try + { + systemId = f.toURL().toString(); + } + catch (IOException e) + { + throw new RuntimeException(e.getMessage(), e); + } + } + + /** + * Returns the system ID. + */ + public String getSystemId() + { + return systemId; + } + +} diff --git a/libjava/classpath/javax/xml/transform/stream/StreamSource.java b/libjava/classpath/javax/xml/transform/stream/StreamSource.java new file mode 100644 index 000000000..def73d8c0 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/stream/StreamSource.java @@ -0,0 +1,210 @@ +/* StreamSource.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.transform.stream; + +import java.io.File; +import java.io.InputStream; +import java.io.IOException; +import java.io.Reader; +import javax.xml.transform.Source; + +/** + * Specifies a stream from which to read the source XML data. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + */ +public class StreamSource + implements Source +{ + + /** + * Factory feature indicating that stream sources are supported. + */ + public static final String FEATURE = + "http://javax.xml.transform.stream.StreamSource/feature"; + + private String publicId; + private String systemId; + private InputStream inputStream; + private Reader reader; + + /** + * Default constructor. + */ + public StreamSource() + { + } + + /** + * Constructor with an input stream. + */ + public StreamSource(InputStream stream) + { + this.inputStream = stream; + } + + /** + * Constructor with an input stream and system ID. + */ + public StreamSource(InputStream stream, String systemId) + { + this.inputStream = stream; + this.systemId = systemId; + } + + /** + * Constructor with a reader. + * Prefer an input stream to a reader, so that the parser can use the + * character encoding specified in the XML. + */ + public StreamSource(Reader reader) + { + this.reader = reader; + } + + /** + * Constructor with a reader and system ID. + * Prefer an input stream to a reader, so that the parser can use the + * character encoding specified in the XML. + */ + public StreamSource(Reader reader, String systemId) + { + this.reader = reader; + this.systemId = systemId; + } + + /** + * Constructor with a system ID. + */ + public StreamSource(String systemId) + { + this.systemId = systemId; + } + + /** + * Constructor with a system ID specified as a File reference. + */ + public StreamSource(File file) + { + setSystemId(file); + } + + /** + * Sets the source input stream. + */ + public void setInputStream(InputStream stream) + { + this.inputStream = stream; + } + + /** + * Returns the source input stream. + */ + public InputStream getInputStream() + { + return inputStream; + } + + /** + * Sets the source reader. + * Prefer an input stream to a reader, so that the parser can use the + * character encoding specified in the XML. + */ + public void setReader(Reader reader) + { + this.reader = reader; + } + + /** + * Returns the source reader. + */ + public Reader getReader() + { + return reader; + } + + /** + * Sets the public ID for this source. + */ + public void setPublicId(String publicId) + { + this.publicId = publicId; + } + + /** + * Returns the public ID for this source. + */ + public String getPublicId() + { + return publicId; + } + + /** + * Sets the system ID for this source. + * If the input stream and reader are absent, the system ID will be used + * as a readable URL to locate the source data. + */ + public void setSystemId(String systemId) + { + this.systemId = systemId; + } + + /** + * Returns the system ID for this source. + */ + public String getSystemId() + { + return systemId; + } + + /** + * Sets the system ID using a File reference. + */ + public void setSystemId(File f) + { + try + { + this.systemId = f.toURL().toString(); + } + catch (IOException e) + { + throw new RuntimeException(e.getMessage(), e); + } + } + +} diff --git a/libjava/classpath/javax/xml/transform/stream/package.html b/libjava/classpath/javax/xml/transform/stream/package.html new file mode 100644 index 000000000..f9d052b19 --- /dev/null +++ b/libjava/classpath/javax/xml/transform/stream/package.html @@ -0,0 +1,6 @@ +<html><head>trax for streams</head><body> + +<p>Support for text stream inputs and outputs to transformers. + +</body></html> + diff --git a/libjava/classpath/javax/xml/validation/Schema.java b/libjava/classpath/javax/xml/validation/Schema.java new file mode 100644 index 000000000..1329eabf2 --- /dev/null +++ b/libjava/classpath/javax/xml/validation/Schema.java @@ -0,0 +1,61 @@ +/* Schema.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.validation; + +/** + * An immutable grammar. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public abstract class Schema +{ + + protected Schema() + { + } + + /** + * Returns a new validator that can check the set of constraints this + * schema represents. + */ + public abstract Validator newValidator(); + + public abstract ValidatorHandler newValidatorHandler(); + +} diff --git a/libjava/classpath/javax/xml/validation/SchemaFactory.java b/libjava/classpath/javax/xml/validation/SchemaFactory.java new file mode 100644 index 000000000..1c099bbe2 --- /dev/null +++ b/libjava/classpath/javax/xml/validation/SchemaFactory.java @@ -0,0 +1,264 @@ +/* SchemaFactory.java -- + Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.validation; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.net.URL; +import java.util.Properties; +import javax.xml.XMLConstants; +import javax.xml.transform.Source; +import javax.xml.transform.stream.StreamSource; +import org.w3c.dom.ls.LSResourceResolver; +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; + +/** + * Factory for obtaining schemata. + * + * @author Chris Burdess (dog@gnu.org) + * @since 1.5 + */ +public abstract class SchemaFactory +{ + protected SchemaFactory() + { + } + + /** + * Returns an implementation of <code>SchemaFactory</code> that supports + * the specified schema language. + * @param schemaLanguage the URI of a schema language (see + * <code>XMLConstants</code>) + */ + public static final SchemaFactory newInstance(String schemaLanguage) + { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + if (loader == null) + { + loader = SchemaFactory.class.getClassLoader(); + } + final String factoryClassName = "javax.xml.validation.SchemaFactory"; + String className = null; + int count = 0; + do + { + className = getFactoryClassName(loader, schemaLanguage, count++); + if (className != null) + { + try + { + Class<?> t = (loader != null) ? loader.loadClass(className) : + Class.forName(className); + return (SchemaFactory) t.newInstance(); + } + catch (Exception e) + { + // Ignore any errors and continue algorithm. + // This method doesn't have a means of propagating + // class instantiation errors. + className = null; + } + } + } + while (className == null && count < 2); + try + { + String serviceKey = "/META-INF/services/" + factoryClassName; + InputStream in = (loader != null) ? + loader.getResourceAsStream(serviceKey) : + SchemaFactory.class.getResourceAsStream(serviceKey); + if (in != null) + { + BufferedReader r = + new BufferedReader(new InputStreamReader(in)); + try + { + for (String line = r.readLine(); line != null; + line = r.readLine()) + { + Class<?> t = (loader != null) ? loader.loadClass(className) : + Class.forName(className); + SchemaFactory ret = (SchemaFactory) t.newInstance(); + if (ret.isSchemaLanguageSupported(schemaLanguage)) + return ret; + } + } + catch (Exception e) + { + // Fall through. See above. + } + finally + { + r.close(); + } + } + } + catch (IOException e) + { + } + // Default schema factories for Classpath + if (XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(schemaLanguage)) + return new gnu.xml.validation.xmlschema.XMLSchemaSchemaFactory(); + if (XMLConstants.RELAXNG_NS_URI.equals(schemaLanguage)) + return new gnu.xml.validation.relaxng.RELAXNGSchemaFactory(); + throw new IllegalArgumentException(schemaLanguage); + } + + private static String getFactoryClassName(ClassLoader loader, + String schemaLanguage, int attempt) + { + final String factoryClassName = "javax.xml.validation.SchemaFactory"; + final String propertyName = factoryClassName + ":" + schemaLanguage; + switch (attempt) + { + case 0: + return System.getProperty(propertyName); + case 1: + try + { + File file = new File(System.getProperty("java.home")); + file = new File(file, "lib"); + file = new File(file, "jaxp.properties"); + InputStream in = new FileInputStream(file); + Properties props = new Properties(); + props.load(in); + in.close(); + return props.getProperty(propertyName); + } + catch (IOException e) + { + return null; + } + default: + return null; + } + } + + /** + * Indicates whether the specified schema language is supported. + * @param schemaLanguage the URI of a schema language (see + * <code>XMLConstants</code>) + */ + public abstract boolean isSchemaLanguageSupported(String schemaLanguage); + + public boolean getFeature(String name) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + + public void setFeature(String name, boolean value) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + + public Object getProperty(String name) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + + public void setProperty(String name, Object value) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + + public abstract ErrorHandler getErrorHandler(); + + public abstract void setErrorHandler(ErrorHandler errorHandler); + + public abstract LSResourceResolver getResourceResolver(); + + public abstract void setResourceResolver(LSResourceResolver resourceResolver); + + /** + * Returns a schema based on the specified source resource. + * @param schema the source resource + */ + public Schema newSchema(Source schema) + throws SAXException + { + return newSchema(new Source[] { schema }); + } + + /** + * Returns a schema based on the specified source file. + * @param schema the source resource + */ + public Schema newSchema(File schema) + throws SAXException + { + return newSchema(new StreamSource(schema)); + } + + /** + * Returns a schema based on the specified URL. + * @param schema the source resource + */ + public Schema newSchema(URL schema) + throws SAXException + { + return newSchema(new StreamSource(schema.toString())); + } + + /** + * Parses the specified sources, and combine them into a single schema. + * The exact procedure and semantics of this depends on the schema + * language. + * @param schemata the schema resources to load + */ + public abstract Schema newSchema(Source[] schemata) + throws SAXException; + + /** + * Creates a special schema. + * The exact semantics of this depends on the schema language. + */ + public abstract Schema newSchema() + throws SAXException; + +} diff --git a/libjava/classpath/javax/xml/validation/SchemaFactoryLoader.java b/libjava/classpath/javax/xml/validation/SchemaFactoryLoader.java new file mode 100644 index 000000000..7d6013835 --- /dev/null +++ b/libjava/classpath/javax/xml/validation/SchemaFactoryLoader.java @@ -0,0 +1,52 @@ +/* SchemaFactory.java -- + Copyright (C) 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.validation; + +/** + * API compatibility class. Do not use. + */ +public abstract class SchemaFactoryLoader +{ + + protected SchemaFactoryLoader() + { + } + + public abstract SchemaFactory newFactory(String schemaLanguage); + +} diff --git a/libjava/classpath/javax/xml/validation/TypeInfoProvider.java b/libjava/classpath/javax/xml/validation/TypeInfoProvider.java new file mode 100644 index 000000000..c8bb227ec --- /dev/null +++ b/libjava/classpath/javax/xml/validation/TypeInfoProvider.java @@ -0,0 +1,83 @@ +/* TypeInfoProvider.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.validation; + +import org.w3c.dom.TypeInfo; + +/** + * Provides access to the PSVI type info supplied by + * <code>ValidatorHandler</code>. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public abstract class TypeInfoProvider +{ + + protected TypeInfoProvider() + { + } + + /** + * Returns the type information for the current element. + */ + public abstract TypeInfo getElementTypeInfo(); + + /** + * Returns the type information for the specified attribute of the current + * element. + * @param index the attribute index as for the Attributes object passed to + * the startElement callback + */ + public abstract TypeInfo getAttributeTypeInfo(int index); + + /** + * Indicates if the attribute at the specified index is of the ID type. + * @param index the attribute index as for the Attributes object passed to + * the startElement callback + */ + public abstract boolean isIdAttribute(int index); + + /** + * Returns false if the attribute was defaulted (added by the validator). + * @param index the attribute index as for the Attributes object passed to + * the startElement callback + */ + public abstract boolean isSpecified(int index); + +} diff --git a/libjava/classpath/javax/xml/validation/Validator.java b/libjava/classpath/javax/xml/validation/Validator.java new file mode 100644 index 000000000..f12401a68 --- /dev/null +++ b/libjava/classpath/javax/xml/validation/Validator.java @@ -0,0 +1,117 @@ +/* Validator.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.validation; + +import java.io.IOException; +import javax.xml.transform.Source; +import javax.xml.transform.Result; +import org.w3c.dom.ls.LSResourceResolver; +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXException; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; + +/** + * A processor that validates a document against a schema. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public abstract class Validator +{ + + protected Validator() + { + } + + /** + * Reset this validator to its original state. + */ + public abstract void reset(); + + /** + * Validate the specified input. + * @param source the document to validate + */ + public void validate(Source source) + throws SAXException, IOException + { + validate(source, null); + } + + /** + * Validate the specified input. + * @param source the document to validate + * @param result the PSVI document to output + */ + public abstract void validate(Source source, Result result) + throws SAXException, IOException; + + public abstract void setErrorHandler(ErrorHandler errorHandler); + + public abstract ErrorHandler getErrorHandler(); + + public abstract void setResourceResolver(LSResourceResolver resourceResolver); + + public abstract LSResourceResolver getResourceResolver(); + + public boolean getFeature(String name) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + + public void setFeature(String name, boolean value) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + + public Object getProperty(String name) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + + public void setProperty(String name, Object value) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + +} diff --git a/libjava/classpath/javax/xml/validation/ValidatorHandler.java b/libjava/classpath/javax/xml/validation/ValidatorHandler.java new file mode 100644 index 000000000..639086bbf --- /dev/null +++ b/libjava/classpath/javax/xml/validation/ValidatorHandler.java @@ -0,0 +1,115 @@ +/* ValidatorHandler.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.validation; + +import org.w3c.dom.ls.LSResourceResolver; +import org.xml.sax.ContentHandler; +import org.xml.sax.ErrorHandler; +import org.xml.sax.SAXNotRecognizedException; +import org.xml.sax.SAXNotSupportedException; + +/** + * A streaming validator that operates on a SAX event stream. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public abstract class ValidatorHandler + implements ContentHandler +{ + + static final String NS_FEATURE = + "http://xml.org/sax/features/namespace-prefixes"; + + protected ValidatorHandler() + { + } + + /** + * Sets the ContentHandler to receive PSVI SAX events. + */ + public abstract void setContentHandler(ContentHandler receiver); + + /** + * Returns the ContentHandler to receive PSVI SAX events. + */ + public abstract ContentHandler getContentHandler(); + + public abstract void setErrorHandler(ErrorHandler errorHandler); + + public abstract ErrorHandler getErrorHandler(); + + public abstract void setResourceResolver(LSResourceResolver resourceResolver); + + public abstract LSResourceResolver getResourceResolver(); + + public abstract TypeInfoProvider getTypeInfoProvider(); + + public boolean getFeature(String name) + throws SAXNotRecognizedException, SAXNotSupportedException + { + if (name.equals(NS_FEATURE)) + { + return true; + } + throw new SAXNotRecognizedException(name); + } + + public void setFeature(String name, boolean value) + throws SAXNotRecognizedException, SAXNotSupportedException + { + if (name.equals(NS_FEATURE)) + { + throw new SAXNotSupportedException(); + } + throw new SAXNotRecognizedException(name); + } + + public Object getProperty(String name) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + + public void setProperty(String name, Object value) + throws SAXNotRecognizedException, SAXNotSupportedException + { + throw new SAXNotRecognizedException(name); + } + +} diff --git a/libjava/classpath/javax/xml/validation/package.html b/libjava/classpath/javax/xml/validation/package.html new file mode 100644 index 000000000..b4daa143a --- /dev/null +++ b/libjava/classpath/javax/xml/validation/package.html @@ -0,0 +1,9 @@ +<html> +<body> + +<div> +API for the validation of XML documents using a range of schema languages. +</div> + +</body> +</html> diff --git a/libjava/classpath/javax/xml/xpath/XPath.java b/libjava/classpath/javax/xml/xpath/XPath.java new file mode 100644 index 000000000..eb652b1ae --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPath.java @@ -0,0 +1,115 @@ +/* XPath.java -- + Copyright (C) 2004 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +import javax.xml.namespace.NamespaceContext; +import javax.xml.namespace.QName; +import org.xml.sax.InputSource; + +/** + * Interface to the XPath evaluation environment. + * @since 1.3 + */ +public interface XPath +{ + + /** + * Resets the environment. + */ + void reset(); + + void setXPathVariableResolver(XPathVariableResolver resolver); + + XPathVariableResolver getXPathVariableResolver(); + + void setXPathFunctionResolver(XPathFunctionResolver resolver); + + XPathFunctionResolver getXPathFunctionResolver(); + + void setNamespaceContext(NamespaceContext nsContext); + + NamespaceContext getNamespaceContext(); + + /** + * Compiles an XPath expression for future evaluation. + * @param expression the expression + */ + XPathExpression compile(String expression) + throws XPathExpressionException; + + /** + * Evaluates an expression. + * @param expression the expression + * @param item the expression context + * @param returnType the desired return type + */ + Object evaluate(String expression, + Object item, + QName returnType) + throws XPathExpressionException; + + /** + * Evaluates an expression and returns the result as a string. + * @param expression the expression + * @param item the expression context + */ + String evaluate(String expression, + Object item) + throws XPathExpressionException; + + /** + * Evaluates an expression. + * @param expression the expression + * @param source the source to load the expression context from + * @param returnType the desired return type + */ + Object evaluate(String expression, + InputSource source, + QName returnType) + throws XPathExpressionException; + + /** + * Evaluates an expression and returns the result as a string. + * @param expression the expression + * @param source the source to load the expression context from + */ + String evaluate(String expression, + InputSource source) + throws XPathExpressionException; + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathConstants.java b/libjava/classpath/javax/xml/xpath/XPathConstants.java new file mode 100644 index 000000000..9c39db9f3 --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathConstants.java @@ -0,0 +1,91 @@ +/* XPathConstants.java -- + Copyright (C) 2004, 2005, 2006 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +import javax.xml.namespace.QName; + +/** + * XPath constants. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.5 + */ +public class XPathConstants +{ + private XPathConstants() + { + // to prevent instantiation + } + + /** + * The XPath 1.0 number data type. + */ + public static final QName NUMBER = + new QName("http://java.sun.com/jaxp/xpath/dom#number", ""); + + /** + * The XPath 1.0 string data type. + */ + public static final QName STRING = + new QName("http://java.sun.com/jaxp/xpath/dom#string", ""); + + /** + * The XPath 1.0 boolean data type. + */ + public static final QName BOOLEAN = + new QName("http://java.sun.com/jaxp/xpath/dom#boolean", ""); + + /** + * The XPath 1.0 node-set data type. + */ + public static final QName NODESET = + new QName("http://java.sun.com/jaxp/xpath/dom#node-set", ""); + + /** + * The XPath 1.0 node data type. + */ + public static final QName NODE = + new QName("http://java.sun.com/jaxp/xpath/dom#node", ""); + + /** + * The URL for the JAXP DOM object model. + */ + public static final String DOM_OBJECT_MODEL = + "http://java.sun.com/jaxp/xpath/dom"; + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathException.java b/libjava/classpath/javax/xml/xpath/XPathException.java new file mode 100644 index 000000000..7d45fa747 --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathException.java @@ -0,0 +1,88 @@ +/* XPathException.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +import java.io.PrintStream; +import java.io.PrintWriter; + +/** + * A generic XPath exception. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public class XPathException + extends Exception +{ + private static final long serialVersionUID = -1837080260374986980L; + + // Name is fixed by serialization spec. + Throwable cause; + + public XPathException(String message) + { + super(message); + } + + public XPathException(Throwable cause) + { + super(cause); + this.cause = cause; + } + + public Throwable getCause() + { + return cause; + } + + public void printStackTrace() + { + super.printStackTrace(); + } + + public void printStackTrace(PrintStream out) + { + super.printStackTrace(out); + } + + public void printStackTrace(PrintWriter out) + { + super.printStackTrace(out); + } + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathExpression.java b/libjava/classpath/javax/xml/xpath/XPathExpression.java new file mode 100644 index 000000000..89c6494c2 --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathExpression.java @@ -0,0 +1,86 @@ +/* XPathExpression.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +import javax.xml.namespace.QName; +import org.xml.sax.InputSource; + +/** + * An XPath expression. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public interface XPathExpression +{ + + /** + * Evaluates this expression against the specified context. + * @param item the evaluation context + * @param returnType the desired return type + */ + Object evaluate(Object item, + QName returnType) + throws XPathExpressionException; + + /** + * Evaluates this expression against the specified context, returning the + * result as a string. + * @param item the evaluation context + */ + String evaluate(Object item) + throws XPathExpressionException; + + /** + * Evaluates this expression against the specified context. + * @param source the source to load the context from + * @param returnType the desired return type + */ + Object evaluate(InputSource source, + QName returnType) + throws XPathExpressionException; + + /** + * Evaluates this expression against the specified context, returning the + * result as a string. + * @param source the source to load the context from + */ + String evaluate(InputSource source) + throws XPathExpressionException; + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathExpressionException.java b/libjava/classpath/javax/xml/xpath/XPathExpressionException.java new file mode 100644 index 000000000..543570485 --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathExpressionException.java @@ -0,0 +1,61 @@ +/* XPathExpressionException.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +/** + * An exception in an XPath expression. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public class XPathExpressionException + extends XPathException +{ + private static final long serialVersionUID = -1837080260374986980L; + + public XPathExpressionException(String message) + { + super(message); + } + + public XPathExpressionException(Throwable cause) + { + super(cause); + } + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathFactory.java b/libjava/classpath/javax/xml/xpath/XPathFactory.java new file mode 100644 index 000000000..62c17154a --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathFactory.java @@ -0,0 +1,227 @@ +/* XPathFactory.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +import java.io.BufferedReader; +import java.io.File; +import java.io.FileInputStream; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.IOException; +import java.util.Properties; + +/** + * Factory for creating XPath environments. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public abstract class XPathFactory +{ + + /** + * The default property name according to the JAXP specification. + */ + public static final String DEFAULT_PROPERTY_NAME = + "javax.xml.xpath.XPathFactory"; + + /** + * The default object model URI. + */ + public static final String DEFAULT_OBJECT_MODEL_URI = + XPathConstants.DOM_OBJECT_MODEL; + + protected XPathFactory() + { + } + + /** + * Returns a new factory for the default (DOM) object model. + */ + public static final XPathFactory newInstance() + { + try + { + return newInstance(DEFAULT_OBJECT_MODEL_URI); + } + catch (XPathFactoryConfigurationException e) + { + throw new RuntimeException(e.getMessage()); + } + } + + /** + * Returns a new factory for the given object model URI. + * The implementation class to load is the first found in the following + * locations that advertises support for the given model URI: + * <ol> + * <li>the <code>javax.xml.xpath.XPathFactory</code> system property</li> + * <li>the above named property value in the + * <code><i>$JAVA_HOME</i>/lib/jaxp.properties</code> file</li> + * <li>the class name specified in the + * <code>META-INF/services/javax.xml.xpath.XPathFactory</code> system + * resource</li> + * <li>the default factory class</li> + * </ol> + * @param uri the object model URI + */ + public static final XPathFactory newInstance(String uri) + throws XPathFactoryConfigurationException + { + ClassLoader loader = Thread.currentThread().getContextClassLoader(); + if (loader == null) + { + loader = XPathFactory.class.getClassLoader(); + } + String className = null; + int count = 0; + do + { + className = getFactoryClassName(loader, count++); + if (className != null) + { + try + { + Class<?> t = (loader != null) ? loader.loadClass(className) : + Class.forName(className); + XPathFactory ret = (XPathFactory) t.newInstance(); + if (ret.isObjectModelSupported(uri)) + { + return ret; + } + className = null; + } + catch (ClassNotFoundException e) + { + className = null; + } + catch (Exception e) + { + throw new XPathFactoryConfigurationException(e); + } + } + } + while (className == null && count < 4); + String msg = "no factories with support for " + uri; + throw new XPathFactoryConfigurationException(msg); + } + + private static String getFactoryClassName(ClassLoader loader, int attempt) + { + final String propertyName = DEFAULT_PROPERTY_NAME; + switch (attempt) + { + case 0: + return System.getProperty(propertyName); + case 1: + try + { + File file = new File(System.getProperty("java.home")); + file = new File(file, "lib"); + file = new File(file, "jaxp.properties"); + InputStream in = new FileInputStream(file); + Properties props = new Properties(); + props.load(in); + in.close(); + return props.getProperty(propertyName); + } + catch (IOException e) + { + return null; + } + case 2: + try + { + String serviceKey = "/META-INF/services/" + propertyName; + InputStream in = (loader != null) ? + loader.getResourceAsStream(serviceKey) : + XPathFactory.class.getResourceAsStream(serviceKey); + if (in != null) + { + BufferedReader r = + new BufferedReader(new InputStreamReader(in)); + String ret = r.readLine(); + r.close(); + return ret; + } + } + catch (IOException e) + { + } + return null; + case 3: + return "gnu.xml.xpath.XPathFactoryImpl"; + default: + return null; + } + } + + /** + * Indicates whether the specified object model URI is supported by + * this factory. + */ + public abstract boolean isObjectModelSupported(String objectModel); + + /** + * Sets the state of the named feature. + */ + public abstract void setFeature(String name, boolean value) + throws XPathFactoryConfigurationException; + + /** + * Returns the state of the named feature. + */ + public abstract boolean getFeature(String name) + throws XPathFactoryConfigurationException; + + /** + * Sets the XPath variable resolver calback. + */ + public abstract void setXPathVariableResolver(XPathVariableResolver resolver); + + /** + * Sets the XPath extension function resolver calback. + */ + public abstract void setXPathFunctionResolver(XPathFunctionResolver resolver); + + /** + * Returns a new XPath evaluation environment. + */ + public abstract XPath newXPath(); + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathFactoryConfigurationException.java b/libjava/classpath/javax/xml/xpath/XPathFactoryConfigurationException.java new file mode 100644 index 000000000..929cbe64b --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathFactoryConfigurationException.java @@ -0,0 +1,61 @@ +/* XPathFactoryConfigurationException.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +/** + * A configuration exception in an XPath factory environment. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public class XPathFactoryConfigurationException + extends XPathException +{ + private static final long serialVersionUID = -1837080260374986980L; + + public XPathFactoryConfigurationException(String message) + { + super(message); + } + + public XPathFactoryConfigurationException(Throwable cause) + { + super(cause); + } + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathFunction.java b/libjava/classpath/javax/xml/xpath/XPathFunction.java new file mode 100644 index 000000000..4406e318c --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathFunction.java @@ -0,0 +1,59 @@ +/* XPathFunction.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +import java.util.List; + +/** + * An XPath extension function. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public interface XPathFunction +{ + + /** + * Evaluate the function with the specified arguments. + * @param args the list of arguments + */ + @SuppressWarnings("unchecked") + Object evaluate(List args) + throws XPathFunctionException; + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathFunctionException.java b/libjava/classpath/javax/xml/xpath/XPathFunctionException.java new file mode 100644 index 000000000..c1d3b98cd --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathFunctionException.java @@ -0,0 +1,61 @@ +/* XPathFunctionException.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +/** + * An exception in an XPath function. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public class XPathFunctionException + extends XPathExpressionException +{ + private static final long serialVersionUID = -1837080260374986980L; + + public XPathFunctionException(String message) + { + super(message); + } + + public XPathFunctionException(Throwable cause) + { + super(cause); + } + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathFunctionResolver.java b/libjava/classpath/javax/xml/xpath/XPathFunctionResolver.java new file mode 100644 index 000000000..e896690e6 --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathFunctionResolver.java @@ -0,0 +1,59 @@ +/* XPathFunctionResolver.java -- + Copyright (C) 2004, 2005 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +import javax.xml.namespace.QName; + +/** + * Interface providing the means to access XPath extension functions. + * + * @author (a href='mailto:dog@gnu.org'>Chris Burdess</a) + * @since 1.3 + */ +public interface XPathFunctionResolver +{ + + /** + * Returns the function with the specified name and arity. + * @param functionName the function name + * @param arity the number of arguments + */ + XPathFunction resolveFunction(QName functionName, + int arity); + +} diff --git a/libjava/classpath/javax/xml/xpath/XPathVariableResolver.java b/libjava/classpath/javax/xml/xpath/XPathVariableResolver.java new file mode 100644 index 000000000..2da4a6e63 --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/XPathVariableResolver.java @@ -0,0 +1,52 @@ +/* XPathVariableResolver.java -- + Copyright (C) 2004 Free Software Foundation, Inc. + +This file is part of GNU Classpath. + +GNU Classpath is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +GNU Classpath 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 for more details. + +You should have received a copy of the GNU General Public License +along with GNU Classpath; see the file COPYING. If not, write to the +Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +02110-1301 USA. + +Linking this library statically or dynamically with other modules is +making a combined work based on this library. Thus, the terms and +conditions of the GNU General Public License cover the whole +combination. + +As a special exception, the copyright holders of this library give you +permission to link this library with independent modules to produce an +executable, regardless of the license terms of these independent +modules, and to copy and distribute the resulting executable under +terms of your choice, provided that you also meet, for each linked +independent module, the terms and conditions of the license of that +module. An independent module is a module which is not derived from +or based on this library. If you modify this library, you may extend +this exception to your version of the library, but you are not +obligated to do so. If you do not wish to do so, delete this +exception statement from your version. */ + +package javax.xml.xpath; + +import javax.xml.namespace.QName; + +/** + * Interface providing the means to access the values of XPath variable + * references. + * @since 1.3 + */ +public interface XPathVariableResolver +{ + + Object resolveVariable(QName variableName); + +} diff --git a/libjava/classpath/javax/xml/xpath/package.html b/libjava/classpath/javax/xml/xpath/package.html new file mode 100644 index 000000000..458cff843 --- /dev/null +++ b/libjava/classpath/javax/xml/xpath/package.html @@ -0,0 +1,9 @@ +<html> +<body> + +<div> +This package provides access to an XPath evaluation environment and expressions. +</div> + +</body> +</html> |