Package org.codehaus.xfire.aegis.type.collection

Source Code of org.codehaus.xfire.aegis.type.collection.MapTypeTest

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

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;

import javax.xml.namespace.QName;

import org.codehaus.xfire.MessageContext;
import org.codehaus.xfire.aegis.AbstractXFireAegisTest;
import org.codehaus.xfire.aegis.jdom.JDOMWriter;
import org.codehaus.xfire.aegis.stax.ElementReader;
import org.codehaus.xfire.aegis.type.DefaultTypeMappingRegistry;
import org.codehaus.xfire.aegis.type.Type;
import org.codehaus.xfire.aegis.type.TypeCreator;
import org.codehaus.xfire.aegis.type.TypeMapping;
import org.codehaus.xfire.aegis.type.TypeMappingRegistry;
import org.codehaus.xfire.aegis.type.basic.BeanType;
import org.codehaus.xfire.aegis.type.basic.SimpleBean;
import org.codehaus.xfire.aegis.type.basic.StringType;
import org.codehaus.xfire.aegis.type.collection.bean.MapBean;
import org.codehaus.xfire.client.XFireProxyFactory;
import org.codehaus.xfire.service.Service;
import org.codehaus.xfire.service.invoker.ObjectInvoker;
import org.codehaus.xfire.soap.SoapConstants;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.Namespace;

public class MapTypeTest
    extends AbstractXFireAegisTest
{
    TypeMapping mapping;
   
    public void setUp() throws Exception
    {
        super.setUp();
       
        addNamespace("t", "urn:test");
        addNamespace("xsd", SoapConstants.XSD);
        addNamespace("xsi", SoapConstants.XSI_NS);
       
        TypeMappingRegistry reg = new DefaultTypeMappingRegistry(true);
        mapping = reg.createTypeMapping(true);
        mapping.setEncodingStyleURI("urn:test");
    }

    public void testBean()
        throws Exception
    {
        Type stringType = mapping.getTypeCreator().createType(String.class);
       
        MapType type = new MapType(new QName("urn:test", "map"), stringType, stringType);
        type.setTypeClass(Map.class);
        type.setTypeMapping(mapping);
       
        assertNotNull(type.getSchemaType());
        assertEquals("entry", type.getEntryName().getLocalPart());
        assertEquals("urn:test", type.getEntryName().getNamespaceURI());
        assertEquals("key", type.getKeyName().getLocalPart());
        assertEquals("urn:test", type.getKeyName().getNamespaceURI());
        assertEquals("value", type.getValueName().getLocalPart());
        assertEquals("urn:test", type.getValueName().getNamespaceURI());

        assertTrue(type.isComplex());
       
        Set deps = type.getDependencies();
        assertEquals(1, deps.size());
        Type stype = (Type) deps.iterator().next();
        assertTrue(stype instanceof StringType);
       
        // Test reading
        ElementReader reader = new ElementReader(getResourceAsStream("/org/codehaus/xfire/aegis/type/collection/Map.xml"));
        //MessageReader creader = reader.getNextElementReader();
       
        Map m = (Map) type.readObject(reader, new MessageContext());
        assertEquals(2, m.size());
        assertEquals("value1", m.get("key1"));
        assertEquals("value2", m.get("key2"));
       
        reader.getXMLStreamReader().close();
       
        // Test writing
        Element element = new Element("map", "urn:test");
        Document doc = new Document(element);
        JDOMWriter writer = new JDOMWriter(element);
        type.writeObject(m, writer, new MessageContext());
        writer.close();

        assertValid("/t:map/t:entry[1]/t:key[text()='key1']", element);
        assertValid("/t:map/t:entry[1]/t:value[text()='value1']", element);

        assertValid("/t:map/t:entry[2]/t:key[text()='key2']", element);
        assertValid("/t:map/t:entry[2]/t:value[text()='value2']", element);

        Element types = new Element("types", Namespace.getNamespace("xsd", SoapConstants.XSD));
        Element schema = new Element("schema", Namespace.getNamespace("xsd", SoapConstants.XSD));
        types.addContent(schema);
       
        doc = new Document(types);
       
        type.writeSchema(schema);

        assertValid("//xsd:complexType[@name='map']", doc);
        assertValid("//xsd:complexType[@name='map']/xsd:sequence/xsd:element[@name='entry']", doc);
        assertValid("//xsd:complexType[@name='map']/xsd:sequence/xsd:element[@name='entry']" +
                    "/xsd:complexType/xsd:sequence/xsd:element[@name='key'][@type='xsd:string']", doc);
        assertValid("//xsd:complexType[@name='map']/xsd:sequence/xsd:element[@name='entry']" +
                    "/xsd:complexType/xsd:sequence/xsd:element[@name='value'][@type='xsd:string']", doc);
    }
   
    public void testTypeCreator()
    {
        TypeCreator creator = mapping.getTypeCreator();

        BeanType beanType = (BeanType) creator.createType(MapBean.class);
       
        QName mapName = (QName) beanType.getTypeInfo().getElements().next();
       
        Type type = beanType.getTypeInfo().getType(mapName);
        assertTrue(type instanceof MapType);

        assertEquals(new QName(mapping.getEncodingStyleURI(), "string2SimpleBeanMap"), type.getSchemaType());
       
        MapType mapType = (MapType) type;
        assertEquals(SimpleBean.class, mapType.getValueType().getTypeClass());
        assertEquals(String.class, mapType.getKeyType().getTypeClass());
    }

    public void testService() throws Exception
    {
        Service service = getServiceFactory().create(MapService.class, null, "urn:MapService", null);
        getServiceRegistry().register(service);

        service.setProperty(ObjectInvoker.SERVICE_IMPL_CLASS, MapServiceImpl.class);
       
        XFireProxyFactory factory = new XFireProxyFactory(getXFire());
        MapService client = (MapService) factory.create(service, "xfire.local://MapService");

        // this fails when we do it... Woodstox bug?
//        Client xclient = Client.getInstance(client);
//        xclient.addOutHandler(new DOMOutHandler());
//        xclient.addOutHandler(new LoggingHandler());
//       
        Map map = new HashMap();
        SimpleBean bean = new SimpleBean();
        bean.setHowdy("howdy");
        map.put("test", bean);
        map = client.echoMap(map);
        assertNotNull(map);
        assertEquals(1, map.size());
        bean = (SimpleBean) map.get("test");
        assertNotNull(bean);
        assertEquals("howdy", bean.getHowdy());
       
        MapBean mapBean = new MapBean();
        mapBean.setMap(map);
        MapBean mapBean2 = client.echoMapBean(mapBean);
        assertEquals(1, mapBean2.getMap().size());
       
        map = new HashMap();
        List keyList = new ArrayList();
        keyList.add("key");
        List valueList = new ArrayList();
        valueList.add("value");
        map.put(keyList, valueList);
       
        Map map2 = client.echoMapOfCollections(map);
        assertEquals(1, map2.size());
    }
}
TOP

Related Classes of org.codehaus.xfire.aegis.type.collection.MapTypeTest

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.