private CharSequence readFile(String href, String baseURI) throws XPathException { try { // Use resolver as it does a series of tasks for us, and use "binary" mode final TransformerURIResolver resolver = new TransformerURIResolver( null, PipelineContext.get(), null, XMLParsing.ParserConfiguration.PLAIN, "binary"); final StringBuilder sb = new StringBuilder(1024); // Get SAX source using crazy SAX API // Source produces a binary document (content Base64-encoded) final SAXSource source = (SAXSource) resolver.resolve(href, baseURI); final XMLReader xmlReader = source.getXMLReader(); xmlReader.setContentHandler( new XMLReceiverAdapter() { public void characters(char ch[], int start, int length) throws SAXException { // Append Base64-encoded text only sb.append(ch, start, length); } }); xmlReader.parse(source.getInputSource()); // Return content formatted as Base64 return sb.toString(); } catch (Exception e) { throw new XPathException(e); } }
private static void inputSourceToSAX( InputSource inputSource, XMLReceiver xmlReceiver, XMLUtils.ParserConfiguration parserConfiguration, boolean handleLexical) { // Insert XInclude processor if needed final TransformerURIResolver resolver; if (parserConfiguration.handleXInclude) { parserConfiguration = new XMLUtils.ParserConfiguration( parserConfiguration.validating, false, parserConfiguration.externalEntities, parserConfiguration.uriReferences); resolver = new TransformerURIResolver(XMLUtils.ParserConfiguration.PLAIN); xmlReceiver = new XIncludeReceiver(null, xmlReceiver, parserConfiguration.uriReferences, resolver); } else { resolver = null; } try { final XMLReader xmlReader = newSAXParser(parserConfiguration).getXMLReader(); xmlReader.setContentHandler(xmlReceiver); if (handleLexical) xmlReader.setProperty(XMLConstants.SAX_LEXICAL_HANDLER, xmlReceiver); xmlReader.setEntityResolver(ENTITY_RESOLVER); xmlReader.setErrorHandler(ERROR_HANDLER); xmlReader.parse(inputSource); } catch (SAXParseException e) { throw new ValidationException(e.getMessage(), new LocationData(e)); } catch (Exception e) { throw new OXFException(e); } finally { if (resolver != null) resolver.destroy(); } }