当前位置:网站首页>XML parsing entity tool class
XML parsing entity tool class
2022-07-28 06:02:00 【King_ Kwin】
import com.alibaba.fastjson.JSON;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.converters.basic.DateConverter;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.XmlFriendlyNameCoder;
import com.thoughtworks.xstream.mapper.MapperWrapper;
import org.apache.commons.lang.StringUtils;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.TimeZone;
/**
* Must be annotation driven
*
* @author
*/
public class XmlUtils {
private static Map<Class<?>, XStream> xStreamMap = Collections.synchronizedMap(new HashMap<Class<?>, XStream>());
/**
* xml to obj
*/
public static <T> T deserializeXml(String xml, Class<T> t) {
if (StringUtils.isEmpty(xml)) {
return null;
}
XStream xstream = getXStreamInstance(t);
return (T)xstream.fromXML(xml);
}
/**
* obj to xml
*/
public static String toXml(Object obj) {
if (obj == null) {
return StringUtils.EMPTY;
}
XStream xstream = getXStreamInstance(obj.getClass());
return xstream.toXML(obj);
}
/**
* thread-safe
*
* @param clazz
* @return
* @auth zhuzhou
*/
private static XStream getXStreamInstance(Class<?> clazz) {
if (xStreamMap.containsKey(clazz)) {
return xStreamMap.get(clazz);
}
synchronized (clazz) {
if (xStreamMap.containsKey(clazz)) {
return xStreamMap.get(clazz);
}
XStream xstream = new XStream(new DomDriver("utf-8", new XmlFriendlyNameCoder("_-", "_"))) {
@Override
protected MapperWrapper wrapMapper(MapperWrapper next) {
return new MapperWrapper(next) {
@Override
public boolean shouldSerializeMember(Class definedIn, String fieldName) {
if (definedIn == Object.class) {
//This is not compatible with implicit collections where item name is not defined
return false;
} else {
return super.shouldSerializeMember(definedIn, fieldName);
}
}
};
}
};
xstream.processAnnotations(clazz);
xstream.autodetectAnnotations(true);
xstream.ignoreUnknownElements();
xstream.registerConverter(new DateConverter(TimeZone.getDefault()));
Class[] classes = new Class[]{clazz};
xstream.allowTypes(classes);
xStreamMap.put(clazz, xstream);
return xstream;
}
}
public static void main(String[] args) {
for (int i = 1;i<20;i++) {
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(JSON.toJSONString(XmlUtils.deserializeXml(XmlUtils.toXml(
new RESPONSE("9999",
"Xml1111 Push failed thread11111111")),RESPONSE.class)));
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println(JSON.toJSONString(XmlUtils.deserializeXml(XmlUtils.toXml(
new RESPONSE1("9999",
"Xml2222 Push failed thread22222222")), RESPONSE1.class)));
}
}).start();
}
}
}
@XStreamAlias("RESPONSE1")
class RESPONSE1 {
@XStreamAlias("RSCODE")
private String rsCode;
@XStreamAlias("RSMSG")
private String rsMsg;
public String getRsCode() {
return rsCode;
}
public void setRsCode(String rsCode) {
this.rsCode = rsCode;
}
public String getRsMsg() {
return rsMsg;
}
public void setRsMsg(String rsMsg) {
this.rsMsg = rsMsg;
}
public RESPONSE1(String rsCode, String rsMsg) {
this.rsCode = rsCode;
this.rsMsg = rsMsg;
}
}
@XStreamAlias("RESPONSE")
class RESPONSE {
@XStreamAlias("RSCODE")
private String rsCode;
@XStreamAlias("RSMSG")
private String rsMsg;
public String getRsCode() {
return rsCode;
}
public void setRsCode(String rsCode) {
this.rsCode = rsCode;
}
public String getRsMsg() {
return rsMsg;
}
public void setRsMsg(String rsMsg) {
this.rsMsg = rsMsg;
}
public RESPONSE(String rsCode, String rsMsg) {
this.rsCode = rsCode;
this.rsMsg = rsMsg;
}
} <!-- https://mvnrepository.com/artifact/com.thoughtworks.xstream/xstream -->
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.18</version>
</dependency>
<!-- https://mvnrepository.com/artifact/com.alibaba/fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.79</version>
</dependency>
<!-- https://mvnrepository.com/artifact/commons-lang/commons-lang -->
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.6</version>
</dependency>边栏推荐
猜你喜欢

预告来袭:【豆冰冰】发.售,现.金.抽.奖等你来拿

CMD and NPM basic commands

How digital library realizes Web3.0 social networking

On July 7, the national wind 24 solar terms "Xiaoshu" came!! Attachment.. cooperation.. completion.. advance.. report

1:开启慢查询日志 与 找到慢SQL

(php毕业设计)基于php甘肃旅游网站管理系统获取
Sqoop安装及使用

(php毕业设计)基于php小说网站管理系统获取

Acquisition of student status management system based on PHP (PHP graduation design)

JS macro task and micro task
随机推荐
单行函数,聚合函数课后练习
Flex elastic box item properties
数字藏品“大乱斗”,千亿市场变局将至?
Chapter IX sub query (key)
Sorting and paging, multi table query after class exercise
简单理解一下MVC和三层架构
ES6 new data types -- > symbol, map, set
(php毕业设计)基于thinkphp5小区物业管理系统
Redis 主从架构的搭建
MySQL multi table query
Briefly understand MVC and three-tier architecture
撞脸ins? Mars数字藏品平台探索数字藏品轻社交
Xshell suddenly failed to connect to the virtual machine
登录时密码错误次数过多,对该用户进行封禁,
Installation and use of sqoop
The difference between null and undefined
ES6 --- deconstruction assignment
tcp和udp的区别和联系
记录下在线扩容服务器遇到的问题 NOCHANGE: partition 1 is size 419428319. it cannot be grown
On how digital collections and entities can empower each other