小红书.apk(点击下载) / QCloudXml.java


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);
    }
}