All Downloads are FREE. Search and download functionalities are using the official Maven repository.

javax.xml.transform.sax.SAXSource Maven / Gradle / Ivy

Go to download

A slightly adapted version of Xerces 2.11.0 to allow the XMLStringBuffer responsible for XML attribute scanning to start larger and thus avoid extended appending times. The initial buffer size is controlled by settting the system property julielab.xerces.attributebuffersize (also available as constant XMLScanner#ATTRIBUTE_BUFFER_SIZE).

There is a newer version: 2.11.0.1
Show newest version
/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

// $Id: SAXSource.java 446598 2006-09-15 12:55:40Z jeremias $

package javax.xml.transform.sax;

import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;

import org.xml.sax.InputSource;
import org.xml.sax.XMLReader;

/**
 * 

Acts as an holder for SAX-style Source.

* *

Note that XSLT requires namespace support. Attempting to transform an * input source that is not * generated with a namespace-aware parser may result in errors. * Parsers can be made namespace aware by calling the * {@link javax.xml.parsers.SAXParserFactory#setNamespaceAware(boolean awareness)} method.

* * @author Jeff Suttor * @version $Revision: 446598 $, $Date: 2006-09-15 08:55:40 -0400 (Fri, 15 Sep 2006) $ */ public class SAXSource implements Source { /** * If {@link javax.xml.transform.TransformerFactory#getFeature} * returns true when passed this value as an argument, * the Transformer supports Source input of this type. */ public static final String FEATURE = "http://javax.xml.transform.sax.SAXSource/feature"; /** *

Zero-argument default constructor. If this constructor is used, and * no SAX source is set using * {@link #setInputSource(InputSource inputSource)} , then the * Transformer will * create an empty source {@link org.xml.sax.InputSource} using * {@link org.xml.sax.InputSource#InputSource() new InputSource()}.

* * @see javax.xml.transform.Transformer#transform(Source xmlSource, Result outputTarget) */ public SAXSource() { } /** * Create a SAXSource, using an {@link org.xml.sax.XMLReader} * and a SAX InputSource. The {@link javax.xml.transform.Transformer} * or {@link javax.xml.transform.sax.SAXTransformerFactory} will set itself * to be the reader's {@link org.xml.sax.ContentHandler}, and then will call * reader.parse(inputSource). * * @param reader An XMLReader to be used for the parse. * @param inputSource A SAX input source reference that must be non-null * and that will be passed to the reader parse method. */ public SAXSource(XMLReader reader, InputSource inputSource) { this.reader = reader; this.inputSource = inputSource; } /** * Create a SAXSource, using a SAX InputSource. * The {@link javax.xml.transform.Transformer} or * {@link javax.xml.transform.sax.SAXTransformerFactory} creates a * reader via {@link org.xml.sax.helpers.XMLReaderFactory} * (if setXMLReader is not used), sets itself as * the reader's {@link org.xml.sax.ContentHandler}, and calls * reader.parse(inputSource). * * @param inputSource An input source reference that must be non-null * and that will be passed to the parse method of the reader. */ public SAXSource(InputSource inputSource) { this.inputSource = inputSource; } /** * Set the XMLReader to be used for the Source. * * @param reader A valid XMLReader or XMLFilter reference. */ public void setXMLReader(XMLReader reader) { this.reader = reader; } /** * Get the XMLReader to be used for the Source. * * @return A valid XMLReader or XMLFilter reference, or null. */ public XMLReader getXMLReader() { return reader; } /** * Set the SAX InputSource to be used for the Source. * * @param inputSource A valid InputSource reference. */ public void setInputSource(InputSource inputSource) { this.inputSource = inputSource; } /** * Get the SAX InputSource to be used for the Source. * * @return A valid InputSource reference, or null. */ public InputSource getInputSource() { return inputSource; } /** * Set the system identifier for this Source. If an input source * has already been set, it will set the system ID or that * input source, otherwise it will create a new input source. * *

The system identifier is optional if there is a byte stream * or a character stream, but it is still useful to provide one, * since the application can use it to resolve relative URIs * and can include it in error messages and warnings (the parser * will attempt to open a connection to the URI only if * no byte stream or character stream is specified).

* * @param systemId The system identifier as a URI string. */ public void setSystemId(String systemId) { if (null == inputSource) { inputSource = new InputSource(systemId); } else { inputSource.setSystemId(systemId); } } /** *

Get the base ID (URI or system ID) from where URIs * will be resolved.

* * @return Base URL for the Source, or null. */ public String getSystemId() { if (inputSource == null) { return null; } else { return inputSource.getSystemId(); } } /** * The XMLReader to be used for the source tree input. May be null. */ private XMLReader reader; /** *

The SAX InputSource to be used for the source tree input. * Should not be null.

*/ private InputSource inputSource; /** * Attempt to obtain a SAX InputSource object from a Source * object. * * @param source Must be a non-null Source reference. * * @return An InputSource, or null if Source can not be converted. */ public static InputSource sourceToInputSource(Source source) { if (source instanceof SAXSource) { return ((SAXSource) source).getInputSource(); } else if (source instanceof StreamSource) { StreamSource ss = (StreamSource) source; InputSource isource = new InputSource(ss.getSystemId()); isource.setByteStream(ss.getInputStream()); isource.setCharacterStream(ss.getReader()); isource.setPublicId(ss.getPublicId()); return isource; } else { return null; } } }