| @@ -1,25 +1,25 @@ | |||
| package me.chanjar.weixin.mp.util.xml; | |||
| import java.io.InputStream; | |||
| import java.util.HashMap; | |||
| import java.util.Map; | |||
| import com.thoughtworks.xstream.XStream; | |||
| import me.chanjar.weixin.common.util.xml.XStreamInitializer; | |||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; | |||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutImageMessage; | |||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; | |||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMusicMessage; | |||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutNewsMessage; | |||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTextMessage; | |||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutTransferKefuMessage; | |||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutVideoMessage; | |||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutVoiceMessage; | |||
| import me.chanjar.weixin.mp.bean.message.*; | |||
| public class XStreamTransformer { | |||
| import java.io.InputStream; | |||
| import java.util.*; | |||
| protected static final Map<Class<?>, XStream> CLASS_2_XSTREAM_INSTANCE = configXStreamInstance(); | |||
| public class XStreamTransformer { | |||
| private static final Map<Class<?>, XStream> CLASS_2_XSTREAM_INSTANCE = new HashMap<>(); | |||
| static { | |||
| registerClass(WxMpXmlMessage.class); | |||
| registerClass(WxMpXmlOutMusicMessage.class); | |||
| registerClass(WxMpXmlOutNewsMessage.class); | |||
| registerClass(WxMpXmlOutTextMessage.class); | |||
| registerClass(WxMpXmlOutImageMessage.class); | |||
| registerClass(WxMpXmlOutVideoMessage.class); | |||
| registerClass(WxMpXmlOutVoiceMessage.class); | |||
| registerClass(WxMpXmlOutTransferKefuMessage.class); | |||
| } | |||
| /** | |||
| * xml -> pojo | |||
| @@ -36,16 +36,6 @@ public class XStreamTransformer { | |||
| return object; | |||
| } | |||
| /** | |||
| * 注册扩展消息的解析器 | |||
| * @param clz 类型 | |||
| * @param xStream xml解析器 | |||
| */ | |||
| public static void register(Class<?> clz, XStream xStream) { | |||
| CLASS_2_XSTREAM_INSTANCE.put(clz,xStream); | |||
| } | |||
| /** | |||
| * pojo -> xml | |||
| */ | |||
| @@ -53,83 +43,40 @@ public class XStreamTransformer { | |||
| return CLASS_2_XSTREAM_INSTANCE.get(clazz).toXML(object); | |||
| } | |||
| private static Map<Class<?>, XStream> configXStreamInstance() { | |||
| Map<Class<?>, XStream> map = new HashMap<>(); | |||
| map.put(WxMpXmlMessage.class, config_WxMpXmlMessage()); | |||
| map.put(WxMpXmlOutMusicMessage.class, config_WxMpXmlOutMusicMessage()); | |||
| map.put(WxMpXmlOutNewsMessage.class, config_WxMpXmlOutNewsMessage()); | |||
| map.put(WxMpXmlOutTextMessage.class, config_WxMpXmlOutTextMessage()); | |||
| map.put(WxMpXmlOutImageMessage.class, config_WxMpXmlOutImageMessage()); | |||
| map.put(WxMpXmlOutVideoMessage.class, config_WxMpXmlOutVideoMessage()); | |||
| map.put(WxMpXmlOutVoiceMessage.class, config_WxMpXmlOutVoiceMessage()); | |||
| map.put(WxMpXmlOutTransferKefuMessage.class, config_WxMpXmlOutTransferCustomerServiceMessage()); | |||
| return map; | |||
| } | |||
| private static XStream config_WxMpXmlMessage() { | |||
| XStream xstream = XStreamInitializer.getInstance(); | |||
| xstream.processAnnotations(WxMpXmlMessage.class); | |||
| xstream.processAnnotations(WxMpXmlMessage.ScanCodeInfo.class); | |||
| xstream.processAnnotations(WxMpXmlMessage.SendPicsInfo.class); | |||
| xstream.processAnnotations(WxMpXmlMessage.SendPicsInfo.Item.class); | |||
| xstream.processAnnotations(WxMpXmlMessage.SendLocationInfo.class); | |||
| xstream.aliasField("MsgID", WxMpXmlMessage.class, "msgId"); | |||
| return xstream; | |||
| } | |||
| private static XStream config_WxMpXmlOutImageMessage() { | |||
| XStream xstream = XStreamInitializer.getInstance(); | |||
| xstream.processAnnotations(WxMpXmlOutMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutImageMessage.class); | |||
| return xstream; | |||
| } | |||
| private static XStream config_WxMpXmlOutNewsMessage() { | |||
| XStream xstream = XStreamInitializer.getInstance(); | |||
| xstream.processAnnotations(WxMpXmlOutMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutNewsMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutNewsMessage.Item.class); | |||
| return xstream; | |||
| /** | |||
| * 注册扩展消息的解析器 | |||
| * | |||
| * @param clz 类型 | |||
| * @param xStream xml解析器 | |||
| */ | |||
| public static void register(Class<?> clz, XStream xStream) { | |||
| CLASS_2_XSTREAM_INSTANCE.put(clz, xStream); | |||
| } | |||
| private static XStream config_WxMpXmlOutMusicMessage() { | |||
| public static void registerClass(Class<?> clz) { | |||
| XStream xstream = XStreamInitializer.getInstance(); | |||
| xstream.processAnnotations(WxMpXmlOutMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutMusicMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutMusicMessage.Music.class); | |||
| return xstream; | |||
| xstream.processAnnotations(clz); | |||
| xstream.processAnnotations(getInnerClasses(clz)); | |||
| register(clz, xstream); | |||
| } | |||
| private static XStream config_WxMpXmlOutTextMessage() { | |||
| XStream xstream = XStreamInitializer.getInstance(); | |||
| xstream.processAnnotations(WxMpXmlOutMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutTextMessage.class); | |||
| return xstream; | |||
| } | |||
| private static Class<?>[] getInnerClasses(Class<?> clz) { | |||
| Class<?>[] innerClasses = clz.getClasses(); | |||
| if (innerClasses == null) { | |||
| return null; | |||
| } | |||
| private static XStream config_WxMpXmlOutVideoMessage() { | |||
| XStream xstream = XStreamInitializer.getInstance(); | |||
| xstream.processAnnotations(WxMpXmlOutMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutVideoMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutVideoMessage.Video.class); | |||
| return xstream; | |||
| } | |||
| List<Class<?>> result = new ArrayList<>(); | |||
| result.addAll(Arrays.asList(innerClasses)); | |||
| for (Class<?> inner : innerClasses) { | |||
| Class<?>[] innerClz = getInnerClasses(inner); | |||
| if (innerClz == null) { | |||
| continue; | |||
| } | |||
| private static XStream config_WxMpXmlOutVoiceMessage() { | |||
| XStream xstream = XStreamInitializer.getInstance(); | |||
| xstream.processAnnotations(WxMpXmlOutMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutVoiceMessage.class); | |||
| return xstream; | |||
| } | |||
| result.addAll(Arrays.asList(innerClz)); | |||
| } | |||
| private static XStream config_WxMpXmlOutTransferCustomerServiceMessage() { | |||
| XStream xstream = XStreamInitializer.getInstance(); | |||
| xstream.processAnnotations(WxMpXmlOutMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutTransferKefuMessage.class); | |||
| xstream.processAnnotations(WxMpXmlOutTransferKefuMessage.TransInfo.class); | |||
| return xstream; | |||
| return result.toArray(new Class<?>[0]); | |||
| } | |||
| } | |||