mirror of
				https://gitee.com/binary/weixin-java-tools.git
				synced 2025-10-31 18:46:10 +08:00 
			
		
		
		
	重构优化XStreamTransformer代码
This commit is contained in:
		| @ -1,25 +1,25 @@ | |||||||
| package me.chanjar.weixin.mp.util.xml; | 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 com.thoughtworks.xstream.XStream; | ||||||
|  |  | ||||||
| import me.chanjar.weixin.common.util.xml.XStreamInitializer; | import me.chanjar.weixin.common.util.xml.XStreamInitializer; | ||||||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlMessage; | import me.chanjar.weixin.mp.bean.message.*; | ||||||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutImageMessage; |  | ||||||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMessage; | import java.io.InputStream; | ||||||
| import me.chanjar.weixin.mp.bean.message.WxMpXmlOutMusicMessage; | import java.util.*; | ||||||
| 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; |  | ||||||
|  |  | ||||||
| public class XStreamTransformer { | 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 |    * xml -> pojo | ||||||
| @ -36,16 +36,6 @@ public class XStreamTransformer { | |||||||
|     return object; |     return object; | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   /** |  | ||||||
|    * 注册扩展消息的解析器 |  | ||||||
|    * @param clz 类型 |  | ||||||
|    * @param xStream xml解析器 |  | ||||||
|    */ |  | ||||||
|   public static void register(Class<?> clz, XStream xStream) { |  | ||||||
|     CLASS_2_XSTREAM_INSTANCE.put(clz,xStream); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|  |  | ||||||
|   /** |   /** | ||||||
|    * pojo -> xml |    * pojo -> xml | ||||||
|    */ |    */ | ||||||
| @ -53,83 +43,40 @@ public class XStreamTransformer { | |||||||
|     return CLASS_2_XSTREAM_INSTANCE.get(clazz).toXML(object); |     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()); |    * @param clz     类型 | ||||||
|     map.put(WxMpXmlOutNewsMessage.class, config_WxMpXmlOutNewsMessage()); |    * @param xStream xml解析器 | ||||||
|     map.put(WxMpXmlOutTextMessage.class, config_WxMpXmlOutTextMessage()); |    */ | ||||||
|     map.put(WxMpXmlOutImageMessage.class, config_WxMpXmlOutImageMessage()); |   public static void register(Class<?> clz, XStream xStream) { | ||||||
|     map.put(WxMpXmlOutVideoMessage.class, config_WxMpXmlOutVideoMessage()); |     CLASS_2_XSTREAM_INSTANCE.put(clz, xStream); | ||||||
|     map.put(WxMpXmlOutVoiceMessage.class, config_WxMpXmlOutVoiceMessage()); |  | ||||||
|     map.put(WxMpXmlOutTransferKefuMessage.class, config_WxMpXmlOutTransferCustomerServiceMessage()); |  | ||||||
|  |  | ||||||
|     return map; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   private static XStream config_WxMpXmlMessage() { |   public static void registerClass(Class<?> clz) { | ||||||
|     XStream xstream = XStreamInitializer.getInstance(); |     XStream xstream = XStreamInitializer.getInstance(); | ||||||
|     xstream.processAnnotations(WxMpXmlMessage.class); |     xstream.processAnnotations(clz); | ||||||
|     xstream.processAnnotations(WxMpXmlMessage.ScanCodeInfo.class); |     xstream.processAnnotations(getInnerClasses(clz)); | ||||||
|     xstream.processAnnotations(WxMpXmlMessage.SendPicsInfo.class); |     register(clz, xstream); | ||||||
|     xstream.processAnnotations(WxMpXmlMessage.SendPicsInfo.Item.class); |  | ||||||
|     xstream.processAnnotations(WxMpXmlMessage.SendLocationInfo.class); |  | ||||||
|  |  | ||||||
|     xstream.aliasField("MsgID", WxMpXmlMessage.class, "msgId"); |  | ||||||
|     return xstream; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   private static XStream config_WxMpXmlOutImageMessage() { |   private static Class<?>[] getInnerClasses(Class<?> clz) { | ||||||
|     XStream xstream = XStreamInitializer.getInstance(); |     Class<?>[] innerClasses = clz.getClasses(); | ||||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); |     if (innerClasses == null) { | ||||||
|     xstream.processAnnotations(WxMpXmlOutImageMessage.class); |       return null; | ||||||
|     return xstream; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   private static XStream config_WxMpXmlOutNewsMessage() { |     List<Class<?>> result = new ArrayList<>(); | ||||||
|     XStream xstream = XStreamInitializer.getInstance(); |     result.addAll(Arrays.asList(innerClasses)); | ||||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); |     for (Class<?> inner : innerClasses) { | ||||||
|     xstream.processAnnotations(WxMpXmlOutNewsMessage.class); |       Class<?>[] innerClz = getInnerClasses(inner); | ||||||
|     xstream.processAnnotations(WxMpXmlOutNewsMessage.Item.class); |       if (innerClz == null) { | ||||||
|     return xstream; |         continue; | ||||||
|       } |       } | ||||||
|  |  | ||||||
|   private static XStream config_WxMpXmlOutMusicMessage() { |       result.addAll(Arrays.asList(innerClz)); | ||||||
|     XStream xstream = XStreamInitializer.getInstance(); |  | ||||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); |  | ||||||
|     xstream.processAnnotations(WxMpXmlOutMusicMessage.class); |  | ||||||
|     xstream.processAnnotations(WxMpXmlOutMusicMessage.Music.class); |  | ||||||
|     return xstream; |  | ||||||
|     } |     } | ||||||
|  |  | ||||||
|   private static XStream config_WxMpXmlOutTextMessage() { |     return result.toArray(new Class<?>[0]); | ||||||
|     XStream xstream = XStreamInitializer.getInstance(); |  | ||||||
|     xstream.processAnnotations(WxMpXmlOutMessage.class); |  | ||||||
|     xstream.processAnnotations(WxMpXmlOutTextMessage.class); |  | ||||||
|     return xstream; |  | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   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