BATCH-1532: introduced StaxUtils to provide indirection on javax.xml.transform.Result/Source creation so that the code cant work in Spring 2.5.x and Spring WS 1.5x as well as Spring 3.0x

This commit is contained in:
Dave Syer
2011-03-21 13:31:41 +00:00
parent 0a77a5b4ed
commit aef9f97f53
10 changed files with 201 additions and 65 deletions

View File

@@ -1,16 +1,6 @@
package org.springframework.batch.item.file;
import static org.junit.Assert.assertTrue;
import java.io.IOException;
import java.util.Comparator;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.transform.Source;
import junit.framework.Assert;
import org.junit.internal.runners.JUnit4ClassRunner;
import org.junit.runner.RunWith;
import org.springframework.batch.item.AbstractItemStreamItemReaderTests;
@@ -18,11 +8,20 @@ import org.springframework.batch.item.ExecutionContext;
import org.springframework.batch.item.ItemReader;
import org.springframework.batch.item.sample.Foo;
import org.springframework.batch.item.xml.StaxEventItemReader;
import org.springframework.batch.item.xml.StaxUtils;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.core.io.Resource;
import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.xml.transform.StaxSource;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.events.Attribute;
import javax.xml.stream.events.StartElement;
import javax.xml.transform.Source;
import java.io.IOException;
import java.util.Comparator;
//import org.springframework.xml.transform.StaxSource;
@RunWith(JUnit4ClassRunner.class)
public class MultiResourceItemReaderXmlTests extends AbstractItemStreamItemReaderTests {
@@ -35,15 +34,16 @@ public class MultiResourceItemReaderXmlTests extends AbstractItemStreamItemReade
reader.setFragmentRootElementName("foo");
reader.setUnmarshaller(new Unmarshaller() {
public Object unmarshal(Source source) throws XmlMappingException, IOException {
StaxSource staxSource = (StaxSource) source;
XMLEventReader eventReader = staxSource.getXMLEventReader();
Attribute attr;
try {
assertTrue(eventReader.nextEvent().isStartDocument());
XMLEventReader eventReader = StaxUtils.getXmlEventReader(source );
Assert.assertTrue(eventReader.nextEvent().isStartDocument());
StartElement event = eventReader.nextEvent().asStartElement();
attr = (Attribute) event.getAttributes().next();
}
catch (XMLStreamException e) {
catch ( Exception e) {
throw new RuntimeException(e);
}
Foo foo = new Foo();

View File

@@ -14,10 +14,10 @@ import javax.xml.transform.Result;
import org.junit.Before;
import org.junit.Test;
import org.springframework.batch.item.xml.StaxEventItemWriter;
import org.springframework.batch.item.xml.StaxUtils;
import org.springframework.oxm.Marshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.util.Assert;
import org.springframework.xml.transform.StaxResult;
/**
* Tests for {@link MultiResourceItemWriter} delegating to
@@ -43,18 +43,17 @@ public class MultiResourceItemWriterXmlTests extends AbstractMultiResourceItemWr
private static class SimpleMarshaller implements Marshaller {
public void marshal(Object graph, Result result) throws XmlMappingException, IOException {
Assert.isInstanceOf(StaxResult.class, result);
Assert.isInstanceOf(Result.class, result);
StaxResult staxResult = (StaxResult) result;
try {
XMLEventFactory factory = XMLEventFactory.newInstance();
XMLEventWriter writer = staxResult.getXMLEventWriter();
XMLEventWriter writer = StaxUtils.getXmlEventWriter(result);
writer.add(factory.createStartDocument("UTF-8"));
writer.add(factory.createStartElement("prefix", "namespace", graph.toString()));
writer.add(factory.createEndElement("prefix", "namespace", graph.toString()));
writer.add(factory.createEndDocument());
}
catch (XMLStreamException e) {
catch ( Exception e) {
throw new RuntimeException("Exception while writing to output file", e);
}
}

View File

@@ -20,7 +20,6 @@ import org.springframework.batch.item.sample.Foo;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.xml.transform.StaxSource;
@RunWith(JUnit4ClassRunner.class)
public class StaxEventItemReaderCommonTests extends AbstractItemStreamItemReaderTests {
@@ -33,15 +32,14 @@ public class StaxEventItemReaderCommonTests extends AbstractItemStreamItemReader
reader.setFragmentRootElementName("foo");
reader.setUnmarshaller(new Unmarshaller() {
public Object unmarshal(Source source) throws XmlMappingException, IOException {
StaxSource staxSource = (StaxSource) source;
XMLEventReader eventReader = staxSource.getXMLEventReader();
Attribute attr;
Attribute attr = null ;
try {
XMLEventReader eventReader = StaxUtils.getXmlEventReader( source);
assertTrue(eventReader.nextEvent().isStartDocument());
StartElement event = eventReader.nextEvent().asStartElement();
attr = (Attribute) event.getAttributes().next();
}
catch (XMLStreamException e) {
catch (Exception e) {
throw new RuntimeException(e);
}
Foo foo = new Foo();

View File

@@ -27,7 +27,6 @@ import org.springframework.core.io.Resource;
import org.springframework.oxm.Unmarshaller;
import org.springframework.oxm.XmlMappingException;
import org.springframework.util.ClassUtils;
import org.springframework.xml.transform.StaxSource;
/**
* Tests for {@link StaxEventItemReader}.
@@ -387,10 +386,11 @@ public class StaxEventItemReaderTests {
* @return list of the events from fragment body
*/
public Object unmarshal(Source source) throws XmlMappingException, IOException {
StaxSource staxSource = (StaxSource) source;
XMLEventReader eventReader = staxSource.getXMLEventReader();
List<XMLEvent> fragmentContent;
try {
XMLEventReader eventReader = StaxUtils.getXmlEventReader( source);
// first event should be StartDocument
XMLEvent event1 = eventReader.nextEvent();
assertTrue(event1.isStartDocument());
@@ -413,7 +413,7 @@ public class StaxEventItemReaderTests {
assertTrue(event4.isEndDocument());
}
catch (XMLStreamException e) {
catch (Exception e) {
throw new RuntimeException("Error occured in FragmentDeserializer", e);
}
return fragmentContent;

View File

@@ -35,7 +35,6 @@ import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
import org.springframework.xml.transform.StaxResult;
/**
* Tests for {@link StaxEventItemWriter}.
@@ -405,16 +404,12 @@ public class StaxEventItemWriterTests {
}
public void marshal(Object graph, Result result) throws XmlMappingException, IOException {
Assert.isInstanceOf(StaxResult.class, result);
StaxResult staxResult = (StaxResult) result;
Assert.isInstanceOf( Result.class, result);
try {
staxResult.getXMLEventWriter().add(
XMLEventFactory.newInstance().createStartElement(namespacePrefix, namespace, graph.toString()));
staxResult.getXMLEventWriter().add(
XMLEventFactory.newInstance().createEndElement(namespacePrefix, namespace, graph.toString()));
StaxUtils.getXmlEventWriter( result ).add( XMLEventFactory.newInstance().createStartElement(namespacePrefix, namespace, graph.toString()));
StaxUtils.getXmlEventWriter( result ).add( XMLEventFactory.newInstance().createEndElement(namespacePrefix, namespace, graph.toString()));
}
catch (XMLStreamException e) {
catch ( Exception e) {
throw new RuntimeException("Exception while writing to output file", e);
}
}

View File

@@ -30,7 +30,6 @@ import org.springframework.transaction.support.TransactionTemplate;
import org.springframework.util.Assert;
import org.springframework.util.ClassUtils;
import org.springframework.util.StringUtils;
import org.springframework.xml.transform.StaxResult;
/**
* Tests for {@link StaxEventItemWriter}.
@@ -77,7 +76,7 @@ public class TransactionalStaxEventItemWriterTests {
try {
writer.write(items);
}
catch (IOException e) {
catch ( Exception e) {
throw new RuntimeException(e);
}
return null;
@@ -115,7 +114,7 @@ public class TransactionalStaxEventItemWriterTests {
try {
writer.write(items);
}
catch (IOException e) {
catch (Exception e) {
throw new RuntimeException(e);
}
throw new RuntimeException("Planned");
@@ -133,7 +132,7 @@ public class TransactionalStaxEventItemWriterTests {
try {
writer.write(items);
}
catch (IOException e) {
catch (Exception e) {
throw new RuntimeException(e);
}
return null;
@@ -171,7 +170,7 @@ public class TransactionalStaxEventItemWriterTests {
try {
writer.write(items);
}
catch (IOException e) {
catch (Exception e) {
throw new RuntimeException(e);
}
return null;
@@ -186,7 +185,7 @@ public class TransactionalStaxEventItemWriterTests {
try {
writer.write(items);
}
catch (IOException e) {
catch (Exception e) {
throw new RuntimeException(e);
}
throw new RuntimeException("Planned");
@@ -215,13 +214,10 @@ public class TransactionalStaxEventItemWriterTests {
*/
private static class SimpleMarshaller implements Marshaller {
public void marshal(Object graph, Result result) throws XmlMappingException, IOException {
Assert.isInstanceOf(StaxResult.class, result);
StaxResult staxResult = (StaxResult) result;
try {
staxResult.getXMLEventWriter().add(XMLEventFactory.newInstance().createComment(graph.toString()));
StaxUtils.getXmlEventWriter(result).add(XMLEventFactory.newInstance().createComment(graph.toString()));
}
catch (XMLStreamException e) {
catch ( Exception e) {
throw new RuntimeException("Exception while writing to output file", e);
}
}