/******************************************************************************* * Copyright © 2012-2015 eBay Software Foundation * This program is dual licensed under the MIT and Apache 2.0 licenses. * Please see LICENSE for more information. *******************************************************************************/ package com.ebay.jetstream.xmlser; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import com.ebay.jetstream.xmlser.simple.SimpleXMLSerializer; import com.ebay.jetstream.xmlser.spring.SpringBeanDeserializer; import com.ebay.jetstream.xmlser.spring.SpringXMLSerializer; public class XMLSerializationManager { private static final Map<String, XMLSerializer> s_serializers = new HashMap<String, XMLSerializer>(); private static final Map<String, IXmlDeserializer> s_deserializers = new HashMap<String, IXmlDeserializer>(); private static final List<Class<?>> s_xserializable = new ArrayList<Class<?>>(); static { registerSerializer("xml", new SimpleXMLSerializer()); registerSerializer("spring", new SpringXMLSerializer()); registerDeserializer("spring", new SpringBeanDeserializer()); } public static IXmlDeserializer getDeserializer(String format) { return s_deserializers.get(format); } public static XMLSerializer getSerializer(String format) { return s_serializers.get(format); } public static boolean isHidden(Method getter) { return getter == null || getter.isAnnotationPresent(Hidden.class) || getter.getParameterTypes().length != 0 || getter.getName().equals("getClass"); } /** * Returns true if classes of this object should be considered to be XML serializable. * * @param clazz * the class to check * @return true if the class is XSerializable, or is explicitly listed as serializable. */ public static boolean isXSerializable(Class<?> clazz) { if (XSerializable.class.isAssignableFrom(clazz)) return true; for (Class<?> explicitx : s_xserializable) if (explicitx.isAssignableFrom(clazz)) return true; return false; } public static IXmlDeserializer registerDeserializer(String format, IXmlDeserializer deserializer) { IXmlDeserializer old = s_deserializers.get(format); s_deserializers.put(format, deserializer); return old; } public static XMLSerializer registerSerializer(String format, XMLSerializer serializer) { XMLSerializer old = s_serializers.get(format); s_serializers.put(format, serializer); return old; } /** * Adds a class to the explicit list of serializable classes. If the class implements XSerializable, it is already * implicitly serializable. This mechanism exists for classes that should be serialized but the source is unavailable * and extending isn't an appropriate option. * * @param clazz * the class to add. * @return true iff the class is added. */ public static boolean registerXSerializable(Class<?> clazz) { boolean add = !s_xserializable.contains(clazz); if (add) s_xserializable.add(clazz); return add; } }