RESOLVED - BATCH-766: Insufficient error handling in case of a missing resource for a org.springframework.batch.item.xml.StaxEventItemWriter

Added check to open(..) that output resource exists
This commit is contained in:
robokaso
2008-08-11 09:30:29 +00:00
parent 689e29be0c
commit f5268ced57
2 changed files with 36 additions and 13 deletions

View File

@@ -254,6 +254,9 @@ public class StaxEventItemWriter extends ExecutionContextUserSupport implements
* @see org.springframework.batch.item.ItemStream#open(ExecutionContext)
*/
public void open(ExecutionContext executionContext) {
Assert.state(resource.exists(), "Output resource must exist");
long startAtPosition = 0;
// if restart data is provided, restart from provided offset

View File

@@ -13,6 +13,7 @@ import junit.framework.TestCase;
import org.apache.commons.io.FileUtils;
import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.xml.oxm.MarshallingEventWriterSerializer;
import org.springframework.core.io.DescriptiveResource;
import org.springframework.core.io.FileSystemResource;
import org.springframework.core.io.Resource;
import org.springframework.oxm.Marshaller;
@@ -37,7 +38,7 @@ public class StaxEventItemWriterTests extends TestCase {
// test item for writing to output
private Object item = new Object() {
public String toString() {
return ClassUtils.getShortName(StaxEventItemWriter.class)+"-testString";
return ClassUtils.getShortName(StaxEventItemWriter.class) + "-testString";
}
};
@@ -101,7 +102,7 @@ public class StaxEventItemWriterTests extends TestCase {
assertFalse(content.contains(TEST_STRING));
writer.flush();
content = outputFileContent();
assertTrue("Wrong content: "+content, contains(content, TEST_STRING));
assertTrue("Wrong content: " + content, contains(content, TEST_STRING));
}
/**
@@ -140,14 +141,14 @@ public class StaxEventItemWriterTests extends TestCase {
public void testWriteWithHeader() throws Exception {
Object header1 = new Object();
Object header2 = new Object();
writer.setHeaderItems(new Object[] {header1, header2});
writer.setHeaderItems(new Object[] { header1, header2 });
writer.open(executionContext);
writer.write(item);
writer.flush();
String content = outputFileContent();
assertTrue("Wrong content: "+content, contains(content, "<!--" + header1 + "-->"));
assertTrue("Wrong content: "+content, contains(content, "<!--" + header2 + "-->"));
assertTrue("Wrong content: "+content, contains(content, TEST_STRING));
assertTrue("Wrong content: " + content, contains(content, "<!--" + header1 + "-->"));
assertTrue("Wrong content: " + content, contains(content, "<!--" + header2 + "-->"));
assertTrue("Wrong content: " + content, contains(content, TEST_STRING));
}
/**
@@ -155,7 +156,7 @@ public class StaxEventItemWriterTests extends TestCase {
*/
public void testWriteWithHeaderAfterRollback() throws Exception {
Object header = new Object();
writer.setHeaderItems(new Object[] {header});
writer.setHeaderItems(new Object[] { header });
writer.open(executionContext);
writer.write(item);
writer.clear();
@@ -163,8 +164,8 @@ public class StaxEventItemWriterTests extends TestCase {
writer.write(item);
writer.flush();
String content = outputFileContent();
assertEquals("Wrong content: "+content, 1, countContains(content, "<!--" + header + "-->"));
assertEquals("Wrong content: "+content, 1, countContains(content, TEST_STRING));
assertEquals("Wrong content: " + content, 1, countContains(content, "<!--" + header + "-->"));
assertEquals("Wrong content: " + content, 1, countContains(content, TEST_STRING));
}
/**
@@ -172,7 +173,7 @@ public class StaxEventItemWriterTests extends TestCase {
*/
public void testWriteWithHeaderAfterFlushAndRollback() throws Exception {
Object header = new Object();
writer.setHeaderItems(new Object[] {header});
writer.setHeaderItems(new Object[] { header });
writer.open(executionContext);
writer.write(item);
writer.flush();
@@ -183,8 +184,8 @@ public class StaxEventItemWriterTests extends TestCase {
writer.clear();
writer.flush();
String content = outputFileContent();
assertEquals("Wrong content: "+content, 1, countContains(content, "<!--" + header + "-->"));
assertEquals("Wrong content: "+content, 1, countContains(content, TEST_STRING));
assertEquals("Wrong content: " + content, 1, countContains(content, "<!--" + header + "-->"));
assertEquals("Wrong content: " + content, 1, countContains(content, TEST_STRING));
}
/**
@@ -223,6 +224,25 @@ public class StaxEventItemWriterTests extends TestCase {
assertTrue(outputFileContent().endsWith("</testroot>"));
}
public void testNonExistantResource() throws Exception {
Resource doesntExist = new DescriptiveResource("") {
public boolean exists() {
return false;
}
};
writer.setResource(doesntExist);
try {
writer.open(executionContext);
fail();
}
catch (IllegalStateException e) {
assertEquals("Output resource must exist", e.getMessage());
}
}
/**
* Checks the received parameters.
*/
@@ -298,7 +318,7 @@ public class StaxEventItemWriterTests extends TestCase {
private int countContains(String str, String searchStr) {
int begin = -1;
int count = 0;
while (str.indexOf(searchStr, begin+1) > begin) {
while (str.indexOf(searchStr, begin + 1) > begin) {
count++;
begin = str.indexOf(searchStr, begin);
}