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