在写微信被动消息回复时,遇到需要在xml文件中对String类型增加cdata标签,使用XStream不支持。后来在网上找了一大堆都不行,要不就写的十分复杂懒得看。
后来决定重写了XStream的初始化方法,2步搞定。
protected static String PREFIX_CDATA = "<![CDATA[";
protected static String SUFFIX_CDATA = "]]>";
/**
* xstream初始化方法实现将String类型的属性增加cdata
* @return
*/
public static XStream initXStream() {
return new XStream(new XppDriver() {
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out) {
boolean iscdata=false;
@Override
public void startNode(String name, Class clazz) {
super.startNode(name, clazz);
if(clazz.getName().equals("java.lang.String")){
iscdata=true;
}else{
iscdata=false;
}
}
protected void writeText(QuickWriter writer, String text) {
if(iscdata){
writer.write(PREFIX_CDATA + text + SUFFIX_CDATA);
}else{
writer.write(text);
}
}
};
}
});
}
重写startnode方法和writeText方法就ok了
我写的这个是String类型的加CDATA标签,大家可以把startnode方法中的两个参数打印一下,就什么都清楚了,可以根据自己的需要修改。
后来发现微信消息回复可以不用加CDATA标签,狂汗!