From cc39916c198dc2083d809524aba5ae1498981a7b Mon Sep 17 00:00:00 2001 From: robokaso Date: Thu, 13 Mar 2008 13:21:03 +0000 Subject: [PATCH] RESOLVED - issue BATCH-448: StaxEventItemWriter creates invalid xml for zero row documents http://jira.springframework.org/browse/BATCH-448 added empty character event before writing the end tag manually --- .../springframework/batch/item/xml/StaxEventItemWriter.java | 6 ++++++ .../batch/item/xml/StaxEventItemWriterTests.java | 1 + 2 files changed, 7 insertions(+) diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/xml/StaxEventItemWriter.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/xml/StaxEventItemWriter.java index 1ff2040f2..80a89a3f0 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/xml/StaxEventItemWriter.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/xml/StaxEventItemWriter.java @@ -316,7 +316,13 @@ public class StaxEventItemWriter extends ExecutionContextUserSupport implements // writer.writeEndDocument(); <- this doesn't work after restart // we need to write end tag of the root element manually + + //harmless event to close the root tag if there were no items + XMLEventFactory factory = XMLEventFactory.newInstance(); + writer.add(factory.createCharacters("")); + writer.flush(); + ByteBuffer bbuf = ByteBuffer.wrap(("").getBytes()); try { channel.write(bbuf); diff --git a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/xml/StaxEventItemWriterTests.java b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/xml/StaxEventItemWriterTests.java index 214332c52..f4d9c104c 100644 --- a/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/xml/StaxEventItemWriterTests.java +++ b/spring-batch-infrastructure/src/test/java/org/springframework/batch/item/xml/StaxEventItemWriterTests.java @@ -163,6 +163,7 @@ public class StaxEventItemWriterTests extends TestCase { assertTrue(outputFileContent().indexOf("") != NOT_FOUND); assertTrue(outputFileContent().endsWith("")); }