/** Creates a SAX2 InputSource object from a TrAX Source object */ public static InputSource getInputSource(XSLTC xsltc, Source source) throws TransformerConfigurationException { InputSource input = null; String systemId = source.getSystemId(); try { // Try to get InputSource from SAXSource input if (source instanceof SAXSource) { final SAXSource sax = (SAXSource) source; input = sax.getInputSource(); // Pass the SAX parser to the compiler try { XMLReader reader = sax.getXMLReader(); /* * Fix for bug 24695 * 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 */ if (reader == null) { try { reader = XMLReaderFactory.createXMLReader(); } catch (Exception e) { try { // Incase there is an exception thrown // resort to JAXP SAXParserFactory parserFactory = SAXParserFactory.newInstance(); parserFactory.setNamespaceAware(true); if (xsltc.isSecureProcessing()) { try { parserFactory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true); } catch (org.xml.sax.SAXException se) { } } reader = parserFactory.newSAXParser().getXMLReader(); } catch (ParserConfigurationException pce) { throw new TransformerConfigurationException("ParserConfigurationException", pce); } } } reader.setFeature("http://xml.org/sax/features/namespaces", true); reader.setFeature("http://xml.org/sax/features/namespace-prefixes", false); xsltc.setXMLReader(reader); } catch (SAXNotRecognizedException snre) { throw new TransformerConfigurationException("SAXNotRecognizedException ", snre); } catch (SAXNotSupportedException snse) { throw new TransformerConfigurationException("SAXNotSupportedException ", snse); } catch (SAXException se) { throw new TransformerConfigurationException("SAXException ", se); } } // handle DOMSource else if (source instanceof DOMSource) { final DOMSource domsrc = (DOMSource) source; final Document dom = (Document) domsrc.getNode(); final DOM2SAX dom2sax = new DOM2SAX(dom); xsltc.setXMLReader(dom2sax); // Try to get SAX InputSource from DOM Source. input = SAXSource.sourceToInputSource(source); if (input == null) { input = new InputSource(domsrc.getSystemId()); } } // Try to get InputStream or Reader from StreamSource else if (source instanceof StreamSource) { final StreamSource stream = (StreamSource) source; final InputStream istream = stream.getInputStream(); final Reader reader = stream.getReader(); xsltc.setXMLReader(null); // Clear old XML reader // Create InputSource from Reader or InputStream in Source if (istream != null) { input = new InputSource(istream); } else if (reader != null) { input = new InputSource(reader); } else { input = new InputSource(systemId); } } else { ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_UNKNOWN_SOURCE_ERR); throw new TransformerConfigurationException(err.toString()); } input.setSystemId(systemId); } catch (NullPointerException e) { ErrorMsg err = new ErrorMsg(ErrorMsg.JAXP_NO_SOURCE_ERR, "TransformerFactory.newTemplates()"); throw new TransformerConfigurationException(err.toString()); } catch (SecurityException e) { ErrorMsg err = new ErrorMsg(ErrorMsg.FILE_ACCESS_ERR, systemId); throw new TransformerConfigurationException(err.toString()); } return input; }