public ModifyingReader createInvalidXmlCharacterReplacingReader(InputStream xmlStream, String replacement) throws IOException { // buffer stream // (is this really necessary to get optimal performance?) if (!(xmlStream instanceof BufferedInputStream)) { xmlStream = new BufferedInputStream(xmlStream); } // get the XML version XmlStreamReader xmlReader = new XmlStreamReader(xmlStream); XmlVersionReader xmlVersionReader = new XmlVersionReader(xmlReader); String xmlVersion = xmlVersionReader.getXmlVersion(); // what kind of replacement? boolean dollarZero; if (replacement.contains("$0")) { dollarZero = true; } else { dollarZero = false; } // create the reader that replaces invalid XML characters Modifier modifier = new InvalidXmlCharacterModifier(8192, replacement, xmlVersion, dollarZero); return new ModifyingReader(xmlVersionReader, modifier); }
public ModifyingReader createXmlVersionModifyingReader(InputStream xmlStream, String newXmlVersion) throws IOException { // buffer stream // (is this really necessary to get optimal performance?) if (!(xmlStream instanceof BufferedInputStream)) { xmlStream = new BufferedInputStream(xmlStream); } XmlStreamReader xmlReader = new XmlStreamReader(xmlStream); XmlVersionReader xmlVersionReader = new XmlVersionReader(xmlReader); // create the reader that replaces the XML version in prolog Modifier modifier = new XmlVersionModifier(newXmlVersion, 8192); return new ModifyingReader(xmlVersionReader, modifier); }
public Feed parseFeed(Feed feed) throws SAXException, IOException, ParserConfigurationException, UnsupportedFeedtypeException { TypeGetter tg = new TypeGetter(); TypeGetter.Type type = tg.getType(feed); SyndHandler handler = new SyndHandler(feed, type); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(true); SAXParser saxParser = factory.newSAXParser(); File file = new File(feed.getFile_url()); Reader inputStreamReader = new XmlStreamReader(file); InputSource inputSource = new InputSource(inputStreamReader); saxParser.parse(inputSource, handler); inputStreamReader.close(); return handler.state.feed; }
/** * Get the encoding from an XML-file. * * @param webXml the XML-file * @return The encoding of the XML-file, or UTF-8 if it's not specified in the file * @throws java.io.IOException if an error occurred while reading the file */ protected String getEncoding( File webXml ) throws IOException { XmlStreamReader xmlReader = new XmlStreamReader( webXml ); try { return xmlReader.getEncoding(); } finally { IOUtil.close( xmlReader ); } }
@Test public void testExampleFromJavadoc() throws Exception { byte UTF16LE_BOM_BYTE_1 = (byte) 0xFF; byte UTF16LE_BOM_BYTE_2 = (byte) 0xFE; // version in prolog is 1.0 String input = "<?xml version='1.0'>"; byte[] bytes = input.getBytes("UTF-16LE"); byte[] bytesWithBom = new byte[bytes.length + 2]; bytesWithBom[0] = UTF16LE_BOM_BYTE_1; bytesWithBom[1] = UTF16LE_BOM_BYTE_2; System.arraycopy(bytes, 0, bytesWithBom, 2, bytes.length); // choose the input stream to modify ByteArrayInputStream inputStream = new ByteArrayInputStream(bytesWithBom); // wrap the input stream by BOM skipping reader Reader reader = new XmlStreamReader(inputStream); // create the reader that changes the XML version to 1.1 ModifyingReader modifyingReader = new ModifyingReader(reader, new XmlVersionModifier("1.1", 8192)); // use the modifying reader instead of the original reader String xml = IOUtils.toString(modifyingReader); assertTrue(xml.startsWith("<?xml version='1.1'")); }
private void assertXmlVersionInProlog(byte[] input, String newXmlVersion, String expectedProlog) throws Exception { XmlVersionReader xmlVersionReader = new XmlVersionReader(new XmlStreamReader(new ByteArrayInputStream(input))); // create the reader that modifies the XML version ModifyingReader reader = new ModifyingReader(xmlVersionReader, createModifier(newXmlVersion, 5)); String actualProlog = IOUtils.toString(reader); assertEquals(expectedProlog, actualProlog); }