mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 10:38:42 +08:00 
			
		
		
		
	重构优化XStreamTransformer代码
This commit is contained in:
		| @ -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.*; | ||||
|  | ||||
| import java.io.InputStream; | ||||
| import java.util.*; | ||||
|  | ||||
| public class XStreamTransformer { | ||||
|   private static final Map<Class<?>, XStream> CLASS_2_XSTREAM_INSTANCE = new HashMap<>(); | ||||
|  | ||||
|   protected static final Map<Class<?>, XStream> CLASS_2_XSTREAM_INSTANCE = configXStreamInstance(); | ||||
|   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; | ||||
|   /** | ||||
|    * 注册扩展消息的解析器 | ||||
|    * | ||||
|    * @param clz     类型 | ||||
|    * @param xStream xml解析器 | ||||
|    */ | ||||
|   public static void register(Class<?> clz, XStream xStream) { | ||||
|     CLASS_2_XSTREAM_INSTANCE.put(clz, xStream); | ||||
|   } | ||||
|  | ||||
|   private static XStream config_WxMpXmlMessage() { | ||||
|   public static void registerClass(Class<?> clz) { | ||||
|     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; | ||||
|     xstream.processAnnotations(clz); | ||||
|     xstream.processAnnotations(getInnerClasses(clz)); | ||||
|     register(clz, xstream); | ||||
|   } | ||||
|  | ||||
|   private static XStream config_WxMpXmlOutImageMessage() { | ||||
|     XStream xstream = XStreamInitializer.getInstance(); | ||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutImageMessage.class); | ||||
|     return xstream; | ||||
|   private static Class<?>[] getInnerClasses(Class<?> clz) { | ||||
|     Class<?>[] innerClasses = clz.getClasses(); | ||||
|     if (innerClasses == null) { | ||||
|       return null; | ||||
|     } | ||||
|  | ||||
|   private static XStream config_WxMpXmlOutNewsMessage() { | ||||
|     XStream xstream = XStreamInitializer.getInstance(); | ||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutNewsMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutNewsMessage.Item.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_WxMpXmlOutMusicMessage() { | ||||
|     XStream xstream = XStreamInitializer.getInstance(); | ||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutMusicMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutMusicMessage.Music.class); | ||||
|     return xstream; | ||||
|       result.addAll(Arrays.asList(innerClz)); | ||||
|     } | ||||
|  | ||||
|   private static XStream config_WxMpXmlOutTextMessage() { | ||||
|     XStream xstream = XStreamInitializer.getInstance(); | ||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutTextMessage.class); | ||||
|     return xstream; | ||||
|     return result.toArray(new Class<?>[0]); | ||||
|   } | ||||
|  | ||||
|   private static XStream config_WxMpXmlOutVideoMessage() { | ||||
|     XStream xstream = XStreamInitializer.getInstance(); | ||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutVideoMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutVideoMessage.Video.class); | ||||
|     return xstream; | ||||
|   } | ||||
|  | ||||
|   private static XStream config_WxMpXmlOutVoiceMessage() { | ||||
|     XStream xstream = XStreamInitializer.getInstance(); | ||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutVoiceMessage.class); | ||||
|     return xstream; | ||||
|   } | ||||
|  | ||||
|   private static XStream config_WxMpXmlOutTransferCustomerServiceMessage() { | ||||
|     XStream xstream = XStreamInitializer.getInstance(); | ||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutTransferKefuMessage.class); | ||||
|     xstream.processAnnotations(WxMpXmlOutTransferKefuMessage.TransInfo.class); | ||||
|     return xstream; | ||||
|   } | ||||
|  | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user
	 Binary Wang
					Binary Wang