code: public static XMLReader getXMLReader(Source inputSource, SourceLocator locator)
            throws TransformerException
    {
  
      try
      {
        XMLReader reader = (inputSource instanceof SAXSource)
                           ? ((SAXSource) inputSource).getXMLReader() : null;
                           
        if (null == reader)
        {
          try {
            javax.xml.parsers.SAXParserFactory factory=
                javax.xml.parsers.SAXParserFactory.newInstance();
            factory.setNamespaceAware( true );
            javax.xml.parsers.SAXParser jaxpParser=
                factory.newSAXParser();
            reader=jaxpParser.getXMLReader();
            
          } catch( javax.xml.parsers.ParserConfigurationException ex ) {
            throw new org.xml.sax.SAXException( ex );
          } catch( javax.xml.parsers.FactoryConfigurationError ex1 ) {
              throw new org.xml.sax.SAXException( ex1.toString() );
          } catch( NoSuchMethodError ex2 ) {
          }
          catch (AbstractMethodError ame){}
          if(null == reader)
            reader = XMLReaderFactory.createXMLReader();
        }
  
        try
        {
          reader.setFeature("http://xml.org/sax/features/namespace-prefixes",
                            true);
        }
        catch (org.xml.sax.SAXException se)
        {
  
          // What can we do?
          // TODO: User diagnostics.
        }
  
        return reader;
      }
      catch (org.xml.sax.SAXException se)
      {
        throw new TransformerException(se.getMessage(), locator, 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().
  
  @param inputSource The value returned from the URIResolver.
  @return a SAX2 XMLReader to use to resolve the inputSource argument.
  @param locator The location of the original caller, for diagnostic purposes.
  
  @throws TransformerException if the reader can not be created.