@Before public void setUp() throws Exception { wrappedWriter = mock(XMLEventWriter.class); ioWriter = mock(Writer.class); unopenedElements.add(unopenedA); unopenedElements.add(unopenedB); writer = new UnopenedElementClosingEventWriter(wrappedWriter, ioWriter, unopenedElements); }
@Override public void add(XMLEvent event) throws XMLStreamException { if (isUnopenedElementCloseEvent(event)) { QName element = unopenedElements.removeLast(); String nsPrefix = !StringUtils.hasText(element.getPrefix()) ? "" : element.getPrefix() + ":"; try { super.flush(); ioWriter.write("</" + nsPrefix + element.getLocalPart() + ">"); ioWriter.flush(); } catch (IOException ioe) { throw new DataAccessResourceFailureException("Unable to close tag: " + element, ioe); } } else { super.add(event); } }
@Test (expected = DataAccessResourceFailureException.class) public void testIOException() throws Exception { EndElement endElementB = eventFactory.createEndElement(unopenedB, null); Mockito.doThrow(new IOException("Simulated IOException")).when(ioWriter).write("</unopened-b>"); writer.add(endElementB); }
XMLEventWriter footerCallbackWriter = delegateEventWriter; if (restarted && !unclosedHeaderCallbackElements.isEmpty()) { footerCallbackWriter = new UnopenedElementClosingEventWriter( delegateEventWriter, bufferedWriter, unclosedHeaderCallbackElements);
@Override public void add(XMLEvent event) throws XMLStreamException { if (isUnopenedElementCloseEvent(event)) { QName element = unopenedElements.removeLast(); String nsPrefix = !StringUtils.hasText(element.getPrefix()) ? "" : element.getPrefix() + ":"; try { super.flush(); ioWriter.write("</" + nsPrefix + element.getLocalPart() + ">"); ioWriter.flush(); } catch (IOException ioe) { throw new DataAccessResourceFailureException("Unable to close tag: " + element, ioe); } } else { super.add(event); } }
@Test public void testEndUnopenedElements() throws Exception { EndElement endElementB = eventFactory.createEndElement(unopenedB, null); writer.add(endElementB); EndElement endElementA = eventFactory.createEndElement(unopenedA, null); writer.add(endElementA); verify(wrappedWriter, Mockito.never()).add(endElementB); verify(wrappedWriter, Mockito.never()).add(endElementA); verify(wrappedWriter, Mockito.times(2)).flush(); verify(ioWriter).write("</unopened-b>"); verify(ioWriter).write("</t:unopened-a>"); verify(ioWriter, Mockito.times(2)).flush(); }
XMLEventWriter footerCallbackWriter = delegateEventWriter; if (restarted && !unclosedHeaderCallbackElements.isEmpty()) { footerCallbackWriter = new UnopenedElementClosingEventWriter( delegateEventWriter, bufferedWriter, unclosedHeaderCallbackElements);
@Test public void testEndUnopenedElementRemovesFromList() throws Exception { EndElement endElement = eventFactory.createEndElement(unopenedB, null); writer.add(endElement); verify(wrappedWriter, Mockito.never()).add(endElement); verify(wrappedWriter).flush(); verify(ioWriter).write("</unopened-b>"); verify(ioWriter).flush(); StartElement startElement = eventFactory.createStartElement(unopenedB, null, null); writer.add(startElement); endElement = eventFactory.createEndElement(unopenedB, null); writer.add(endElement); verify(wrappedWriter).add(startElement); verify(wrappedWriter).add(endElement); // only internal list should be modified assertEquals(2, unopenedElements.size()); }
@Test public void testOtherEndElement() throws Exception { EndElement endElement = eventFactory.createEndElement(other, null); writer.add(endElement); verify(wrappedWriter).add(endElement); }
@Test public void testOtherEvent() throws Exception { XMLEvent event = eventFactory.createCharacters("foo"); writer.add(event); verify(wrappedWriter).add(event); }