package org.jboss.test.xml;
import org.jboss.test.xml.book.BookObjectFactory;
import org.jboss.test.xml.book.Book;
import org.jboss.test.xml.book.BookCharacter;
import org.jboss.test.xml.book.BookObjectProvider;
import org.jboss.test.xml.book.BookGenericObjectModelFactory;
import org.jboss.test.xml.book.BookGenericObjectModelProvider;
import org.jboss.xml.binding.GenericObjectModelFactory;
import org.jboss.xml.binding.Unmarshaller;
import org.jboss.xml.binding.Marshaller;
import org.jboss.xml.binding.DtdMarshaller;
import org.jboss.xml.binding.ObjectModelProvider;
import org.jboss.xml.binding.XsMarshaller;
import org.jboss.xml.binding.ObjectModelFactory;
import org.jboss.logging.Logger;
import java.io.InputStream;
import java.io.FileInputStream;
import java.io.StringReader;
import java.io.StringWriter;
import java.io.Reader;
import java.io.InputStreamReader;
import java.util.Iterator;
import junit.framework.TestCase;
public class SimpleTestCase
extends TestCase
{
private static final Logger log = Logger.getLogger(SimpleTestCase.class);
public SimpleTestCase(String name)
{
super(name);
}
public void testUnmarshalBookDtd() throws Exception
{
ObjectModelFactory factory = new BookObjectFactory();
unmarshalBook("book-dtd.xml", factory);
}
public void testUnmarshalBookXs() throws Exception
{
ObjectModelFactory factory = new BookObjectFactory();
unmarshalBook("book-xs.xml", factory);
}
public void testUnmarshalBookXsGenericFactory() throws Exception
{
GenericObjectModelFactory factory = new BookGenericObjectModelFactory();
unmarshalBook("book-xs.xml", factory);
}
public void testMarshallBookDtd() throws Exception
{
log.debug("<test-marshall-book-dtd>");
Book book = createBook();
StringWriter xmlOutput = new StringWriter();
InputStream is = getResource("xml/book/books.dtd");
Reader dtdReader = new InputStreamReader(is);
Marshaller marshaller = new DtdMarshaller();
marshaller.mapPublicIdToSystemId("-//DTD Books//EN", "resources/xml/book/books.dtd");
ObjectModelProvider provider = new BookObjectProvider();
marshaller.marshal(dtdReader, provider, book, xmlOutput);
dtdReader.close();
checkMarshalledBook(xmlOutput.getBuffer().toString(), book);
log.debug("</test-marshall-book-dtd>");
}
public void testMarshallBookXs() throws Exception
{
log.debug("<test-marshall-book-xs>");
Book book = createBook();
StringWriter xmlOutput = new StringWriter();
InputStream is = getResource("xml/book/books.xsd");
Reader xsReader = new InputStreamReader(is);
XsMarshaller marshaller = new XsMarshaller();
marshaller.addRootElement("http://example.org/ns/books/", "", "book");
marshaller.declareNamespace(null, "http://example.org/ns/books/");
marshaller.declareNamespace("xsi", "http://www.w3.org/2001/XMLSchema-instance");
marshaller.addAttribute("xsi", "schemaReader", "string", "http://example.org/ns/books/ resources/book/books.xsd");
ObjectModelProvider provider = new BookObjectProvider();
marshaller.marshal(xsReader, provider, book, xmlOutput);
xsReader.close();
checkMarshalledBook(xmlOutput.toString(), book);
log.debug("</test-marshall-book-xs>");
}
public void testMarshallBookDtdGeneric() throws Exception
{
log.debug("<test-marshall-book-dtd-generic>");
Book book = createBook();
StringWriter xmlOutput = new StringWriter();
InputStream is = getResource("xml/book/books.dtd");
Reader dtdReader = new InputStreamReader(is);
Marshaller marshaller = new DtdMarshaller();
marshaller.mapPublicIdToSystemId("-//DTD Books//EN", "resources/xml/book/books.dtd");
ObjectModelProvider provider = new BookGenericObjectModelProvider();
marshaller.marshal(dtdReader, provider, book, xmlOutput);
dtdReader.close();
checkMarshalledBook(xmlOutput.getBuffer().toString(), book);
log.debug("</test-marshall-book-dtd-generic>");
}
private void unmarshalBook(String xmlSource, ObjectModelFactory factory) throws Exception
{
log.debug("<test-unmarshal-" + xmlSource + '>');
InputStream is = new FileInputStream("resources/xml/book/" + xmlSource);
Unmarshaller unmarshaller = new Unmarshaller();
Book book = (Book)unmarshaller.unmarshal(is, factory, null);
is.close();
checkUnmarshalledBook(book);
log.debug("</test-unmarshal-" + xmlSource + '>');
}
private void checkMarshalledBook(String content, Book book)
throws Exception
{
log.debug("marshalled content: " + content);
Book unmarshalled = new Book();
ObjectModelFactory factory = new BookObjectFactory();
Unmarshaller reader = new Unmarshaller();
StringReader strReader = new StringReader(content);
reader.unmarshal(strReader, factory, unmarshalled);
strReader.close();
assertEquals(book, unmarshalled);
}
private void checkUnmarshalledBook(Book book)
{
log.debug("unmarshalled book: " + book);
assertEquals("Being a Dog Is a Full-Time Job", book.getTitle());
assertEquals("Charles M. Schulz", book.getAuthor());
assertEquals("0836217462", book.getIsbn());
assertEquals(book.getCharactersTotal(), 2);
for(Iterator iter = book.getCharacters().iterator(); iter.hasNext();)
{
BookCharacter character = (BookCharacter)iter.next();
final String name = character.getName();
if(name.equals("Snoopy"))
{
assertEquals(character.getFriendOf(), "Peppermint Patty");
assertEquals(character.getSince(), "1950-10-04");
assertEquals(character.getQualification(), "extroverted beagle");
}
else if(name.equals("Peppermint Patty"))
{
assertEquals(character.getFriendOf(), null);
assertEquals(character.getSince(), "1966-08-22");
assertEquals(character.getQualification(), "bold, brash and tomboyish");
}
}
}
private static Book createBook()
{
Book book = new Book();
book.setIsbn("0836217462");
book.setTitle("Being a Dog Is a Full-Time Job");
book.setAuthor("Charles M. Schulz");
BookCharacter character = new BookCharacter();
character.setName("Snoopy");
character.setFriendOf("Peppermint Patty");
character.setSince("1950-10-04");
character.setQualification("extroverted beagle");
book.addCharacter(character);
character = new BookCharacter();
character.setName("Peppermint Patty");
character.setSince("1966-08-22");
character.setQualification("bold, brash and tomboyish");
book.addCharacter(character);
return book;
}
private static InputStream getResource(String name)
{
InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(name);
if(is == null)
throw new IllegalStateException("Resource not found: " + name);
return is;
}
}