code: synchronized public XMLReader getXMLReader(Source inputSource)
    {
  
      try
      {
        XMLReader reader = (inputSource instanceof SAXSource)
                           ? ((SAXSource) inputSource).getXMLReader() : null;
  
        // If user did not supply a reader, ask for one from the reader manager
        if (null == reader) {
          if (m_readerManager == null) {
              m_readerManager = XMLReaderManager.getInstance();
          }
  
          reader = m_readerManager.getXMLReader();
        }
  
        return reader;
  
      } catch (SAXException se) {
        throw new DTMException(se.getMessage(), se);
      }
    }
docs: This method returns the SAX2 parser to use with the InputSource
  obtained from this URI.
  It may return null if any SAX2-conformant XML parser can be used,
  or if getInputSource() will also return null. The parser must
  be free for use (i.e., not currently in use for another parse().
  After use of the parser is completed, the releaseXMLReader(XMLReader)
  must be called.
  
  @param inputSource The value returned from the URIResolver.
  @return  a SAX2 XMLReader to use to resolve the inputSource argument.
  
  @return non-null XMLReader reference ready to parse.