Skip to content

Commit afb5e61

Browse files
committed
binarywang#352 修复XStreamTransformer由于classloader原因导致的ClassCastException问题
1 parent 0f007d9 commit afb5e61

File tree

3 files changed

+28
-12
lines changed

3 files changed

+28
-12
lines changed

weixin-java-cp/src/main/java/me/chanjar/weixin/cp/util/xml/XStreamTransformer.java

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -46,17 +46,19 @@ public static <T> String toXml(Class<T> clazz, T object) {
4646

4747
private static Map<Class, XStream> configXStreamInstance() {
4848
Map<Class, XStream> map = new HashMap<>();
49-
map.put(WxCpXmlMessage.class, config_WxCpXmlMessage());
50-
map.put(WxCpXmlOutNewsMessage.class, config_WxCpXmlOutNewsMessage());
51-
map.put(WxCpXmlOutTextMessage.class, config_WxCpXmlOutTextMessage());
52-
map.put(WxCpXmlOutImageMessage.class, config_WxCpXmlOutImageMessage());
53-
map.put(WxCpXmlOutVideoMessage.class, config_WxCpXmlOutVideoMessage());
54-
map.put(WxCpXmlOutVoiceMessage.class, config_WxCpXmlOutVoiceMessage());
49+
map.put(WxCpXmlMessage.class, configWxCpXmlMessage());
50+
map.put(WxCpXmlOutNewsMessage.class, configWxCpXmlOutNewsMessage());
51+
map.put(WxCpXmlOutTextMessage.class, configWxCpXmlOutTextMessage());
52+
map.put(WxCpXmlOutImageMessage.class, configWxCpXmlOutImageMessage());
53+
map.put(WxCpXmlOutVideoMessage.class, configWxCpXmlOutVideoMessage());
54+
map.put(WxCpXmlOutVoiceMessage.class, configWxCpXmlOutVoiceMessage());
5555
return map;
5656
}
5757

58-
private static XStream config_WxCpXmlMessage() {
58+
private static XStream configWxCpXmlMessage() {
5959
XStream xstream = XStreamInitializer.getInstance();
60+
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
61+
6062
xstream.processAnnotations(WxCpXmlMessage.class);
6163
xstream.processAnnotations(WxCpXmlMessage.ScanCodeInfo.class);
6264
xstream.processAnnotations(WxCpXmlMessage.SendPicsInfo.class);
@@ -65,38 +67,48 @@ private static XStream config_WxCpXmlMessage() {
6567
return xstream;
6668
}
6769

68-
private static XStream config_WxCpXmlOutImageMessage() {
70+
private static XStream configWxCpXmlOutImageMessage() {
6971
XStream xstream = XStreamInitializer.getInstance();
72+
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
73+
7074
xstream.processAnnotations(WxCpXmlOutMessage.class);
7175
xstream.processAnnotations(WxCpXmlOutImageMessage.class);
7276
return xstream;
7377
}
7478

75-
private static XStream config_WxCpXmlOutNewsMessage() {
79+
private static XStream configWxCpXmlOutNewsMessage() {
7680
XStream xstream = XStreamInitializer.getInstance();
81+
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
82+
7783
xstream.processAnnotations(WxCpXmlOutMessage.class);
7884
xstream.processAnnotations(WxCpXmlOutNewsMessage.class);
7985
xstream.processAnnotations(WxCpXmlOutNewsMessage.Item.class);
8086
return xstream;
8187
}
8288

83-
private static XStream config_WxCpXmlOutTextMessage() {
89+
private static XStream configWxCpXmlOutTextMessage() {
8490
XStream xstream = XStreamInitializer.getInstance();
91+
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
92+
8593
xstream.processAnnotations(WxCpXmlOutMessage.class);
8694
xstream.processAnnotations(WxCpXmlOutTextMessage.class);
8795
return xstream;
8896
}
8997

90-
private static XStream config_WxCpXmlOutVideoMessage() {
98+
private static XStream configWxCpXmlOutVideoMessage() {
9199
XStream xstream = XStreamInitializer.getInstance();
100+
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
101+
92102
xstream.processAnnotations(WxCpXmlOutMessage.class);
93103
xstream.processAnnotations(WxCpXmlOutVideoMessage.class);
94104
xstream.processAnnotations(WxCpXmlOutVideoMessage.Video.class);
95105
return xstream;
96106
}
97107

98-
private static XStream config_WxCpXmlOutVoiceMessage() {
108+
private static XStream configWxCpXmlOutVoiceMessage() {
99109
XStream xstream = XStreamInitializer.getInstance();
110+
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
111+
100112
xstream.processAnnotations(WxCpXmlOutMessage.class);
101113
xstream.processAnnotations(WxCpXmlOutVoiceMessage.class);
102114
return xstream;

weixin-java-miniapp/src/main/java/cn/binarywang/wx/miniapp/util/xml/XStreamTransformer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,8 @@ private static void register(Class<?> clz, XStream xStream) {
5656
*/
5757
private static void registerClass(Class<?> clz) {
5858
XStream xstream = XStreamInitializer.getInstance();
59+
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
60+
5961
xstream.processAnnotations(clz);
6062
xstream.processAnnotations(getInnerClasses(clz));
6163
if (clz.equals(WxMaMessage.class)) {

weixin-java-mp/src/main/java/me/chanjar/weixin/mp/util/xml/XStreamTransformer.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,8 @@ private static void register(Class<?> clz, XStream xStream) {
6060
*/
6161
private static void registerClass(Class<?> clz) {
6262
XStream xstream = XStreamInitializer.getInstance();
63+
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
64+
6365
xstream.processAnnotations(clz);
6466
xstream.processAnnotations(getInnerClasses(clz));
6567
if (clz.equals(WxMpXmlMessage.class)) {

0 commit comments

Comments
 (0)