Package org.codehaus.xfire.aegis.type.basic

Source Code of org.codehaus.xfire.aegis.type.basic.TypeTest

package org.codehaus.xfire.aegis.type.basic;

import java.io.ByteArrayOutputStream;
import java.io.StringReader;

import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.aegis.stax.ElementReader;
import org.codehaus.xfire.aegis.stax.ElementWriter;
import org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry;
import org.codehaus.xfire.aegis.type.TypeMapping;
import org.codehaus.xfire.aegis.type.TypeMappingRegistry;
import org.codehaus.xfire.test.AbstractXFireTest;
import org.codehaus.xfire.util.STAXUtils;
import org.jdom.Document;
import org.jdom.Element;

/**
* TypeTest
*
* @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
*/
public class TypeTest
    extends AbstractXFireTest
{
    public void testBeanType()
        throws Exception
    {
        // XMLOutputFactory ofactory = XMLOutputFactory.newInstance();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        // XMLStreamWriter writer = ofactory.createXMLStreamWriter(bos);
        XMLStreamWriter writer = STAXUtils.createXMLStreamWriter(bos, null, null);
        TypeMappingRegistry tmr = new DefaultTypeMappingRegistry(true);
        TypeMapping tm = tmr.createTypeMapping(true);

        SimpleBean bean = new SimpleBean();
        bean.setBleh("bleh");
        bean.setHowdy("howdy");

        registerSimpleBeanType(tm);

        BeanType bt = (BeanType) tm.getType(SimpleBean.class);

        ElementWriter lwriter = new ElementWriter(writer, "SimpleBean", "urn:Bean");
        bt.writeObject(bean, lwriter, new MessageContext());
        lwriter.close();

        writer.close();

        System.out.println(bos.toString());
        // XMLInputFactory factory = XMLInputFactory.newInstance();
        // XMLStreamReader reader = factory.createXMLStreamReader( new
        // StringReader(bos.toString()) );
        XMLStreamReader reader = STAXUtils.createXMLStreamReader(new StringReader(bos.toString()));
        while (reader.getEventType() != XMLStreamReader.START_ELEMENT)
            reader.next();

        SimpleBean readBean = (SimpleBean) bt.readObject(new ElementReader(reader), new MessageContext());
        assertNotNull(readBean);
        assertEquals("bleh", readBean.getBleh());
        assertEquals("howdy", readBean.getHowdy());

        Element root = new Element("root");
        Element schema = new Element("schema");
        root.addContent(schema);

        Document doc = new Document(root);

        bt.writeSchema(schema);

        // TODO: run XPath tests on Schema
    }

    /**
     * @param tmr
     * @return
     */
    private void registerSimpleBeanType(TypeMapping tmr)
    {
        tmr.register(SimpleBean.class, new QName("urn:SimpleBean", "SimpleBean"), new BeanType());
    }

    private void registerArrayType(TypeMapping tmr)
    {
        tmr.register(SimpleBean[].class,
                     new QName("urn:SomeBean", "ArrayOfSimpleBean"),
                     new ArrayType());
    }

    public void testArrayType()
        throws Exception
    {
        // XMLOutputFactory ofactory = XMLOutputFactory.newInstance();
        ByteArrayOutputStream bos = new ByteArrayOutputStream();
        // XMLStreamWriter writer = ofactory.createXMLStreamWriter(bos);
        XMLStreamWriter writer = STAXUtils.createXMLStreamWriter(bos, null, null);
        TypeMappingRegistry tmr = new DefaultTypeMappingRegistry(true);
        TypeMapping tm = tmr.createTypeMapping(true);

        registerSimpleBeanType(tm);
        registerArrayType(tm);

        SimpleBean bean = new SimpleBean();
        bean.setBleh("bleh");
        bean.setHowdy("howdy");

        SimpleBean[] beanArray = new SimpleBean[] { bean, bean };

        ArrayType at = (ArrayType) tm.getType(SimpleBean[].class);

        at.writeObject(beanArray,
                       new ElementWriter(writer, "SimpleBean", "urn:Bean"),
                       new MessageContext());
        writer.close();

        /*
         * TODO: figure out why this doesn't work. It works when you're actually
         * reading/writing documents. I think it has something to do with the
         * reader.next() in the END_ELEMENT case in LiteralReader.
         *
         * XMLInputFactory factory = XMLInputFactory.newInstance();
         * XMLStreamReader reader = factory.createXMLStreamReader( new
         * StringReader(bos.toString()) ); while ( reader.getEventType() !=
         * XMLStreamReader.START_ELEMENT ) reader.next();
         *
         * Object out1 = at.readObject( new LiteralReader( reader ) );
         *
         * SimpleBean[] beans = (SimpleBean[]) out1; assertNotNull( beans );
         * assertEquals( "bleh", beans[0].getBleh() ); assertEquals( "howdy",
         * beans[0].getHowdy() );
         *
         * Document doc = DocumentHelper.createDocument(); Element root =
         * doc.addElement("root");
         *
         * at.writeSchema( root );
         */
        // TODO: run XPath tests on Schema
    }
}
TOP

Related Classes of org.codehaus.xfire.aegis.type.basic.TypeTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.