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: TransformerFactoryImpl.java 468640 2006-10-28 06:53:53Z minchau $ 209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpackage org.apache.xalan.processor; 229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.BufferedInputStream; 249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.IOException; 259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.io.InputStream; 269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Enumeration; 279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport java.util.Properties; 289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.XMLConstants; 309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.ErrorListener; 319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.Source; 329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.Templates; 339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.Transformer; 349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.TransformerConfigurationException; 359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.TransformerException; 369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.URIResolver; 379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.dom.DOMResult; 389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.dom.DOMSource; 399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.sax.SAXResult; 409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.sax.SAXSource; 419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.sax.SAXTransformerFactory; 429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.sax.TemplatesHandler; 439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.sax.TransformerHandler; 449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.stream.StreamResult; 459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport javax.xml.transform.stream.StreamSource; 469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.res.XSLMessages; 489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.res.XSLTErrorResources; 499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.transformer.TrAXFilter; 509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.transformer.TransformerIdentityImpl; 519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.transformer.TransformerImpl; 529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xalan.transformer.XalanProperties; 539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.dtm.ref.sax2dtm.SAX2DTM; 559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.DefaultErrorHandler; 569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.SystemIDResolver; 579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.TreeWalker; 589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.StylesheetPIHandler; 599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.apache.xml.utils.StopParseException; 609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.w3c.dom.Node; 629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.InputSource; 649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.XMLFilter; 659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.XMLReader; 669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonimport org.xml.sax.helpers.XMLReaderFactory; 679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson/** 699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The TransformerFactoryImpl, which implements the TRaX TransformerFactory 709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * interface, processes XSLT stylesheets into a Templates object 719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * (a StylesheetRoot). 729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilsonpublic class TransformerFactoryImpl extends SAXTransformerFactory 749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson{ 759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The path/filename of the property file: XSLTInfo.properties 779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Maintenance note: see also 789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>org.apache.xpath.functions.FuncSystemProperty.XSLT_PROPERTIES</code> 799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final String XSLT_PROPERTIES = 819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson "org/apache/xalan/res/XSLTInfo.properties"; 829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>State of secure processing feature.</p> 859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean m_isSecureProcessing = false; 879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Constructor TransformerFactoryImpl 909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public TransformerFactoryImpl() 939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Static string to be used for incremental feature */ 979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final String FEATURE_INCREMENTAL = 989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson "http://xml.apache.org/xalan/features/incremental"; 999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Static string to be used for optimize feature */ 1019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final String FEATURE_OPTIMIZE = 1029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson "http://xml.apache.org/xalan/features/optimize"; 1039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Static string to be used for source_location feature */ 1059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public static final String FEATURE_SOURCE_LOCATION = 1069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XalanProperties.SOURCE_LOCATION; 1079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public javax.xml.transform.Templates processFromNode(Node node) 1099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 1109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 1139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson TemplatesHandler builder = newTemplatesHandler(); 1159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson TreeWalker walker = new TreeWalker(builder, 1169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new org.apache.xml.utils.DOM2Helper(), 1179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson builder.getSystemId()); 1189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson walker.traverse(node); 1209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return builder.getTemplates(); 1229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (org.xml.sax.SAXException se) 1249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_errorListener != null) 1269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 1289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_errorListener.fatalError(new TransformerException(se)); 1309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerConfigurationException ex) 1329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex; 1349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerException ex) 1369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(ex); 1389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 1419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 1439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Should remove this later... but right now diagnostics from 1469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TransformerConfigurationException are not good. 1479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // se.printStackTrace(); 1489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(XSLMessages.createMessage(XSLTErrorResources.ER_PROCESSFROMNODE_FAILED, null), se); 1499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //"processFromNode failed", se); 1509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerConfigurationException tce) 1539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Assume it's already been reported to the error listener. 1559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw tce; 1569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* catch (TransformerException tce) 1589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Assume it's already been reported to the error listener. 1609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(tce.getMessage(), tce); 1619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson }*/ 1629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (Exception e) 1639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_errorListener != null) 1659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 1679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_errorListener.fatalError(new TransformerException(e)); 1699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerConfigurationException ex) 1719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex; 1739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerException ex) 1759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(ex); 1779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 1809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 1829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 1839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Should remove this later... but right now diagnostics from 1849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // TransformerConfigurationException are not good. 1859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // se.printStackTrace(); 1869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(XSLMessages.createMessage(XSLTErrorResources.ER_PROCESSFROMNODE_FAILED, null), e); //"processFromNode failed", 1879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson //e); 1889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 1919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The systemID that was specified in 1949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * processFromNode(Node node, String systemID). 1959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 1969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private String m_DOMsystemID = null; 1979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 1989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 1999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The systemID that was specified in 2009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * processFromNode(Node node, String systemID). 2019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The systemID, or null. 2039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String getDOMsystemID() 2059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_DOMsystemID; 2079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Process the stylesheet from a DOM tree, if the 2119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * processor supports the "http://xml.org/trax/features/dom/input" 2129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * feature. 2139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param node A DOM tree which must contain 2159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * valid transform instructions that this processor understands. 2169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param systemID The systemID from where xsl:includes and xsl:imports 2179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * should be resolved from. 2189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A Templates object capable of being used for transformation purposes. 2209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException 2229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson javax.xml.transform.Templates processFromNode(Node node, String systemID) 2249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 2259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_DOMsystemID = systemID; 2289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return processFromNode(node); 2309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 2339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get InputSource specification(s) that are associated with the 2349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * given document specified in the source param, 2359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * via the xml-stylesheet processing instruction 2369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * (see http://www.w3.org/TR/xml-stylesheet/), and that matches 2379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the given criteria. Note that it is possible to return several stylesheets 2389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * that match the criteria, in which case they are applied as if they were 2399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a list of imports or cascades. 2409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>Note that DOM2 has it's own mechanism for discovering stylesheets. 2429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Therefore, there isn't a DOM version of this method.</p> 2439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param source The XML source that is to be searched. 2469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param media The media attribute to be matched. May be null, in which 2479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * case the prefered templates will be used (i.e. alternate = no). 2489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param title The value of the title attribute to match. May be null. 2499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param charset The value of the charset attribute to match. May be null. 2509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A Source object capable of being used to create a Templates object. 2529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 2539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException 2549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 2559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Source getAssociatedStylesheet( 2569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Source source, String media, String title, String charset) 2579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 2589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String baseID; 2619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson InputSource isource = null; 2629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Node node = null; 2639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLReader reader = null; 2649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (source instanceof DOMSource) 2669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DOMSource dsource = (DOMSource) source; 2689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson node = dsource.getNode(); 2709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson baseID = dsource.getSystemId(); 2719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 2739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson isource = SAXSource.sourceToInputSource(source); 2759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson baseID = isource.getSystemId(); 2769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // What I try to do here is parse until the first startElement 2799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // is found, then throw a special exception in order to terminate 2809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the parse. 2819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson StylesheetPIHandler handler = new StylesheetPIHandler(baseID, media, 2829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson title, charset); 2839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Use URIResolver. Patch from Dmitri Ilyin 2859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_uriResolver != null) 2869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson handler.setURIResolver(m_uriResolver); 2889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 2919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != node) 2939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 2949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson TreeWalker walker = new TreeWalker(handler, new org.apache.xml.utils.DOM2Helper(), baseID); 2959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 2969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson walker.traverse(node); 2979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 2989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 2999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Use JAXP1.1 ( if possible ) 3029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 3039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson javax.xml.parsers.SAXParserFactory factory = 3059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson javax.xml.parsers.SAXParserFactory.newInstance(); 3069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson factory.setNamespaceAware(true); 3089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_isSecureProcessing) 3109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 3129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); 3149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (org.xml.sax.SAXException e) {} 3169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson javax.xml.parsers.SAXParser jaxpParser = factory.newSAXParser(); 3199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson reader = jaxpParser.getXMLReader(); 3219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (javax.xml.parsers.ParserConfigurationException ex) 3239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new org.xml.sax.SAXException(ex); 3259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (javax.xml.parsers.FactoryConfigurationError ex1) 3279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new org.xml.sax.SAXException(ex1.toString()); 3299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (NoSuchMethodError ex2){} 3319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (AbstractMethodError ame){} 3329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == reader) 3349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson reader = XMLReaderFactory.createXMLReader(); 3369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Need to set options! 3399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson reader.setContentHandler(handler); 3409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson reader.parse(isource); 3419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (StopParseException spe) 3449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // OK, good. 3479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (org.xml.sax.SAXException se) 3499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException( 3519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson "getAssociatedStylesheets failed", se); 3529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (IOException ioe) 3549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException( 3569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson "getAssociatedStylesheets failed", ioe); 3579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return handler.getAssociatedStylesheet(); 3609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create a new Transformer object that performs a copy 3649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * of the source to the result. 3659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A Transformer object that may be used to perform a transformation 3679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * in a single thread, never null. 3689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException May throw this during 3709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the parse when it is constructing the 3719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Templates object and fails. 3729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 3739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public TemplatesHandler newTemplatesHandler() 3749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 3759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 3769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new StylesheetHandler(this); 3779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 3789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 3799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 3809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>Set a feature for this <code>TransformerFactory</code> and <code>Transformer</code>s 3819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or <code>Template</code>s created by this factory.</p> 3829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p> 3849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Feature names are fully qualified {@link java.net.URI}s. 3859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Implementations may define their own features. 3869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * An {@link TransformerConfigurationException} is thrown if this <code>TransformerFactory</code> or the 3879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <code>Transformer</code>s or <code>Template</code>s it creates cannot support the feature. 3889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * It is possible for an <code>TransformerFactory</code> to expose a feature value but be unable to change its state. 3899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * </p> 3909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>See {@link javax.xml.transform.TransformerFactory} for full documentation of specific features.</p> 3929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name Feature name. 3949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value Is feature state <code>true</code> or <code>false</code>. 3959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 3969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException if this <code>TransformerFactory</code> 3979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or the <code>Transformer</code>s or <code>Template</code>s it creates cannot support this feature. 3989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws NullPointerException If the <code>name</code> parameter is null. 3999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setFeature(String name, boolean value) 4019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException { 4029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // feature name cannot be null 4049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (name == null) { 4059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new NullPointerException( 4069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLMessages.createMessage( 4079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTErrorResources.ER_SET_FEATURE_NULL_NAME, null)); 4089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // secure processing? 4119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) { 4129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_isSecureProcessing = value; 4139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // This implementation does not support the setting of a feature other than 4159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // the secure processing feature. 4169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException( 4199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLMessages.createMessage( 4209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTErrorResources.ER_UNSUPPORTED_FEATURE, 4219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson new Object[] {name})); 4229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Look up the value of a feature. 4279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * <p>The feature name is any fully-qualified URI. It is 4289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * possible for an TransformerFactory to recognize a feature name but 4299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * to be unable to return its value; this is especially true 4309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * in the case of an adapter for a SAX1 Parser, which has 4319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * no way of knowing whether the underlying parser is 4329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * validating, for example.</p> 4339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The feature name, which is a fully-qualified URI. 4359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The current state of the feature (true or false). 4369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean getFeature(String name) { 4389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // feature name cannot be null 4409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (name == null) 4419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 4429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new NullPointerException( 4439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLMessages.createMessage( 4449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTErrorResources.ER_GET_FEATURE_NULL_NAME, null)); 4459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Try first with identity comparison, which 4489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // will be faster. 4499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if ((DOMResult.FEATURE == name) || (DOMSource.FEATURE == name) 4509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (SAXResult.FEATURE == name) || (SAXSource.FEATURE == name) 4519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (StreamResult.FEATURE == name) 4529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (StreamSource.FEATURE == name) 4539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (SAXTransformerFactory.FEATURE == name) 4549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (SAXTransformerFactory.FEATURE_XMLFILTER == name)) 4559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 4569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if ((DOMResult.FEATURE.equals(name)) 4579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (DOMSource.FEATURE.equals(name)) 4589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (SAXResult.FEATURE.equals(name)) 4599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (SAXSource.FEATURE.equals(name)) 4609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (StreamResult.FEATURE.equals(name)) 4619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (StreamSource.FEATURE.equals(name)) 4629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (SAXTransformerFactory.FEATURE.equals(name)) 4639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson || (SAXTransformerFactory.FEATURE_XMLFILTER.equals(name))) 4649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return true; 4659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // secure processing? 4669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (name.equals(XMLConstants.FEATURE_SECURE_PROCESSING)) 4679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_isSecureProcessing; 4689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 4699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // unknown feature 4709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return false; 4719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 4729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Flag set by FEATURE_OPTIMIZE. 4759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This feature specifies whether to Optimize stylesheet processing. By 4769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * default it is set to true. 4779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean m_optimize = true; 4799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** Flag set by FEATURE_SOURCE_LOCATION. 4819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This feature specifies whether the transformation phase should 4829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * keep track of line and column numbers for the input source 4839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * document. Note that this works only when that 4849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * information is available from the source -- in other words, if you 4859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * pass in a DOM, there's little we can do for you. 4869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 4879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The default is false. Setting it true may significantly 4889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * increase storage cost per node. 4899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean m_source_location = false; 4919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 4929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 4939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Flag set by FEATURE_INCREMENTAL. 4949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * This feature specifies whether to produce output incrementally, rather than 4959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * waiting to finish parsing the input before generating any output. By 4969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * default this attribute is set to false. 4979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 4989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private boolean m_incremental = false; 4999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Allows the user to set specific attributes on the underlying 5029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * implementation. 5039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The name of the attribute. 5059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param value The value of the attribute; Boolean or String="true"|"false" 5069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws IllegalArgumentException thrown if the underlying 5089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * implementation doesn't recognize the attribute. 5099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setAttribute(String name, Object value) 5119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws IllegalArgumentException 5129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (name.equals(FEATURE_INCREMENTAL)) 5149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(value instanceof Boolean) 5169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Accept a Boolean object.. 5189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_incremental = ((Boolean)value).booleanValue(); 5199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if(value instanceof String) 5219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // .. or a String object 5239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_incremental = (new Boolean((String)value)).booleanValue(); 5249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 5269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Give a more meaningful error message 5289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new IllegalArgumentException(XSLMessages.createMessage(XSLTErrorResources.ER_BAD_VALUE, new Object[]{name, value})); //name + " bad value " + value); 5299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (name.equals(FEATURE_OPTIMIZE)) 5329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(value instanceof Boolean) 5349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Accept a Boolean object.. 5369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_optimize = ((Boolean)value).booleanValue(); 5379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if(value instanceof String) 5399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // .. or a String object 5419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_optimize = (new Boolean((String)value)).booleanValue(); 5429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 5449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Give a more meaningful error message 5469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new IllegalArgumentException(XSLMessages.createMessage(XSLTErrorResources.ER_BAD_VALUE, new Object[]{name, value})); //name + " bad value " + value); 5479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Custom Xalan feature: annotate DTM with SAX source locator fields. 5519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // This gets used during SAX2DTM instantiation. 5529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // 5539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %REVIEW% Should the name of this field really be in XalanProperties? 5549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // %REVIEW% I hate that it's a global static, but didn't want to change APIs yet. 5559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if(name.equals(FEATURE_SOURCE_LOCATION)) 5569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if(value instanceof Boolean) 5589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Accept a Boolean object.. 5609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_source_location = ((Boolean)value).booleanValue(); 5619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if(value instanceof String) 5639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // .. or a String object 5659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_source_location = (new Boolean((String)value)).booleanValue(); 5669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 5689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Give a more meaningful error message 5709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new IllegalArgumentException(XSLMessages.createMessage(XSLTErrorResources.ER_BAD_VALUE, new Object[]{name, value})); //name + " bad value " + value); 5719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 5759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new IllegalArgumentException(XSLMessages.createMessage(XSLTErrorResources.ER_NOT_SUPPORTED, new Object[]{name})); //name + "not supported"); 5779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 5809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 5819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Allows the user to retrieve specific attributes on the underlying 5829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * implementation. 5839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param name The name of the attribute. 5859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return value The value of the attribute. 5869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 5879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws IllegalArgumentException thrown if the underlying 5889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * implementation doesn't recognize the attribute. 5899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 5909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Object getAttribute(String name) throws IllegalArgumentException 5919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (name.equals(FEATURE_INCREMENTAL)) 5939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new Boolean(m_incremental); 5959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 5969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (name.equals(FEATURE_OPTIMIZE)) 5979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 5989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new Boolean(m_optimize); 5999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else if (name.equals(FEATURE_SOURCE_LOCATION)) 6019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new Boolean(m_source_location); 6039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 6059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new IllegalArgumentException(XSLMessages.createMessage(XSLTErrorResources.ER_ATTRIB_VALUE_NOT_RECOGNIZED, new Object[]{name})); //name + " attribute not recognized"); 6069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create an XMLFilter that uses the given source as the 6109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * transformation instructions. 6119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param src The source of the transformation instructions. 6139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return An XMLFilter object, or null if this feature is not supported. 6159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException 6179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XMLFilter newXMLFilter(Source src) 6199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 6209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Templates templates = newTemplates(src); 6239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if( templates==null ) return null; 6249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return newXMLFilter(templates); 6269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create an XMLFilter that uses the given source as the 6309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * transformation instructions. 6319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param templates non-null reference to Templates object. 6339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return An XMLFilter object, or null if this feature is not supported. 6359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException 6379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public XMLFilter newXMLFilter(Templates templates) 6399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 6409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 6429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new TrAXFilter(templates); 6449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch( TransformerConfigurationException ex ) 6469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if( m_errorListener != null) 6489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 6509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_errorListener.fatalError( ex ); 6529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 6539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch( TransformerConfigurationException ex1 ) 6559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex1; 6579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch( TransformerException ex1 ) 6599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(ex1); 6619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex; 6649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get a TransformerHandler object that can process SAX 6699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * ContentHandler events into a Result, based on the transformation 6709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * instructions specified by the argument. 6719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param src The source of the transformation instructions. 6739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return TransformerHandler ready to transform SAX events. 6759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException 6779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public TransformerHandler newTransformerHandler(Source src) 6799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 6809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 6819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Templates templates = newTemplates(src); 6839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if( templates==null ) return null; 6849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return newTransformerHandler(templates); 6869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 6879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 6889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 6899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get a TransformerHandler object that can process SAX 6909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * ContentHandler events into a Result, based on the Templates argument. 6919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param templates The source of the transformation instructions. 6939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 6949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return TransformerHandler ready to transform SAX events. 6959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException 6969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 6979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public TransformerHandler newTransformerHandler(Templates templates) 6989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 6999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try { 7019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson TransformerImpl transformer = 7029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson (TransformerImpl) templates.newTransformer(); 7039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson transformer.setURIResolver(m_uriResolver); 7049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson TransformerHandler th = 7059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson (TransformerHandler) transformer.getInputContentHandler(true); 7069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return th; 7089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch( TransformerConfigurationException ex ) 7109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if( m_errorListener != null ) 7129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 7149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_errorListener.fatalError( ex ); 7169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 7179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerConfigurationException ex1 ) 7199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex1; 7219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerException ex1 ) 7239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(ex1); 7259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex; 7299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// /** The identity transform string, for support of newTransformerHandler() 7349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * and newTransformer(). */ 7359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// private static final String identityTransform = 7369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// "<xsl:stylesheet " + "xmlns:xsl='http://www.w3.org/1999/XSL/Transform' " 7379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// + "version='1.0'>" + "<xsl:template match='/|node()'>" 7389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// + "<xsl:copy-of select='.'/>" + "</xsl:template>" + "</xsl:stylesheet>"; 7399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// 7409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// /** The identity transform Templates, built from identityTransform, 7419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// * for support of newTransformerHandler() and newTransformer(). */ 7429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson// private static Templates m_identityTemplate = null; 7439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get a TransformerHandler object that can process SAX 7469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * ContentHandler events into a Result. 7479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return TransformerHandler ready to transform SAX events. 7499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException 7519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public TransformerHandler newTransformerHandler() 7539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 7549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new TransformerIdentityImpl(m_isSecureProcessing); 7569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 7589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 7599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Process the source into a Transformer object. Care must 7609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * be given to know that this object can not be used concurrently 7619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * in multiple threads. 7629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param source An object that holds a URL, input stream, etc. 7649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A Transformer object capable of 7669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * being used for transformation purposes in a single thread. 7679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 7689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException May throw this during the parse when it 7699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * is constructing the Templates object and fails. 7709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Transformer newTransformer(Source source) 7729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 7739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 7759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Templates tmpl=newTemplates( source ); 7779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /* this can happen if an ErrorListener is present and it doesn't 7789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw any exception in fatalError. 7799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson The spec says: "a Transformer must use this interface 7809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson instead of throwing an exception" - the newTemplates() does 7819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson that, and returns null. 7829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 7839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if( tmpl==null ) return null; 7849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Transformer transformer = tmpl.newTransformer(); 7859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson transformer.setURIResolver(m_uriResolver); 7869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return transformer; 7879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch( TransformerConfigurationException ex ) 7899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if( m_errorListener != null ) 7919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 7939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_errorListener.fatalError( ex ); 7959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; // TODO: but the API promises to never return null... 7969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 7979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch( TransformerConfigurationException ex1 ) 7989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 7999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex1; 8009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch( TransformerException ex1 ) 8029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException( ex1 ); 8049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex; 8079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Create a new Transformer object that performs a copy 8129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * of the source to the result. 8139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A Transformer object capable of 8159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * being used for transformation purposes in a single thread. 8169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException May throw this during 8189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * the parse when it is constructing the 8199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Templates object and it fails. 8209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Transformer newTransformer() throws TransformerConfigurationException 8229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return new TransformerIdentityImpl(m_isSecureProcessing); 8249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 8279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Process the source into a Templates object, which is likely 8289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a compiled representation of the source. This Templates object 8299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * may then be used concurrently across multiple threads. Creating 8309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * a Templates object allows the TransformerFactory to do detailed 8319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * performance optimization of transformation instructions, without 8329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * penalizing runtime transformation. 8339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param source An object that holds a URL, input stream, etc. 8359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A Templates object capable of being used for transformation purposes. 8369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 8379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws TransformerConfigurationException May throw this during the parse when it 8389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * is constructing the Templates object and fails. 8399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 8409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public Templates newTemplates(Source source) 8419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws TransformerConfigurationException 8429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String baseID = source.getSystemId(); 8459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != baseID) { 8479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson baseID = SystemIDResolver.getAbsoluteURI(baseID); 8489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (source instanceof DOMSource) 8529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson DOMSource dsource = (DOMSource) source; 8549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson Node node = dsource.getNode(); 8559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null != node) 8579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return processFromNode(node, baseID); 8589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 8599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson String messageStr = XSLMessages.createMessage( 8619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XSLTErrorResources.ER_ILLEGAL_DOMSOURCE_INPUT, null); 8629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new IllegalArgumentException(messageStr); 8649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson TemplatesHandler builder = newTemplatesHandler(); 8689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson builder.setSystemId(baseID); 8699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 8719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson InputSource isource = SAXSource.sourceToInputSource(source); 8739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson isource.setSystemId(baseID); 8749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson XMLReader reader = null; 8759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (source instanceof SAXSource) 8779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson reader = ((SAXSource) source).getXMLReader(); 8789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == reader) 8809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // Use JAXP1.1 ( if possible ) 8839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 8849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson javax.xml.parsers.SAXParserFactory factory = 8869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson javax.xml.parsers.SAXParserFactory.newInstance(); 8879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson factory.setNamespaceAware(true); 8899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_isSecureProcessing) 8919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 8939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 8949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); 8959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (org.xml.sax.SAXException se) {} 8979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 8989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 8999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson javax.xml.parsers.SAXParser jaxpParser = factory.newSAXParser(); 9009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson reader = jaxpParser.getXMLReader(); 9029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (javax.xml.parsers.ParserConfigurationException ex) 9049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new org.xml.sax.SAXException(ex); 9069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (javax.xml.parsers.FactoryConfigurationError ex1) 9089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new org.xml.sax.SAXException(ex1.toString()); 9109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (NoSuchMethodError ex2){} 9129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (AbstractMethodError ame){} 9139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == reader) 9169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson reader = XMLReaderFactory.createXMLReader(); 9179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // If you set the namespaces to true, we'll end up getting double 9199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // xmlns attributes. Needs to be fixed. -sb 9209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // reader.setFeature("http://xml.org/sax/features/namespace-prefixes", true); 9219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson reader.setContentHandler(builder); 9229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson reader.parse(isource); 9239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (org.xml.sax.SAXException se) 9259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_errorListener != null) 9279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 9299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_errorListener.fatalError(new TransformerException(se)); 9319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerConfigurationException ex1) 9339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex1; 9359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerException ex1) 9379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(ex1); 9399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 9429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(se.getMessage(), se); 9449f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9459f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9469f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (Exception e) 9479f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9489f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (m_errorListener != null) 9499f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9509f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson try 9519f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9529f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_errorListener.fatalError(new TransformerException(e)); 9539f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return null; 9549f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9559f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerConfigurationException ex1) 9569f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9579f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw ex1; 9589f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9599f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson catch (TransformerException ex1) 9609f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9619f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(ex1); 9629f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9639f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9649f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson else 9659f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9669f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new TransformerConfigurationException(e.getMessage(), e); 9679f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9689f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9699f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9709f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return builder.getTemplates(); 9719f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9729f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9739f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9749f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * The object that implements the URIResolver interface, 9759f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or null. 9769f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9779f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson URIResolver m_uriResolver; 9789f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9799f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9809f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set an object that will be used to resolve URIs used in 9819f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * xsl:import, etc. This will be used as the default for the 9829f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * transformation. 9839f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param resolver An object that implements the URIResolver interface, 9849f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * or null. 9859f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9869f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setURIResolver(URIResolver resolver) 9879f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 9889f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_uriResolver = resolver; 9899f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 9909f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 9919f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 9929f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the object that will be used to resolve URIs used in 9939f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * xsl:import, etc. This will be used as the default for the 9949f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * transformation. 9959f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 9969f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return The URIResolver that was set with setURIResolver. 9979f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 9989f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public URIResolver getURIResolver() 9999f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10009f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_uriResolver; 10019f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10029f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10039f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** The error listener. */ 10049f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson private ErrorListener m_errorListener = new org.apache.xml.utils.DefaultErrorHandler(false); 10059f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10069f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10079f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Get the error listener in effect for the TransformerFactory. 10089f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10099f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return A non-null reference to an error listener. 10109f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10119f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public ErrorListener getErrorListener() 10129f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10139f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_errorListener; 10149f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10159f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10169f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10179f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Set an error listener for the TransformerFactory. 10189f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10199f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @param listener Must be a non-null reference to an ErrorListener. 10209f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10219f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @throws IllegalArgumentException if the listener argument is null. 10229f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10239f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public void setErrorListener(ErrorListener listener) 10249f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throws IllegalArgumentException 10259f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10269f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10279f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson if (null == listener) 10289f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson throw new IllegalArgumentException(XSLMessages.createMessage(XSLTErrorResources.ER_ERRORLISTENER, null)); 10299f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson // "ErrorListener"); 10309f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10319f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson m_errorListener = listener; 10329f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10339f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson 10349f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson /** 10359f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * Return the state of the secure processing feature. 10369f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * 10379f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson * @return state of the secure processing feature. 10389f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson */ 10399f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson public boolean isSecureProcessing() 10409f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson { 10419f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson return m_isSecureProcessing; 10429f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson } 10439f8118474e9513f7a5b7d2a05e4a0fb15d1a6569Jesse Wilson} 1044