mirror of
https://gitee.com/binary/weixin-java-tools.git
synced 2025-05-05 05:07:46 +08:00
重构优化XStreamTransformer代码
This commit is contained in:
parent
109cab8c54
commit
e4df6c8a30
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user