Added support for unmarshalling XML fragments, requested by Spring Batch.
This commit is contained in:
@@ -20,6 +20,7 @@ import java.io.IOException;
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import java.util.Arrays;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
|
||||
import junit.framework.TestCase;
|
||||
@@ -36,6 +37,8 @@ import org.xml.sax.helpers.XMLReaderFactory;
|
||||
|
||||
public abstract class AbstractStaxXmlReaderTestCase extends TestCase {
|
||||
|
||||
protected static XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
|
||||
private static final String XML_DTD_HANDLER =
|
||||
"<!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'><beans />";
|
||||
|
||||
@@ -96,7 +99,7 @@ public abstract class AbstractStaxXmlReaderTestCase extends TestCase {
|
||||
protected abstract AbstractStaxXmlReader createStaxXmlReader(Reader reader) throws XMLStreamException;
|
||||
|
||||
/** Easymock <code>ArgumentMatcher</code> implementation that matches SAX arguments. */
|
||||
private static class SaxArgumentMatcher extends AbstractMatcher {
|
||||
protected static class SaxArgumentMatcher extends AbstractMatcher {
|
||||
|
||||
public boolean matches(Object[] expected, Object[] actual) {
|
||||
if (expected == actual) {
|
||||
@@ -108,14 +111,14 @@ public abstract class AbstractStaxXmlReaderTestCase extends TestCase {
|
||||
if (expected.length != actual.length) {
|
||||
throw new IllegalArgumentException("Expected and actual arguments must have the same size");
|
||||
}
|
||||
if (expected.length == 3 && (expected[0] instanceof char[]) && (expected[1] instanceof Integer) &&
|
||||
(expected[2] instanceof Integer)) {
|
||||
if (expected.length == 3 && expected[0] instanceof char[] && expected[1] instanceof Integer &&
|
||||
expected[2] instanceof Integer) {
|
||||
// handling of the character(char[], int, int) methods
|
||||
String expectedString = new String((char[]) expected[0], ((Integer) expected[1]).intValue(),
|
||||
((Integer) expected[2]).intValue());
|
||||
String actualString = new String((char[]) actual[0], ((Integer) actual[1]).intValue(),
|
||||
((Integer) actual[2]).intValue());
|
||||
return (expectedString.equals(actualString));
|
||||
return expectedString.equals(actualString);
|
||||
}
|
||||
else if (expected.length == 1 && (expected[0] instanceof Locator)) {
|
||||
return true;
|
||||
@@ -148,8 +151,8 @@ public abstract class AbstractStaxXmlReaderTestCase extends TestCase {
|
||||
else if (expected instanceof Locator) {
|
||||
Locator expectedLocator = (Locator) expected;
|
||||
Locator actualLocator = (Locator) actual;
|
||||
return (expectedLocator.getColumnNumber() == actualLocator.getColumnNumber() &&
|
||||
expectedLocator.getLineNumber() == actualLocator.getLineNumber());
|
||||
return expectedLocator.getColumnNumber() == actualLocator.getColumnNumber() &&
|
||||
expectedLocator.getLineNumber() == actualLocator.getLineNumber();
|
||||
}
|
||||
return super.argumentMatches(expected, actual);
|
||||
}
|
||||
|
||||
@@ -17,14 +17,44 @@
|
||||
package org.springframework.xml.stream;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import javax.xml.stream.XMLEventReader;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
|
||||
import org.easymock.MockControl;
|
||||
import org.xml.sax.ContentHandler;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.helpers.AttributesImpl;
|
||||
|
||||
public class StaxEventXmlReaderTest extends AbstractStaxXmlReaderTestCase {
|
||||
|
||||
public static final String CONTENT = "<root xmlns='http://springframework.org/spring-ws'><child/></root>";
|
||||
|
||||
protected AbstractStaxXmlReader createStaxXmlReader(Reader reader) throws XMLStreamException {
|
||||
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
return new StaxEventXmlReader(inputFactory.createXMLEventReader(reader));
|
||||
}
|
||||
|
||||
public void testPartial() throws Exception {
|
||||
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
XMLEventReader eventReader = inputFactory.createXMLEventReader(new StringReader(CONTENT));
|
||||
eventReader.nextTag(); // skip to root
|
||||
StaxEventXmlReader xmlReader = new StaxEventXmlReader(eventReader);
|
||||
|
||||
MockControl mockControl = MockControl.createStrictControl(ContentHandler.class);
|
||||
mockControl.setDefaultMatcher(new SaxArgumentMatcher());
|
||||
ContentHandler contentHandlerMock = (ContentHandler) mockControl.getMock();
|
||||
|
||||
contentHandlerMock.startDocument();
|
||||
contentHandlerMock.startElement("http://springframework.org/spring-ws", "child", "child", new AttributesImpl());
|
||||
contentHandlerMock.endElement("http://springframework.org/spring-ws", "child", "child");
|
||||
contentHandlerMock.endDocument();
|
||||
|
||||
xmlReader.setContentHandler(contentHandlerMock);
|
||||
mockControl.replay();
|
||||
xmlReader.parse(new InputSource());
|
||||
mockControl.verify();
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -17,14 +17,50 @@
|
||||
package org.springframework.xml.stream;
|
||||
|
||||
import java.io.Reader;
|
||||
import java.io.StringReader;
|
||||
import javax.xml.namespace.QName;
|
||||
import javax.xml.stream.XMLInputFactory;
|
||||
import javax.xml.stream.XMLStreamException;
|
||||
import javax.xml.stream.XMLStreamReader;
|
||||
|
||||
import org.easymock.MockControl;
|
||||
import org.xml.sax.ContentHandler;
|
||||
import org.xml.sax.InputSource;
|
||||
import org.xml.sax.helpers.AttributesImpl;
|
||||
|
||||
public class StaxStreamXmlReaderTest extends AbstractStaxXmlReaderTestCase {
|
||||
|
||||
public static final String CONTENT = "<root xmlns='http://springframework.org/spring-ws'><child/></root>";
|
||||
|
||||
protected AbstractStaxXmlReader createStaxXmlReader(Reader reader) throws XMLStreamException {
|
||||
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
return new StaxStreamXmlReader(inputFactory.createXMLStreamReader(reader));
|
||||
}
|
||||
|
||||
public void testPartial() throws Exception {
|
||||
XMLInputFactory inputFactory = XMLInputFactory.newInstance();
|
||||
XMLStreamReader streamReader = inputFactory.createXMLStreamReader(new StringReader(CONTENT));
|
||||
streamReader.nextTag(); // skip to root
|
||||
assertEquals("Invalid element", new QName("http://springframework.org/spring-ws", "root"),
|
||||
streamReader.getName());
|
||||
streamReader.nextTag(); // skip to child
|
||||
assertEquals("Invalid element", new QName("http://springframework.org/spring-ws", "child"),
|
||||
streamReader.getName());
|
||||
StaxStreamXmlReader xmlReader = new StaxStreamXmlReader(streamReader);
|
||||
|
||||
MockControl mockControl = MockControl.createStrictControl(ContentHandler.class);
|
||||
mockControl.setDefaultMatcher(new SaxArgumentMatcher());
|
||||
ContentHandler contentHandlerMock = (ContentHandler) mockControl.getMock();
|
||||
|
||||
contentHandlerMock.startDocument();
|
||||
contentHandlerMock.startElement("http://springframework.org/spring-ws", "child", "child", new AttributesImpl());
|
||||
contentHandlerMock.endElement("http://springframework.org/spring-ws", "child", "child");
|
||||
contentHandlerMock.endDocument();
|
||||
|
||||
xmlReader.setContentHandler(contentHandlerMock);
|
||||
mockControl.replay();
|
||||
xmlReader.parse(new InputSource());
|
||||
mockControl.verify();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user