@Test public void testDtdXml() { String xmlWithDtd = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<!DOCTYPE rohit [\n<!ENTITY entityex SYSTEM \"file://" + new File("src/test/resources/org/springframework/batch/support/existing.txt").getAbsolutePath() + "\">\n]>\n<abc>&entityex;</abc>"; StaxEventItemReader<String> reader = new StaxEventItemReader<>(); reader.setName("foo"); reader.setResource(new ByteArrayResource(xmlWithDtd.getBytes())); reader.setUnmarshaller(new MockFragmentUnmarshaller() { @Override public Object unmarshal(Source source) throws XmlMappingException { try { XMLEventReader xmlEventReader = StaxTestUtils.getXmlEventReader(source); xmlEventReader.nextEvent(); xmlEventReader.nextEvent(); return xmlEventReader.getElementText(); } catch (Exception e) { throw new RuntimeException(e); } } }); reader.setFragmentRootElementName("abc"); reader.open(new ExecutionContext()); try { reader.read(); fail("Should fail when XML contains DTD"); } catch (Exception e) { Assert.assertThat(e.getMessage(), Matchers.containsString("Undeclared general entity \"entityex\"")); } }
assertTrue(isFragmentRootElement(EventHelper.startElementName(event2))); QName fragmentName = ((StartElement) event2).getName(); fragmentContent = readRecordsInsideFragment(eventReader, fragmentName); assertTrue(isFragmentRootElement(EventHelper.endElementName(event3)));
@Override public Object unmarshal(Source source) throws XmlMappingException, IOException { List<XMLEvent> fragment = (List<XMLEvent>) super.unmarshal(source); if(fragment != null) { return new ItemCountAwareFragment(fragment); } else { return null; } } }