1
1
package me .chanjar .weixin .mp .util .xml ;
2
2
3
- import java .io .InputStream ;
4
- import java .util .HashMap ;
5
- import java .util .Map ;
6
-
7
3
import com .thoughtworks .xstream .XStream ;
8
-
9
4
import me .chanjar .weixin .common .util .xml .XStreamInitializer ;
10
- import me .chanjar .weixin .mp .bean .message .WxMpXmlMessage ;
11
- import me .chanjar .weixin .mp .bean .message .WxMpXmlOutImageMessage ;
12
- import me .chanjar .weixin .mp .bean .message .WxMpXmlOutMessage ;
13
- import me .chanjar .weixin .mp .bean .message .WxMpXmlOutMusicMessage ;
14
- import me .chanjar .weixin .mp .bean .message .WxMpXmlOutNewsMessage ;
15
- import me .chanjar .weixin .mp .bean .message .WxMpXmlOutTextMessage ;
16
- import me .chanjar .weixin .mp .bean .message .WxMpXmlOutTransferKefuMessage ;
17
- import me .chanjar .weixin .mp .bean .message .WxMpXmlOutVideoMessage ;
18
- import me .chanjar .weixin .mp .bean .message .WxMpXmlOutVoiceMessage ;
5
+ import me .chanjar .weixin .mp .bean .message .*;
19
6
20
- public class XStreamTransformer {
7
+ import java .io .InputStream ;
8
+ import java .util .*;
21
9
22
- protected static final Map <Class <?>, XStream > CLASS_2_XSTREAM_INSTANCE = configXStreamInstance ();
10
+ public class XStreamTransformer {
11
+ private static final Map <Class <?>, XStream > CLASS_2_XSTREAM_INSTANCE = new HashMap <>();
12
+
13
+ static {
14
+ registerClass (WxMpXmlMessage .class );
15
+ registerClass (WxMpXmlOutMusicMessage .class );
16
+ registerClass (WxMpXmlOutNewsMessage .class );
17
+ registerClass (WxMpXmlOutTextMessage .class );
18
+ registerClass (WxMpXmlOutImageMessage .class );
19
+ registerClass (WxMpXmlOutVideoMessage .class );
20
+ registerClass (WxMpXmlOutVoiceMessage .class );
21
+ registerClass (WxMpXmlOutTransferKefuMessage .class );
22
+ }
23
23
24
24
/**
25
25
* xml -> pojo
@@ -36,100 +36,47 @@ public static <T> T fromXml(Class<T> clazz, InputStream is) {
36
36
return object ;
37
37
}
38
38
39
- /**
40
- * 注册扩展消息的解析器
41
- * @param clz 类型
42
- * @param xStream xml解析器
43
- */
44
- public static void register (Class <?> clz , XStream xStream ) {
45
- CLASS_2_XSTREAM_INSTANCE .put (clz ,xStream );
46
- }
47
-
48
-
49
39
/**
50
40
* pojo -> xml
51
41
*/
52
42
public static <T > String toXml (Class <T > clazz , T object ) {
53
43
return CLASS_2_XSTREAM_INSTANCE .get (clazz ).toXML (object );
54
44
}
55
45
56
- private static Map <Class <?>, XStream > configXStreamInstance () {
57
- Map <Class <?>, XStream > map = new HashMap <>();
58
- map .put (WxMpXmlMessage .class , config_WxMpXmlMessage ());
59
- map .put (WxMpXmlOutMusicMessage .class , config_WxMpXmlOutMusicMessage ());
60
- map .put (WxMpXmlOutNewsMessage .class , config_WxMpXmlOutNewsMessage ());
61
- map .put (WxMpXmlOutTextMessage .class , config_WxMpXmlOutTextMessage ());
62
- map .put (WxMpXmlOutImageMessage .class , config_WxMpXmlOutImageMessage ());
63
- map .put (WxMpXmlOutVideoMessage .class , config_WxMpXmlOutVideoMessage ());
64
- map .put (WxMpXmlOutVoiceMessage .class , config_WxMpXmlOutVoiceMessage ());
65
- map .put (WxMpXmlOutTransferKefuMessage .class , config_WxMpXmlOutTransferCustomerServiceMessage ());
66
-
67
- return map ;
68
- }
69
-
70
- private static XStream config_WxMpXmlMessage () {
71
- XStream xstream = XStreamInitializer .getInstance ();
72
- xstream .processAnnotations (WxMpXmlMessage .class );
73
- xstream .processAnnotations (WxMpXmlMessage .ScanCodeInfo .class );
74
- xstream .processAnnotations (WxMpXmlMessage .SendPicsInfo .class );
75
- xstream .processAnnotations (WxMpXmlMessage .SendPicsInfo .Item .class );
76
- xstream .processAnnotations (WxMpXmlMessage .SendLocationInfo .class );
77
-
78
- xstream .aliasField ("MsgID" , WxMpXmlMessage .class , "msgId" );
79
- return xstream ;
80
- }
81
-
82
- private static XStream config_WxMpXmlOutImageMessage () {
83
- XStream xstream = XStreamInitializer .getInstance ();
84
- xstream .processAnnotations (WxMpXmlOutMessage .class );
85
- xstream .processAnnotations (WxMpXmlOutImageMessage .class );
86
- return xstream ;
87
- }
88
-
89
- private static XStream config_WxMpXmlOutNewsMessage () {
90
- XStream xstream = XStreamInitializer .getInstance ();
91
- xstream .processAnnotations (WxMpXmlOutMessage .class );
92
- xstream .processAnnotations (WxMpXmlOutNewsMessage .class );
93
- xstream .processAnnotations (WxMpXmlOutNewsMessage .Item .class );
94
- return xstream ;
46
+ /**
47
+ * 注册扩展消息的解析器
48
+ *
49
+ * @param clz 类型
50
+ * @param xStream xml解析器
51
+ */
52
+ public static void register (Class <?> clz , XStream xStream ) {
53
+ CLASS_2_XSTREAM_INSTANCE .put (clz , xStream );
95
54
}
96
55
97
- private static XStream config_WxMpXmlOutMusicMessage ( ) {
56
+ public static void registerClass ( Class <?> clz ) {
98
57
XStream xstream = XStreamInitializer .getInstance ();
99
- xstream .processAnnotations (WxMpXmlOutMessage .class );
100
- xstream .processAnnotations (WxMpXmlOutMusicMessage .class );
101
- xstream .processAnnotations (WxMpXmlOutMusicMessage .Music .class );
102
- return xstream ;
58
+ xstream .processAnnotations (clz );
59
+ xstream .processAnnotations (getInnerClasses (clz ));
60
+ register (clz , xstream );
103
61
}
104
62
105
- private static XStream config_WxMpXmlOutTextMessage () {
106
- XStream xstream = XStreamInitializer .getInstance ();
107
- xstream .processAnnotations (WxMpXmlOutMessage .class );
108
- xstream .processAnnotations (WxMpXmlOutTextMessage .class );
109
- return xstream ;
110
- }
63
+ private static Class <?>[] getInnerClasses (Class <?> clz ) {
64
+ Class <?>[] innerClasses = clz .getClasses ();
65
+ if (innerClasses == null ) {
66
+ return null ;
67
+ }
111
68
112
- private static XStream config_WxMpXmlOutVideoMessage () {
113
- XStream xstream = XStreamInitializer . getInstance ( );
114
- xstream . processAnnotations ( WxMpXmlOutMessage . class );
115
- xstream . processAnnotations ( WxMpXmlOutVideoMessage . class );
116
- xstream . processAnnotations ( WxMpXmlOutVideoMessage . Video . class );
117
- return xstream ;
118
- }
69
+ List < Class <?>> result = new ArrayList <>();
70
+ result . addAll ( Arrays . asList ( innerClasses ) );
71
+ for ( Class <?> inner : innerClasses ) {
72
+ Class <?>[] innerClz = getInnerClasses ( inner );
73
+ if ( innerClz == null ) {
74
+ continue ;
75
+ }
119
76
120
- private static XStream config_WxMpXmlOutVoiceMessage () {
121
- XStream xstream = XStreamInitializer .getInstance ();
122
- xstream .processAnnotations (WxMpXmlOutMessage .class );
123
- xstream .processAnnotations (WxMpXmlOutVoiceMessage .class );
124
- return xstream ;
125
- }
77
+ result .addAll (Arrays .asList (innerClz ));
78
+ }
126
79
127
- private static XStream config_WxMpXmlOutTransferCustomerServiceMessage () {
128
- XStream xstream = XStreamInitializer .getInstance ();
129
- xstream .processAnnotations (WxMpXmlOutMessage .class );
130
- xstream .processAnnotations (WxMpXmlOutTransferKefuMessage .class );
131
- xstream .processAnnotations (WxMpXmlOutTransferKefuMessage .TransInfo .class );
132
- return xstream ;
80
+ return result .toArray (new Class <?>[0 ]);
133
81
}
134
-
135
82
}
0 commit comments