#352 修复XStreamTransformer由于classloader原因导致的ClassCastException问题

This commit is contained in:
Binary Wang 2017-10-18 12:33:52 +08:00
parent 0f007d970b
commit afb5e6151f
3 changed files with 28 additions and 12 deletions

View File

@ -46,17 +46,19 @@ public class XStreamTransformer {
private static Map<Class, XStream> configXStreamInstance() { private static Map<Class, XStream> configXStreamInstance() {
Map<Class, XStream> map = new HashMap<>(); Map<Class, XStream> map = new HashMap<>();
map.put(WxCpXmlMessage.class, config_WxCpXmlMessage()); map.put(WxCpXmlMessage.class, configWxCpXmlMessage());
map.put(WxCpXmlOutNewsMessage.class, config_WxCpXmlOutNewsMessage()); map.put(WxCpXmlOutNewsMessage.class, configWxCpXmlOutNewsMessage());
map.put(WxCpXmlOutTextMessage.class, config_WxCpXmlOutTextMessage()); map.put(WxCpXmlOutTextMessage.class, configWxCpXmlOutTextMessage());
map.put(WxCpXmlOutImageMessage.class, config_WxCpXmlOutImageMessage()); map.put(WxCpXmlOutImageMessage.class, configWxCpXmlOutImageMessage());
map.put(WxCpXmlOutVideoMessage.class, config_WxCpXmlOutVideoMessage()); map.put(WxCpXmlOutVideoMessage.class, configWxCpXmlOutVideoMessage());
map.put(WxCpXmlOutVoiceMessage.class, config_WxCpXmlOutVoiceMessage()); map.put(WxCpXmlOutVoiceMessage.class, configWxCpXmlOutVoiceMessage());
return map; return map;
} }
private static XStream config_WxCpXmlMessage() { private static XStream configWxCpXmlMessage() {
XStream xstream = XStreamInitializer.getInstance(); XStream xstream = XStreamInitializer.getInstance();
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
xstream.processAnnotations(WxCpXmlMessage.class); xstream.processAnnotations(WxCpXmlMessage.class);
xstream.processAnnotations(WxCpXmlMessage.ScanCodeInfo.class); xstream.processAnnotations(WxCpXmlMessage.ScanCodeInfo.class);
xstream.processAnnotations(WxCpXmlMessage.SendPicsInfo.class); xstream.processAnnotations(WxCpXmlMessage.SendPicsInfo.class);
@ -65,38 +67,48 @@ public class XStreamTransformer {
return xstream; return xstream;
} }
private static XStream config_WxCpXmlOutImageMessage() { private static XStream configWxCpXmlOutImageMessage() {
XStream xstream = XStreamInitializer.getInstance(); XStream xstream = XStreamInitializer.getInstance();
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
xstream.processAnnotations(WxCpXmlOutMessage.class); xstream.processAnnotations(WxCpXmlOutMessage.class);
xstream.processAnnotations(WxCpXmlOutImageMessage.class); xstream.processAnnotations(WxCpXmlOutImageMessage.class);
return xstream; return xstream;
} }
private static XStream config_WxCpXmlOutNewsMessage() { private static XStream configWxCpXmlOutNewsMessage() {
XStream xstream = XStreamInitializer.getInstance(); XStream xstream = XStreamInitializer.getInstance();
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
xstream.processAnnotations(WxCpXmlOutMessage.class); xstream.processAnnotations(WxCpXmlOutMessage.class);
xstream.processAnnotations(WxCpXmlOutNewsMessage.class); xstream.processAnnotations(WxCpXmlOutNewsMessage.class);
xstream.processAnnotations(WxCpXmlOutNewsMessage.Item.class); xstream.processAnnotations(WxCpXmlOutNewsMessage.Item.class);
return xstream; return xstream;
} }
private static XStream config_WxCpXmlOutTextMessage() { private static XStream configWxCpXmlOutTextMessage() {
XStream xstream = XStreamInitializer.getInstance(); XStream xstream = XStreamInitializer.getInstance();
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
xstream.processAnnotations(WxCpXmlOutMessage.class); xstream.processAnnotations(WxCpXmlOutMessage.class);
xstream.processAnnotations(WxCpXmlOutTextMessage.class); xstream.processAnnotations(WxCpXmlOutTextMessage.class);
return xstream; return xstream;
} }
private static XStream config_WxCpXmlOutVideoMessage() { private static XStream configWxCpXmlOutVideoMessage() {
XStream xstream = XStreamInitializer.getInstance(); XStream xstream = XStreamInitializer.getInstance();
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
xstream.processAnnotations(WxCpXmlOutMessage.class); xstream.processAnnotations(WxCpXmlOutMessage.class);
xstream.processAnnotations(WxCpXmlOutVideoMessage.class); xstream.processAnnotations(WxCpXmlOutVideoMessage.class);
xstream.processAnnotations(WxCpXmlOutVideoMessage.Video.class); xstream.processAnnotations(WxCpXmlOutVideoMessage.Video.class);
return xstream; return xstream;
} }
private static XStream config_WxCpXmlOutVoiceMessage() { private static XStream configWxCpXmlOutVoiceMessage() {
XStream xstream = XStreamInitializer.getInstance(); XStream xstream = XStreamInitializer.getInstance();
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
xstream.processAnnotations(WxCpXmlOutMessage.class); xstream.processAnnotations(WxCpXmlOutMessage.class);
xstream.processAnnotations(WxCpXmlOutVoiceMessage.class); xstream.processAnnotations(WxCpXmlOutVoiceMessage.class);
return xstream; return xstream;

View File

@ -56,6 +56,8 @@ public class XStreamTransformer {
*/ */
private static void registerClass(Class<?> clz) { private static void registerClass(Class<?> clz) {
XStream xstream = XStreamInitializer.getInstance(); XStream xstream = XStreamInitializer.getInstance();
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
xstream.processAnnotations(clz); xstream.processAnnotations(clz);
xstream.processAnnotations(getInnerClasses(clz)); xstream.processAnnotations(getInnerClasses(clz));
if (clz.equals(WxMaMessage.class)) { if (clz.equals(WxMaMessage.class)) {

View File

@ -60,6 +60,8 @@ public class XStreamTransformer {
*/ */
private static void registerClass(Class<?> clz) { private static void registerClass(Class<?> clz) {
XStream xstream = XStreamInitializer.getInstance(); XStream xstream = XStreamInitializer.getInstance();
xstream.setClassLoader(Thread.currentThread().getContextClassLoader());
xstream.processAnnotations(clz); xstream.processAnnotations(clz);
xstream.processAnnotations(getInnerClasses(clz)); xstream.processAnnotations(getInnerClasses(clz));
if (clz.equals(WxMpXmlMessage.class)) { if (clz.equals(WxMpXmlMessage.class)) {