/******************************************************************************* * Copyright (c) 2006-2010 eBay Inc. All Rights Reserved. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 *******************************************************************************/ package org.ebayopensource.turmeric.runtime.tests.binding.jaxb; import static org.junit.Assert.*; import java.io.ByteArrayOutputStream; import java.util.HashMap; import java.util.Map; import javax.xml.validation.Schema; import org.ebayopensource.turmeric.runtime.binding.BindingConstants; import org.ebayopensource.turmeric.runtime.binding.IDeserializerFactory; import org.ebayopensource.turmeric.runtime.binding.ISerializerFactory; import org.ebayopensource.turmeric.runtime.common.binding.Deserializer; import org.ebayopensource.turmeric.runtime.common.binding.DeserializerFactory; import org.ebayopensource.turmeric.runtime.common.binding.SerializerFactory; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.fastinfoset.JAXBFastInfosetDeserializerFactory; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.fastinfoset.JAXBFastInfosetSerializerFactory; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.json.JAXBJSONDeserializerFactory; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.json.JAXBJSONSerializerFactory; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.nv.JAXBNVDeserializerFactory; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.nv.JAXBNVSerializerFactory; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.xml.JAXBXMLDeserializerFactory; import org.ebayopensource.turmeric.runtime.common.impl.binding.jaxb.xml.JAXBXMLSerializerFactory; import org.ebayopensource.turmeric.runtime.common.pipeline.InboundMessage; import org.ebayopensource.turmeric.runtime.common.pipeline.MessageContext; import org.ebayopensource.turmeric.runtime.common.service.ServiceId; import org.ebayopensource.turmeric.runtime.sif.service.ClientServiceId; import org.ebayopensource.turmeric.runtime.spf.impl.internal.config.ServiceConfigManager; import org.ebayopensource.turmeric.runtime.tests.common.util.TestUtils; import org.ebayopensource.turmeric.runtime.tests.service1.sample.types1.MyMessage; import org.ebayopensource.turmeric.common.v1.types.ErrorMessage; import org.junit.Test; public class TypeConverterTest extends BaseSerDeserTest { private static final String[] SUPPORTED_FORMATS = new String[] { BindingConstants.PAYLOAD_XML, BindingConstants.PAYLOAD_JSON, BindingConstants.PAYLOAD_NV, TestUtils.PAYLOAD_UNORDERED_NV, // SOAConstants.PAYLOAD_FAST_INFOSET }; private static final HashMap<String, DataFormatInfo> DATA_FORMAT_INFO = new HashMap<String, DataFormatInfo>(); private static TypeConverterTest s_testInstance; static { try { s_testInstance = new TypeConverterTest(); SerializerFactory serFactory; DeserializerFactory deserFactory; serFactory = new JAXBXMLSerializerFactory(); serFactory.init(s_testInstance.new TestSerInitContext()); deserFactory = new JAXBXMLDeserializerFactory(); deserFactory.init(s_testInstance.new TestDeserInitContext()); DATA_FORMAT_INFO.put(BindingConstants.PAYLOAD_XML, new DataFormatInfo(BindingConstants.PAYLOAD_XML, serFactory, deserFactory) ); serFactory = new JAXBJSONSerializerFactory(); serFactory.init(s_testInstance.new TestSerInitContext()); deserFactory = new JAXBJSONDeserializerFactory(); deserFactory.init(s_testInstance.new TestDeserInitContext()); DATA_FORMAT_INFO.put(BindingConstants.PAYLOAD_JSON, new DataFormatInfo(BindingConstants.PAYLOAD_JSON, serFactory, deserFactory) ); serFactory = new JAXBNVSerializerFactory(); serFactory.init(s_testInstance.new TestSerInitContext()); deserFactory = new JAXBNVDeserializerFactory(); deserFactory.init(s_testInstance.new TestDeserInitContext()); DATA_FORMAT_INFO.put(BindingConstants.PAYLOAD_NV, new DataFormatInfo(BindingConstants.PAYLOAD_NV, serFactory, deserFactory) ); serFactory = new JAXBNVSerializerFactory(); serFactory.init(s_testInstance.new TestSerInitContext()); deserFactory = new JAXBNVDeserializerFactory(); deserFactory.init(s_testInstance.new TestDeserInitContext()); DATA_FORMAT_INFO.put(TestUtils.PAYLOAD_UNORDERED_NV, new DataFormatInfo(TestUtils.PAYLOAD_UNORDERED_NV, serFactory, deserFactory) ); serFactory = new JAXBFastInfosetSerializerFactory(); serFactory.init(s_testInstance.new TestSerInitContext()); deserFactory = new JAXBFastInfosetDeserializerFactory(); deserFactory.init(s_testInstance.new TestDeserInitContext()); DATA_FORMAT_INFO.put(BindingConstants.PAYLOAD_FAST_INFOSET, new DataFormatInfo(BindingConstants.PAYLOAD_FAST_INFOSET, serFactory, deserFactory) ); } catch (Exception e) {}; } public TypeConverterTest() { super(); } @Test public void typeConverterBasic() throws Exception { System.out.println("**** Starting testTypeConverterBasic"); MyMessage msg = TestUtils.createTestMessage(1); for (int i = 0; i<SUPPORTED_FORMATS.length; i++) { String dataFormat = SUPPORTED_FORMATS[i]; DataFormatInfo info = DATA_FORMAT_INFO.get(dataFormat); //TODO: make me work. // doTest(msg, info); } System.out.println("**** Ending testTypeConverterBasic"); } private void doTest(MyMessage msg, DataFormatInfo info) throws Exception { ServiceConfigManager.getInstance().setConfigTestCase("configtypeconvert"); try { String name = info.m_name; String dataFormat = info.m_format; SerializerFactory serFactory = info.m_serFactory; DeserializerFactory deserFactory = info.m_deserFactory; System.out.println("**** Testing " + name); boolean ordered = (BindingConstants.PAYLOAD_NV.equals(dataFormat) && BindingConstants.PAYLOAD_NV.equals(name)); JAXBTestBuilder jaxbtest = new JAXBTestBuilder(); jaxbtest.setTestServer(jetty); jaxbtest.setOrdered(ordered); jaxbtest.setSerializerFactory(serFactory); jaxbtest.setDeserializerFactory(deserFactory); MessageContext ctx = jaxbtest.createTestMessageContext(); ByteArrayOutputStream out = new ByteArrayOutputStream(); jaxbtest.serialize(ctx, out, msg); String xml1 = out.toString(); System.out.println(xml1); jaxbtest.setPayload(out); Deserializer deser = deserFactory.getDeserializer(); ctx = jaxbtest.createTestMessageContext(); Object msg1 = deser.deserialize((InboundMessage)ctx.getRequestMessage(), MyMessage.class); out = new ByteArrayOutputStream(); jaxbtest.serialize(ctx, out, msg1); jaxbtest.setPayload(out); ctx = jaxbtest.createTestMessageContext(); msg1 = deser.deserialize((InboundMessage)ctx.getRequestMessage(), MyMessage.class); out = new ByteArrayOutputStream(); jaxbtest.serialize(ctx, out, msg1); String xml2 = out.toString(); System.out.println(xml2); assertEquals(msg,msg1); assertTrue(xml2.indexOf("entry") < 0); System.out.println("**** Finish testing " + dataFormat); } finally { ServiceConfigManager.getInstance().setConfigTestCase("config"); } } private static class DataFormatInfo { String m_name; String m_format; SerializerFactory m_serFactory; DeserializerFactory m_deserFactory; DataFormatInfo(String format, SerializerFactory serFactory, DeserializerFactory deserFactory) { this("", format, serFactory, deserFactory); } DataFormatInfo(String name, String format, SerializerFactory serFactory, DeserializerFactory deserFactory) { m_name = name; m_format = format; m_serFactory = serFactory; m_deserFactory = deserFactory; try { m_serFactory.init(this.new TestSerInitContext()); m_deserFactory.init(this.new TestDeserInitContext()); } catch (Exception e) {} } private class TestSerInitContext implements ISerializerFactory.InitContext { public ServiceId getServiceId() { return new ClientServiceId("MySerDeserTest", ""); } public Map<String,String> getOptions() { return new HashMap<String, String> (); } public Class[] getRootClasses() { return new Class[] {MyMessage.class}; } } private class TestDeserInitContext implements IDeserializerFactory.InitContext { public ServiceId getServiceId() { return new ClientServiceId("MySerDeserTest", ""); } public Map<String,String> getOptions() { return new HashMap<String, String> (); } public Class[] getRootClasses() { return new Class[] {MyMessage.class, ErrorMessage.class}; } @Override public Schema getUpaAwareMasterSchema() { return null; } } } }