导入jar包
<!-- http://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.7</version>
</dependency>
XMLDemo.java
public static void main(String[] args) {
String dataxml="<xml>"
+ "<return_code><![CDATA[SUCCESS]]></return_code>"
+ "<return_msg><![CDATA[该用户今日操作次数超过限制,如有需要请登录微信支付商户平台更改API安全配置]]></return_msg>"
+ "<result_code><![CDATA[FAIL]]></result_code>"
+ "<err_code><![CDATA[SENDNUM_LIMIT]]></err_code>"
+ "<err_code_des><![CDATA[该用户今日操作次数超过限制,如有需要请登录微信支付商户平台更改API安全配置]]></err_code_des>"
+ "<mch_billno><![CDATA[]]></mch_billno>"
+ "<mch_id><![CDATA[]]></mch_id>"
+ "<wxappid><![CDATA[]]></wxappid>"
+ "<re_openid><![CDATA[]]></re_openid>"
+ "<total_amount>100</total_amount>"
+ "</xml>";
XStream xstream = XStreamInitializer.getInstance();
xstream.processAnnotations(WxRedPackageRsult.class);
WxRedPackageRsult wxRedPackageRsult=(WxRedPackageRsult) xstream.fromXML(dataxml);
System.out.println(wxRedPackageRsult.getReturnCode());
}
实体类
WxRedPackageRsult.java
package com.sc.api.util;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamConverter;
/**
* <pre>
* 微信推送过来的消息,也是同步回复给用户的消息,xml格式
* 相关字段的解释看微信开发者文档:
* http://mp.weixin.qq.com/wiki/17/f298879f8fb29ab98b2f2971d42552fd.html
* http://mp.weixin.qq.com/wiki/7/9f89d962eba4c5924ed95b513ba69d9b.html
* </pre>
*
* @author antgan
*/
@XStreamAlias("xml")
public class WxRedPackageRsult {
///////////////////////
// 以下都是微信推送过来的消息的xml的element所对应的属性
///////////////////////
@XStreamAlias("return_code")
@XStreamConverter(value = XStreamCDataConverter.class)
private String returnCode;
public String getReturnCode() {
return returnCode;
}
public void setReturnCode(String returnCode) {
this.returnCode = returnCode;
}
}
CDATA 转换器
XStreamCDataConverter.java
package com.sc.api.util;
import com.thoughtworks.xstream.converters.basic.StringConverter;
/**
* CDATA 转换器
* @author FANQIBU
*
*/
public class XStreamCDataConverter extends StringConverter {
@Override
public String toString(Object obj) {
return "<![CDATA[" + super.toString(obj) + "]]>";
}
}
XStream 自定义初始化器
package com.sc.api.util;
import java.io.Writer;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDriver;
import com.thoughtworks.xstream.security.NullPermission;
import com.thoughtworks.xstream.security.PrimitiveTypePermission;
/**
* XStream 自定义初始化器
* @author FANQIBU
*
*/
public class XStreamInitializer {
public static XStream getInstance() {
XStream xstream = new XStream(new XppDriver() {
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out, getNameCoder()) {
protected String PREFIX_CDATA = "<![CDATA[";
protected String SUFFIX_CDATA = "]]>";
protected String PREFIX_MEDIA_ID = "<MediaId>";
protected String SUFFIX_MEDIA_ID = "</MediaId>";
@Override
protected void writeText(QuickWriter writer, String text) {
if (text.startsWith(PREFIX_CDATA) && text.endsWith(SUFFIX_CDATA)) {
writer.write(text);
} else if (text.startsWith(PREFIX_MEDIA_ID) && text.endsWith(SUFFIX_MEDIA_ID)) {
writer.write(text);
} else {
super.writeText(writer, text);
}
}
};
}
});
xstream.ignoreUnknownElements();//忽视null的节点
xstream.setMode(XStream.NO_REFERENCES);
xstream.addPermission(NullPermission.NULL);
xstream.addPermission(PrimitiveTypePermission.PRIMITIVES);
return xstream;
}
}