19f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 29f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Licensed to the Apache Software Foundation (ASF) under one 39f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or more contributor license agreements. See the NOTICE file 49f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed with this work for additional information 59f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * regarding copyright ownership. The ASF licenses this file 69f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to you under the Apache License, Version 2.0 (the "License"); 79f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * you may not use this file except in compliance with the License. 89f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * You may obtain a copy of the License at 99f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * http://www.apache.org/licenses/LICENSE-2.0 119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Unless required by applicable law or agreed to in writing, software 139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * distributed under the License is distributed on an "AS IS" BASIS, 149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * See the License for the specific language governing permissions and 169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * limitations under the License. 179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/* 199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * $Id: ToXMLStream.java 469359 2006-10-31 03:43:19Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson package org.apache.xml.serializer; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.IOException; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.ErrorListener; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.Result; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.Transformer; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.TransformerException; 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.serializer.utils.MsgKey; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.serializer.utils.Utils; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.SAXException; 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class converts SAX or SAX-like calls to a 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * serialized xml document. The xsl:output method is "xml". 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This class is used explicitly in code generated by XSLTC, 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * so it is "public", but it should 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * be viewed as internal or package private, this is not an API. 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @xsl.usage internal 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class ToXMLStream extends ToStream 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Map that tells which XML characters should have special treatment, and it 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * provides character to entity name lookup. 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private CharInfo m_xmlcharInfo = 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson CharInfo.getCharInfo(CharInfo.XML_ENTITIES_RESOURCE, Method.XML); 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Default constructor. 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public ToXMLStream() 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_charInfo = m_xmlcharInfo; 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson initCDATA(); 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // initialize namespaces 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_prefixMap = new NamespaceMappings(); 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Copy properties from another SerializerToXML. 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param xmlListener non-null reference to a SerializerToXML object. 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void CopyFrom(ToXMLStream xmlListener) 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setWriter(xmlListener.m_writer); 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // m_outputStream = xmlListener.m_outputStream; 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String encoding = xmlListener.getEncoding(); 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setEncoding(encoding); 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setOmitXMLDeclaration(xmlListener.getOmitXMLDeclaration()); 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_ispreserve = xmlListener.m_ispreserve; 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_preserves = xmlListener.m_preserves; 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_isprevtext = xmlListener.m_isprevtext; 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_doIndent = xmlListener.m_doIndent; 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setIndentAmount(xmlListener.getIndentAmount()); 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_startNewLine = xmlListener.m_startNewLine; 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_needToOutputDocTypeDecl = xmlListener.m_needToOutputDocTypeDecl; 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setDoctypeSystem(xmlListener.getDoctypeSystem()); 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setDoctypePublic(xmlListener.getDoctypePublic()); 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setStandalone(xmlListener.getStandalone()); 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson setMediaType(xmlListener.getMediaType()); 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_encodingInfo = xmlListener.m_encodingInfo; 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_spaceBeforeClose = xmlListener.m_spaceBeforeClose; 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_cdataStartCalled = xmlListener.m_cdataStartCalled; 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Receive notification of the beginning of a document. 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException Any SAX exception, possibly 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * wrapping another exception. 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void startDocumentInternal() throws org.xml.sax.SAXException 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_needToCallStartDocument) 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.startDocumentInternal(); 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_needToCallStartDocument = false; 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_inEntityRef) 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_needToOutputDocTypeDecl = true; 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_startNewLine = false; 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* The call to getXMLVersion() might emit an error message 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * and we should emit this message regardless of if we are 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * writing out an XML header or not. 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String version = getXMLVersion(); 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (getOmitXMLDeclaration() == false) 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String encoding = Encodings.getMimeEncoding(getEncoding()); 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String standalone; 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_standaloneWasSpecified) 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson standalone = " standalone=\"" + getStandalone() + "\""; 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson standalone = ""; 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final java.io.Writer writer = m_writer; 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write("<?xml version=\""); 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(version); 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write("\" encoding=\""); 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(encoding); 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write('\"'); 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(standalone); 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write("?>"); 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_doIndent) { 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_standaloneWasSpecified 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || getDoctypePublic() != null 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || getDoctypeSystem() != null) { 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // We almost never put a newline after the XML 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // header because this XML could be used as 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // an extenal general parsed entity 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // and we don't know the context into which it 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // will be used in the future. Only when 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // standalone, or a doctype system or public is 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // specified are we free to insert a new line 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // after the header. Is it even worth bothering 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // in these rare cases? 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(m_lineSep, 0, m_lineSepLen); 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch(IOException e) 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new SAXException(e); 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Receive notification of the end of a document. 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException Any SAX exception, possibly 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * wrapping another exception. 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void endDocument() throws org.xml.sax.SAXException 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushPending(); 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_doIndent && !m_isprevtext) 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson outputLineSep(); 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch(IOException e) 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new SAXException(e); 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushWriter(); 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.fireEndDoc(); 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Starts a whitespace preserving section. All characters printed 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * within a preserving section are printed without indentation and 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * without consolidating multiple spaces. This is equivalent to 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the <tt>xml:space="preserve"</tt> attribute. Only XML 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * and HTML serializers need to support this method. 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The contents of the whitespace preserving section will be delivered 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * through the regular <tt>characters</tt> event. 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void startPreserving() throws org.xml.sax.SAXException 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Not sure this is really what we want. -sb 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_preserves.push(true); 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_ispreserve = true; 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Ends a whitespace preserving section. 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see #startPreserving 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void endPreserving() throws org.xml.sax.SAXException 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Not sure this is really what we want. -sb 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_ispreserve = m_preserves.isEmpty() ? false : m_preserves.pop(); 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Receive notification of a processing instruction. 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param target The processing instruction target. 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param data The processing instruction data, or null if 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * none was supplied. 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException Any SAX exception, possibly 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * wrapping another exception. 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void processingInstruction(String target, String data) 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws org.xml.sax.SAXException 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_inEntityRef) 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson flushPending(); 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (target.equals(Result.PI_DISABLE_OUTPUT_ESCAPING)) 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson startNonEscaping(); 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (target.equals(Result.PI_ENABLE_OUTPUT_ESCAPING)) 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson endNonEscaping(); 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_startTagOpen) 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson closeStartTag(); 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elemContext.m_startTagOpen = false; 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (m_needToCallStartDocument) 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson startDocumentInternal(); 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (shouldIndent()) 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson indent(); 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final java.io.Writer writer = m_writer; 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write("<?"); 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(target); 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (data.length() > 0 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson && !Character.isSpaceChar(data.charAt(0))) 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(' '); 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson int indexOfQLT = data.indexOf("?>"); 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (indexOfQLT >= 0) 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // See XSLT spec on error recovery of "?>" in PIs. 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (indexOfQLT > 0) 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(data.substring(0, indexOfQLT)); 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write("? >"); // add space between. 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ((indexOfQLT + 2) < data.length()) 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(data.substring(indexOfQLT + 2)); 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(data); 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write('?'); 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write('>'); 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Don't write out any indentation whitespace now, 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * because there may be non-whitespace text after this. 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Simply mark that at this point if we do decide 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to indent that we should 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * add a newline on the end of the current line before 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the indentation at the start of the next line. 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_startNewLine = true; 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch(IOException e) 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new SAXException(e); 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.fireEscapingEvent(target, data); 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Receive notivication of a entityReference. 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The name of the entity. 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws org.xml.sax.SAXException 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void entityReference(String name) throws org.xml.sax.SAXException 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_startTagOpen) 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson closeStartTag(); 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elemContext.m_startTagOpen = false; 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (shouldIndent()) 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson indent(); 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final java.io.Writer writer = m_writer; 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write('&'); 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(name); 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(';'); 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch(IOException e) 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new SAXException(e); 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_tracer != null) 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson super.fireEntityReference(name); 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method is used to add an attribute to the currently open element. 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The caller has guaranted that this attribute is unique, which means that it 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * not been seen before and will not be seen again. 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name the qualified name of the attribute 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value the value of the attribute which can contain only 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * ASCII printable characters characters in the range 32 to 127 inclusive. 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param flags the bit values of this integer give optimization information. 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addUniqueAttribute(String name, String value, int flags) 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws SAXException 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_startTagOpen) 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String patchedName = patchName(name); 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final java.io.Writer writer = m_writer; 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ((flags & NO_BAD_CHARS) > 0 && m_xmlcharInfo.onlyQuotAmpLtGt) 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // "flags" has indicated that the characters 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // '>' '<' '&' and '"' are not in the value and 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // m_htmlcharInfo has recorded that there are no other 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // entities in the range 32 to 127 so we write out the 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // value directly 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(' '); 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(patchedName); 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write("=\""); 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(value); 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write('"'); 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(' '); 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write(patchedName); 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write("=\""); 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writeAttrString(writer, value, this.getEncoding()); 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson writer.write('"'); 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } catch (IOException e) { 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new SAXException(e); 4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Add an attribute to the current element. 4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param uri the URI associated with the element name 4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param localName local part of the attribute name 4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param rawName prefix:localName 4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param type 4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value the value of the attribute 4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param xslAttribute true if this attribute is from an xsl:attribute, 4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * false if declared within the elements opening tag. 4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws SAXException 4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void addAttribute( 4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String uri, 4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String localName, 4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String rawName, 4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String type, 4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String value, 4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean xslAttribute) 4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws SAXException 4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_startTagOpen) 4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean was_added = addAttributeAlways(uri, localName, rawName, type, value, xslAttribute); 4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* 4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * We don't run this block of code if: 4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 1. The attribute value was only replaced (was_added is false). 4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2. The attribute is from an xsl:attribute element (that is handled 4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * in the addAttributeAlways() call just above. 4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3. The name starts with "xmlns", i.e. it is a namespace declaration. 4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (was_added && !xslAttribute && !rawName.startsWith("xmlns")) 4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String prefixUsed = 4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ensureAttributesNamespaceIsDeclared( 4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson uri, 4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson localName, 4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson rawName); 4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (prefixUsed != null 4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson && rawName != null 4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson && !rawName.startsWith(prefixUsed)) 4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // use a different raw name, with the prefix used in the 4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // generated namespace declaration 4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson rawName = prefixUsed + ":" + localName; 4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson addAttributeAlways(uri, localName, rawName, type, value, xslAttribute); 4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* 4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The startTag is closed, yet we are adding an attribute? 4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Section: 7.1.3 Creating Attributes Adding an attribute to an 4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * element after a PI (for example) has been added to it is an 4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * error. The attributes can be ignored. The spec doesn't explicitly 4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * say this is disallowed, as it does for child elements, but it 4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * makes sense to have the same treatment. 4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * We choose to ignore the attribute which is added too late. 4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Generate a warning of the ignored attributes 4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Create the warning message 4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String msg = Utils.messages.createMessage( 4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson MsgKey.ER_ILLEGAL_ATTRIBUTE_POSITION,new Object[]{ localName }); 4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Prepare to issue the warning message 4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Transformer tran = super.getTransformer(); 4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ErrorListener errHandler = tran.getErrorListener(); 4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Issue the warning message 4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != errHandler && m_sourceLocator != null) 4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson errHandler.warning(new TransformerException(msg, m_sourceLocator)); 4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson System.out.println(msg); 5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerException e){ 5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // A user defined error handler, errHandler, may throw 5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // a TransformerException if it chooses to, and if it does 5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // we will wrap it with a SAXException and re-throw. 5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Of course if the handler throws another type of 5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // exception, like a RuntimeException, then that is OK too. 5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson SAXException se = new SAXException(e); 5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw se; 5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @see ExtendedContentHandler#endElement(String) 5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void endElement(String elemName) throws SAXException 5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson endElement(null, null, elemName); 5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method is used to notify the serializer of a namespace mapping (or node) 5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * that applies to the current element whose startElement() call has already been seen. 5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The official SAX startPrefixMapping(prefix,uri) is to define a mapping for a child 5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * element that is soon to be seen with a startElement() call. The official SAX call 5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * does not apply to the current element, hence the reason for this method. 5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void namespaceAfterStartElement( 5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String prefix, 5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson final String uri) 5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws SAXException 5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // hack for XSLTC with finding URI for default namespace 5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_elemContext.m_elementURI == null) 5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String prefix1 = getPrefixPart(m_elemContext.m_elementName); 5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (prefix1 == null && EMPTYSTRING.equals(prefix)) 5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the elements URI is not known yet, and it 5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // doesn't have a prefix, and we are currently 5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // setting the uri for prefix "", so we have 5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the uri for the element... lets remember it 5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_elemContext.m_elementURI = uri; 5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson startPrefixMapping(prefix,uri,false); 5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * From XSLTC 5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Declare a prefix to point to a namespace URI. Inform SAX handler 5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * if this is a new prefix mapping. 5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson protected boolean pushNamespace(String prefix, String uri) 5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_prefixMap.pushNamespace( 5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson prefix, uri, m_elemContext.m_currentElemDepth)) 5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson startPrefixMapping(prefix, uri); 5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (SAXException e) 5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // falls through 5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Try's to reset the super class and reset this class for 5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * re-use, so that you don't need to create a new serializer 5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * (mostly for performance reasons). 5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return true if the class was successfuly reset. 5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean reset() 5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson boolean wasReset = false; 5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (super.reset()) 5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Make this call when resetToXMLStream does 5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // something. 5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // resetToXMLStream(); 5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson wasReset = true; 5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return wasReset; 5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Reset all of the fields owned by ToStream class 5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private void resetToXMLStream() 5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // This is an empty method, but is kept for future use 6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // as a place holder for a location to reset fields 6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // defined within this class 6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return; 6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This method checks for the XML version of output document. 6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If XML version of output document is not specified, then output 6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document is of version XML 1.0. 6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * If XML version of output doucment is specified, but it is not either 6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * XML 1.0 or XML 1.1, a warning message is generated, the XML Version of 6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * output document is set to XML 1.0 and processing continues. 6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return string (XML version) 6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String getXMLVersion() 6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String xmlVersion = getVersion(); 6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(xmlVersion == null || xmlVersion.equals(XMLVERSION10)) 6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson xmlVersion = XMLVERSION10; 6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if(xmlVersion.equals(XMLVERSION11)) 6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson xmlVersion = XMLVERSION11; 6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String msg = Utils.messages.createMessage( 6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson MsgKey.ER_XML_VERSION_NOT_SUPPORTED,new Object[]{ xmlVersion }); 6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Prepare to issue the warning message 6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Transformer tran = super.getTransformer(); 6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson ErrorListener errHandler = tran.getErrorListener(); 6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Issue the warning message 6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != errHandler && m_sourceLocator != null) 6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson errHandler.warning(new TransformerException(msg, m_sourceLocator)); 6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson System.out.println(msg); 6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (Exception e){} 6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson xmlVersion = XMLVERSION10; 6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return xmlVersion; 6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 647