package org.exolab.castor.xml;
import java.io.IOException;
import java.io.Reader;
import java.io.StringReader;
import javax.xml.stream.FactoryConfigurationError;
import javax.xml.stream.XMLEventReader;
import javax.xml.stream.XMLInputFactory;
import javax.xml.stream.XMLStreamException;
import junit.framework.Assert;
import junit.framework.TestCase;
public class Sax2EventFromStaxProducerIntegrationTest extends TestCase {
private static final String testXML = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><UnmarshalFranz content=\"Bla Bla Bla\" />";
private static final String unclosedStartElement = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><UnmarshalFranz content=\"Bla Bla Bla\">";
private static final String undeclaredPrefix = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><pre:UnmarshalFranz content=\"Bla Bla Bla\" />";
private static final String differentEndElement = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><UnmarshalFranz content=\"Bla Bla Bla\"></UnmarshalFranz2>";
private Reader _reader;
private XMLEventReader _eventReader;
/**
* Closing the reader.
*
* @see junit.framework.TestCase#tearDown()
*/
public void tearDown() throws Exception {
_reader.close();
_reader = null;
}
public void testUnmarshalling() throws MarshalException,
ValidationException, XMLStreamException, FactoryConfigurationError {
_reader = new StringReader(testXML);
_eventReader = XMLInputFactory.newInstance().createXMLEventReader(
_reader);
XMLContext xmlContext = new XMLContext();
Unmarshaller unmarshaller = xmlContext.createUnmarshaller();
unmarshaller.setClass(UnmarshalFranz.class);
Assert.assertNotNull(unmarshaller);
UnmarshalFranz f = (UnmarshalFranz) unmarshaller.unmarshal(_eventReader);
Assert.assertNotNull(f);
Assert.assertEquals("Bla Bla Bla", f.getContent());
}
public void testUnclosedStartElementException() throws XMLStreamException,
FactoryConfigurationError, ValidationException {
_reader = new StringReader(unclosedStartElement);
try {
_eventReader = XMLInputFactory.newInstance().createXMLEventReader(
_reader);
} catch (Exception e) {
// if Exception is catched here then it's out of the Unmarshaller
// scope
e.printStackTrace();
return;
}
Unmarshaller unmarshaller = new XMLContext().createUnmarshaller();
unmarshaller.setClass(UnmarshalFranz.class);
MarshalException fromStax = null, fromSax = null;
try {
UnmarshalFranz f1 = (UnmarshalFranz) unmarshaller.unmarshal(_eventReader);
} catch (MarshalException e) {
fromStax = e;
}
try {
_reader.reset();
UnmarshalFranz f2 = (UnmarshalFranz) unmarshaller.unmarshal(_reader);
} catch (MarshalException e) {
fromSax = e;
} catch (ValidationException e) {
} catch (IOException e) {
// catch-block for _reader.reset();
e.printStackTrace();
}
Assert.assertNotNull(fromStax);
Assert.assertNotNull(fromSax);
Assert.assertEquals(fromStax.getErrorCode(), fromSax.getErrorCode());
}
// public void testPrefixUnbound() throws XMLStreamException,
// FactoryConfigurationError, ValidationException {
//
// _reader = new StringReader(undeclaredPrefix);
// try {
// _eventReader = XMLInputFactory.newInstance().createXMLEventReader(
// _reader);
// } catch (Exception e) {
// // if Exception is catched here then it's out of the Unmarshaller
// // scope
// return;
// }
//
// // This shouldn't be reached anymore
// Unmarshaller unmarshaller = new XMLContext().createUnmarshaller();
// unmarshaller.setClass(UnmarshalFranz.class);
//
// MarshalException fromStax = null, fromSax = null;
// try {
// UnmarshalFranz f1 = (UnmarshalFranz) unmarshaller.unmarshal(_eventReader);
// } catch (MarshalException e) {
// fromStax = e;
// }
//
// try {
// _reader.reset();
// UnmarshalFranz f2 = (UnmarshalFranz) unmarshaller.unmarshal(_reader);
//
// } catch (MarshalException e) {
// fromSax = e;
// } catch (ValidationException e) {
// } catch (IOException e) {
// // catch-block for _reader.reset();
// e.printStackTrace();
// }
//
// Assert.assertNotNull(fromStax);
// Assert.assertNotNull(fromSax);
// Assert.assertEquals(fromStax.getErrorCode(), fromSax.getErrorCode());
// }
public void testEndTagNameDoesntMatchStartTagName()
throws XMLStreamException, FactoryConfigurationError,
ValidationException {
MarshalException fromStax = null, fromSax = null;
XMLContext xmlContext = new XMLContext();
Unmarshaller unmarshaller = xmlContext.createUnmarshaller();
unmarshaller.setClass(UnmarshalFranz.class);
_reader = new StringReader(differentEndElement);
_eventReader = XMLInputFactory.newInstance().createXMLEventReader(
_reader);
try {
UnmarshalFranz f1 = (UnmarshalFranz) unmarshaller.unmarshal(_eventReader);
} catch (MarshalException e) {
fromStax = e;
}
try {
_reader.reset();
UnmarshalFranz f2 = (UnmarshalFranz) unmarshaller.unmarshal(_reader);
} catch (MarshalException e) {
fromSax = e;
} catch (ValidationException e) {
} catch (IOException e) {
// catch-block for _reader.reset();
e.printStackTrace();
}
Assert.assertNotNull(fromStax);
Assert.assertNotNull(fromSax);
Assert.assertEquals(fromStax.getErrorCode(), fromSax.getErrorCode());
}
}