package com.tencent.qcloud.qcloudxml.core; import android.util.Xml; import java.io.IOException; import java.io.InputStream; import java.io.StringWriter; import java.util.HashMap; import java.util.Map; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; import org.xmlpull.v1.XmlPullParserFactory; import org.xmlpull.v1.XmlSerializer; public final class QCloudXml { public static final Map<Class<?>, IXmlAdapter<?>> XML_ADAPTERS = new HashMap(); private static <T> IXmlAdapter<T> createXmlAdapter(Class<?> cls) { Map<Class<?>, IXmlAdapter<?>> map = XML_ADAPTERS; IXmlAdapter<?> iXmlAdapter = map.get(cls); if (iXmlAdapter != null) { return iXmlAdapter; } String name = cls.getName(); try { IXmlAdapter<T> iXmlAdapter2 = (IXmlAdapter) Class.forName(name + "$$XmlAdapter").newInstance(); map.put(cls, iXmlAdapter2); return iXmlAdapter2; } catch (IllegalAccessException e14) { throw new RuntimeException("No IXmlAdapter for class " + name + " found. Expected name of the xml adapter is " + name + "$$XmlAdapter", e14); } catch (InstantiationException e15) { throw new RuntimeException("No IXmlAdapter for class " + name + " found. Expected name of the xml adapter is " + name + "$$XmlAdapter", e15); } catch (ClassNotFoundException e16) { throw new RuntimeException("No IXmlAdapter for class " + name + " found. Expected name of the xml adapter is " + name + "$$XmlAdapter", e16); } } public static <T> T fromXml(InputStream inputStream, Class<T> cls) throws XmlPullParserException, IOException { XmlPullParser newPullParser = Xml.newPullParser(); newPullParser.setInput(inputStream, "UTF-8"); return (T) fromXml(newPullParser, cls); } private static String removeXMLHeader(String str) { return (str == null || !str.startsWith("<?xml")) ? str : str.substring(str.indexOf("?>") + 2); } public static <T> String toXml(T t14) throws XmlPullParserException, IOException { if (t14 == null) { return null; } StringWriter stringWriter = new StringWriter(); XmlSerializer newSerializer = XmlPullParserFactory.newInstance().newSerializer(); newSerializer.setOutput(stringWriter); newSerializer.setFeature("http://xmlpull.org/v1/doc/features.html#indent-output", true); newSerializer.startDocument("UTF-8", null); toXml(newSerializer, t14); newSerializer.endDocument(); return removeXMLHeader(stringWriter.toString()); } public static <T> T fromXml(XmlPullParser xmlPullParser, Class<T> cls) throws XmlPullParserException, IOException { return (T) createXmlAdapter(cls).fromXml(xmlPullParser); } public static <T> void toXml(XmlSerializer xmlSerializer, T t14) throws XmlPullParserException, IOException { createXmlAdapter(t14.getClass()).toXml(xmlSerializer, t14); } }