/* */ public Document newDocument(String uri, String qname) /* */ throws ParserConfigurationException /* */ { /* 769 */ if (this._domImplementation == null) { /* 770 */ DocumentBuilderFactory dbf = FactoryImpl.getDOMFactory(this._useServicesMechanism); /* 771 */ this._domImplementation = dbf.newDocumentBuilder().getDOMImplementation(); /* */ } /* 773 */ return this._domImplementation.createDocument(uri, qname, null); /* */ }
/** * Retrieves a cached XMLReader for this thread, or creates a new XMLReader, if the existing * reader is in use. When the caller no longer needs the reader, it must release it with a call to * {@link #releaseXMLReader}. */ public synchronized XMLReader getXMLReader() throws SAXException { XMLReader reader; if (m_readers == null) { // When the m_readers.get() method is called for the first time // on a thread, a new XMLReader will automatically be created. m_readers = new ThreadLocal(); } if (m_inUse == null) { m_inUse = new HashMap(); } // If the cached reader for this thread is in use, construct a new // one; otherwise, return the cached reader unless it isn't an // instance of the class set in the 'org.xml.sax.driver' property reader = (XMLReader) m_readers.get(); boolean threadHasReader = (reader != null); String factory = SecuritySupport.getSystemProperty(property); if (threadHasReader && m_inUse.get(reader) != Boolean.TRUE && (factory == null || reader.getClass().getName().equals(factory))) { m_inUse.put(reader, Boolean.TRUE); } else { try { try { // According to JAXP 1.2 specification, if a SAXSource // is created using a SAX InputSource the Transformer or // TransformerFactory creates a reader via the // XMLReaderFactory if setXMLReader is not used reader = XMLReaderFactory.createXMLReader(); try { reader.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, _secureProcessing); } catch (SAXNotRecognizedException e) { System.err.println("Warning: " + reader.getClass().getName() + ": " + e.getMessage()); } } catch (Exception e) { try { // If unable to create an instance, let's try to use // the XMLReader from JAXP if (m_parserFactory == null) { m_parserFactory = FactoryImpl.getSAXFactory(m_useServicesMechanism); m_parserFactory.setNamespaceAware(true); } reader = m_parserFactory.newSAXParser().getXMLReader(); } catch (ParserConfigurationException pce) { throw pce; // pass along pce } } try { reader.setFeature(NAMESPACES_FEATURE, true); reader.setFeature(NAMESPACE_PREFIXES_FEATURE, false); } catch (SAXException se) { // Try to carry on if we've got a parser that // doesn't know about namespace prefixes. } } catch (ParserConfigurationException ex) { throw new SAXException(ex); } catch (FactoryConfigurationError ex1) { throw new SAXException(ex1.toString()); } catch (NoSuchMethodError ex2) { } catch (AbstractMethodError ame) { } // Cache the XMLReader if this is the first time we've created // a reader for this thread. if (!threadHasReader) { m_readers.set(reader); m_inUse.put(reader, Boolean.TRUE); } } try { // reader is cached, but this property might have been reset reader.setProperty(XMLConstants.ACCESS_EXTERNAL_DTD, _accessExternalDTD); } catch (SAXException se) { System.err.println("Warning: " + reader.getClass().getName() + ": " + se.getMessage()); } try { if (_xmlSecurityManager != null) { for (XMLSecurityManager.Limit limit : XMLSecurityManager.Limit.values()) { reader.setProperty(limit.apiProperty(), _xmlSecurityManager.getLimitValueAsString(limit)); } if (_xmlSecurityManager.printEntityCountInfo()) { reader.setProperty(XalanConstants.JDK_ENTITY_COUNT_INFO, XalanConstants.JDK_YES); } } } catch (SAXException se) { System.err.println("Warning: " + reader.getClass().getName() + ": " + se.getMessage()); } return reader; }