package egovframework.rte.itl.webservice.service.impl; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; import java.math.BigDecimal; import java.math.BigInteger; import java.util.ArrayList; import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Map; import egovframework.rte.itl.integration.type.ListType; import egovframework.rte.itl.integration.type.PrimitiveType; import egovframework.rte.itl.integration.type.RecordType; import egovframework.rte.itl.integration.type.Type; import egovframework.rte.itl.webservice.service.EgovWebServiceClassLoader; import egovframework.rte.itl.webservice.service.MessageConverter; import egovframework.rte.itl.webservice.service.ServiceEndpointInfo; import egovframework.rte.itl.webservice.service.ServiceEndpointInterfaceInfo; import org.junit.Test; public class MessageConverterImplTest { private final RecordType personRecordType = new RecordType("personRecordType", "PersonRecordType", new HashMap<String, Type>() { /** * serialVersion UID */ private static final long serialVersionUID = -4732914927397819381L; { put("no", PrimitiveType.INTEGER); put("name", PrimitiveType.STRING); } }); private final ListType personListType = new ListType("person[]", "person array", personRecordType); private final RecordType recordType = new RecordType("recordType", "RecordType", new HashMap<String, Type>() { /** * serialVersion UID */ private static final long serialVersionUID = 1552380011450990901L; { put("booleanValue", PrimitiveType.BOOLEAN); put("byteValue", PrimitiveType.BYTE); put("shortValue", PrimitiveType.SHORT); put("intValue", PrimitiveType.INTEGER); put("longValue", PrimitiveType.LONG); put("bigIntegerValue", PrimitiveType.BIGINTEGER); put("floatValue", PrimitiveType.FLOAT); put("doubleValue", PrimitiveType.DOUBLE); put("bigDecimalValue", PrimitiveType.BIGDECIMAL); put("stringValue", PrimitiveType.STRING); put("calendarValue", PrimitiveType.CALENDAR); put("personList", personListType); } }); private final EgovWebServiceClassLoader classLoader = new EgovWebServiceClassLoader() { private final Map<Type, Class<?>> map = new HashMap<Type, Class<?>>() { /** * serialVersion UID */ private static final long serialVersionUID = 4357638556504895586L; { put(personRecordType, Person.class); put(personListType, (new Person[0]).getClass()); put(recordType, ValueObject.class); } }; public String getFieldNameOfServiceBridge() { return null; } public Class<?> loadClass(ServiceEndpointInfo serviceEndpointInfo) throws ClassNotFoundException { return null; } public Class<?> loadClass(ServiceEndpointInterfaceInfo serviceEndpointInterfaceInfo) throws ClassNotFoundException { return null; } public Class<?> loadClass(Type type) throws ClassNotFoundException { return map.get(type); } }; private final MessageConverter messageConverter = new MessageConverterImpl(classLoader); private final List<Object> personList = new ArrayList<Object>() { /** * serialVersion UID */ private static final long serialVersionUID = 1521021649881780719L; { add(new HashMap<String, Object>() { /** * serialVersion UID */ private static final long serialVersionUID = 2024858600074988182L; { put("no", 1); put("name", "ȫ�浿"); } }); add(new HashMap<String, Object>() { /** * serialVersion UID */ private static final long serialVersionUID = 2111273953420556406L; { put("no", 2); put("name", "��ö��"); } }); add(new HashMap<String, Object>() { /** * serialVersion UID */ private static final long serialVersionUID = 8184523077965140910L; { put("no", 3); put("name", "�ֿ���"); } }); } }; private final Map<String, Object> typedObject = new HashMap<String, Object>() { /** * serialVersion UID */ private static final long serialVersionUID = 8103299603788545932L; { put("booleanValue", true); put("byteValue", Byte.MAX_VALUE); put("shortValue", Short.MAX_VALUE); put("intValue", Integer.MAX_VALUE); put("longValue", Long.MAX_VALUE); put("bigIntegerValue", BigInteger.valueOf(Long.MAX_VALUE)); put("floatValue", Float.MAX_VALUE); put("doubleValue", Double.MAX_VALUE); put("bigDecimalValue", BigDecimal.valueOf(Double.MAX_VALUE)); put("stringValue", "String"); put("calendarValue", Calendar.getInstance()); put("personList", personList); } }; private final ValueObject valueObject = new ValueObject() { { booleanValue = true; byteValue = Byte.MAX_VALUE; shortValue = Short.MAX_VALUE; intValue = Integer.MAX_VALUE; longValue = Long.MAX_VALUE; bigIntegerValue = BigInteger.valueOf(Long.MAX_VALUE); floatValue = Float.MAX_VALUE; doubleValue = Double.MAX_VALUE; bigDecimalValue = BigDecimal.valueOf(Double.MAX_VALUE); stringValue = "String"; calendarValue = Calendar.getInstance(); personList = new Person[] { new Person() { { no = 1; name = "ȫ�浿"; } }, new Person() { { no = 2; name = "��ö��"; } }, new Person() { { no = 3; name = "�ֿ���"; } } }; } }; @SuppressWarnings("unchecked") @Test public void testConvertToValueObject() throws Exception { Object object = messageConverter.convertToValueObject(typedObject, recordType); assertNotNull(object); assertTrue(object instanceof ValueObject); ValueObject valueObject = (ValueObject) object; assertEquals(typedObject.get("booleanValue"), valueObject.booleanValue); assertEquals(typedObject.get("byteValue"), valueObject.byteValue); assertEquals(typedObject.get("shortValue"), valueObject.shortValue); assertEquals(typedObject.get("intValue"), valueObject.intValue); assertEquals(typedObject.get("longValue"), valueObject.longValue); assertEquals(typedObject.get("bigIntegerValue"), valueObject.bigIntegerValue); assertEquals(typedObject.get("floatValue"), valueObject.floatValue); assertEquals(typedObject.get("doubleValue"), valueObject.doubleValue); assertEquals(typedObject.get("bigDecimalValue"), valueObject.bigDecimalValue); assertEquals(typedObject.get("stringValue"), valueObject.stringValue); assertEquals(typedObject.get("calendarValue"), valueObject.calendarValue); Person[] personArray = valueObject.personList; assertNotNull(personArray); assertEquals(personList.size(), personArray.length); for (int i = 0; i < personList.size(); i++) { Map<String, Object> personMap = (Map<String, Object>) personList.get(i); Person person = personArray[i]; assertEquals(personMap.get("no"), person.no); assertEquals(personMap.get("name"), person.name); } } @SuppressWarnings("unchecked") @Test public void testConvertToTypedObject() throws Exception { Object object = messageConverter.convertToTypedObject(valueObject, recordType); assertNotNull(object); assertTrue(object instanceof Map); Map<String, Object> typedObject = (Map<String, Object>) object; assertEquals(valueObject.booleanValue, typedObject.get("booleanValue")); assertEquals(valueObject.byteValue, typedObject.get("byteValue")); assertEquals(valueObject.shortValue, typedObject.get("shortValue")); assertEquals(valueObject.intValue, typedObject.get("intValue")); assertEquals(valueObject.longValue, typedObject.get("longValue")); assertEquals(valueObject.bigIntegerValue, typedObject.get("bigIntegerValue")); assertEquals(valueObject.floatValue, typedObject.get("floatValue")); assertEquals(valueObject.doubleValue, typedObject.get("doubleValue")); assertEquals(valueObject.bigDecimalValue, typedObject.get("bigDecimalValue")); assertEquals(valueObject.stringValue, typedObject.get("stringValue")); assertEquals(valueObject.calendarValue, typedObject.get("calendarValue")); Person[] personArray = valueObject.personList; object = typedObject.get("personList"); assertNotNull(object); assertTrue(object instanceof List); List<Object> personList = (List<Object>) object; assertEquals(personArray.length, personList.size()); for (int i = 0; i < personArray.length; i++) { Person person = personArray[i]; object = personList.get(i); assertNotNull(object); assertTrue(object instanceof Map); Map<String, Object> personMap = (Map<String, Object>) object; assertEquals(person.no, personMap.get("no")); assertEquals(person.name, personMap.get("name")); } } } class ValueObject { public boolean booleanValue; public byte byteValue; public short shortValue; public int intValue; public long longValue; public BigInteger bigIntegerValue; public float floatValue; public double doubleValue; public BigDecimal bigDecimalValue; public String stringValue; public Calendar calendarValue; public Person[] personList; } class Person { public int no; public String name; }