From 8b06574c8ed4314e1a7cc4c067dc91924c3b4994 Mon Sep 17 00:00:00 2001 From: Dave Syer Date: Mon, 7 Feb 2011 09:18:54 +0000 Subject: [PATCH] BATCH-1681: fix XML output on restart --- .../batch/item/xml/StaxEventItemWriter.java | 8 +++++++- .../batch/item/xml/StaxEventItemWriterTests.java | 5 +++-- 2 files changed, 10 insertions(+), 3 deletions(-) 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 1285dccb3..c90c59d58 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 @@ -378,9 +378,15 @@ public class StaxEventItemWriter extends ExecutionContextUserSupport implemen // Woodstox >= 3.2.9 we want to disable its // automatic end element feature (see: // http://jira.codehaus.org/browse/WSTX-165) per - // http://jira.springframework.org/browse/BATCH-761. + // http://jira.springframework.org/browse/BATCH-761). outputFactory.setProperty("com.ctc.wstx.automaticEndElements", Boolean.FALSE); } + if (outputFactory.isPropertySupported("com.ctc.wstx.outputValidateStructure")) { + // On restart we don't write the root element so we have to disable + // structural validation (see: + // http://jira.springframework.org/browse/BATCH-1681). + outputFactory.setProperty("com.ctc.wstx.outputValidateStructure", Boolean.FALSE); + } try { if (transactional) { 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 4db326204..91a8beac9 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 @@ -106,13 +106,14 @@ public class StaxEventItemWriterTests { writer = createItemWriter(); writer.open(executionContext); writer.write(items); + writer.write(items); writer.close(); // check the output is concatenation of 'before restart' and 'after // restart' writes. String outputFile = getOutputFileContent(); - assertEquals(2, StringUtils.countOccurrencesOf(outputFile, TEST_STRING)); - assertEquals("" + TEST_STRING + TEST_STRING + "", outputFile.replace(" ", "")); + assertEquals(3, StringUtils.countOccurrencesOf(outputFile, TEST_STRING)); + assertEquals("" + TEST_STRING + TEST_STRING + TEST_STRING + "", outputFile.replace(" ", "")); } @Test