添加 XStream 插件

yun-zuoyi
wei.peng 6 years ago
parent f8fd8dbab0
commit c4db15db9b

@ -35,6 +35,10 @@
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
</dependency>
</dependencies>

@ -0,0 +1,18 @@
package cn.estsh.i3plus.pojo.base.annotation;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* @Description : XStream CDATA
* @Reference :
* @Author : wei.peng
* @CreateDate : 2019-07-23 5:52
* @Modify:
**/
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.FIELD)
public @interface XStreamCDATA {
}

@ -0,0 +1,236 @@
package cn.estsh.i3plus.pojo.base.common;
import cn.estsh.i3plus.pojo.base.annotation.XStreamCDATA;
import com.alibaba.fastjson.JSON;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.core.util.QuickWriter;
import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
import com.thoughtworks.xstream.io.naming.NameCoder;
import com.thoughtworks.xstream.io.naming.NoNameCoder;
import com.thoughtworks.xstream.io.xml.DomDriver;
import com.thoughtworks.xstream.io.xml.PrettyPrintWriter;
import com.thoughtworks.xstream.io.xml.XppDomDriver;
import lombok.Data;
import sun.plugin2.util.SystemUtil;
import java.io.Serializable;
import java.io.Writer;
import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.List;
import java.util.UUID;
/**
* @Description : Xml
* @Reference :
* @Author : wei.peng
* @CreateDate : 19-7-23 5:58
* @Modify:
**/
public class XStreamFactory {
private static final XStream xStream = XStreamFactory.getXStream();
public static final String CDATA_PREFIX = "<![CDATA[";
public static final String CDATA_SUFFIX = "]]>";
public static XStream getXStream() {
final NameCoder nameCoder = new NoNameCoder();
XStream xStream = new XStream(new XppDomDriver(nameCoder) {
@Override
public HierarchicalStreamWriter createWriter(Writer out) {
return new PrettyPrintWriter(out, nameCoder) {
boolean cdataFlag = false;
Class<?> targetClass = null;
@Override
public void startNode(String name, Class clazz) {
super.startNode(name, clazz);
if (targetClass == null) {
targetClass = clazz;
}
cdataFlag = isCDATA(targetClass, name);
}
@Override
public void writeText(QuickWriter writer, String text) {
if (cdataFlag) {
writer.write(CDATA_PREFIX);
writer.write(text);
writer.write(CDATA_SUFFIX);
} else {
writer.write(text);
}
}
};
}
});
return xStream;
}
private static boolean isCDATA(Class<?> clazz, String fieldAlias) {
//检查类本身
boolean cdataFlag = isExistCDATA(clazz, fieldAlias);
if (cdataFlag) {
return cdataFlag;
}
//继续检查父类
Class<?> superClazz = clazz.getSuperclass();
while (!superClazz.equals(Object.class)) {
cdataFlag = isExistCDATA(superClazz, fieldAlias);
if (cdataFlag) {
return cdataFlag;
}
superClazz = superClazz.getClass().getSuperclass();
}
return false;
}
/**
* @XStreamCDATA
*
* @param clazz clazz
* @param fieldAlias fieldAlias
* @return
*/
private static boolean isExistCDATA(Class<?> clazz, String fieldAlias) {
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
if (field.getAnnotation(XStreamCDATA.class) != null) {
XStreamAlias xStreamAlias = field.getAnnotation(XStreamAlias.class);
if (xStreamAlias != null && fieldAlias.equals(xStreamAlias.value())) {
return true;
} else {
if (fieldAlias.equals(field.getName())) {
return true;
}
}
}
}
return false;
}
/**
* Javabean XML
* @param <T>
* @return xml
*/
public static <T> String toXml(T t) {
xStream.processAnnotations(t.getClass());
String headLine = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
return headLine + xStream.toXML(t);
}
/**
* XMLjavabean
*
* @param xmlStr xml
* @param <T>
* @return Java
*/
public static <T> T toJavaBean(String xmlStr) {
return (T) xStream.fromXML(xmlStr);
}
//
// public static void main(String[] args) {
// User u = new User(0, "zhangsan0", "zhangsanpwd0");
// User u1 = new User(1, "zhangsan1", "zhangsanpwd");
// User u2 = new User(2, "zhangsan2", "zhangsanpwd");
// User u3 = new User(3, "zhangsan3", "zhangsanpwd");
//
// Role r1 = new Role(1, "Admin", "Admin1");
// Role r2 = new Role(2, "Admin", "Admin2");
// Role r3 = new Role(3, "Admin", "Admin3");
//
// DataAdapter ad = new DataAdapter(10086L,UUID.randomUUID().toString(),"sssfwef",u1);
// u1.setRole(r1);
//
// u2.getRoleList().add(r1);
// u2.getRoleList().add(r2);
// u2.getRoleList().add(r3);
//
// u3.setRole(r1);
// u3.getRoleList().add(r2);
// u3.getRoleList().add(r3);
//
// System.out.println(toXml(u) + "\n\n ");
// System.out.println(toXml(u1) + "\n\n ");
// System.out.println(toXml(u2) + "\n\n ");
// System.out.println(toXml(u3) + "\n\n ");
// System.out.println(toXml(ad) + "\n\n ");
//
// System.out.println(JSON.toJSONString(toJavaBean(toXml(ad))));
//
// }
}
//
//@Data
//@XStreamAlias("DataAdapter")
////对应carInfos元素
//class DataAdapter implements Serializable {
//
// @XStreamAsAttribute
// private Long scId;
// private String key;
// @XStreamCDATA
// private String resultData;
//
// private Object auth;
//
// public DataAdapter(Long scId, String key, String resultData, Object auth) {
// this.scId = scId;
// this.key = key;
// this.resultData = resultData;
// this.auth = auth;
// }
//}
//
//@Data
//@XStreamAlias("user")
////对应carInfos元素
//class User implements Serializable {
// private static final long serialVersionUID = -7554548655397869156L;
//
// @XStreamAsAttribute
// private Integer id;
// private String loginName;
// private String loginPwd;
//
// private Role role;
// private List<Role> roleList = new ArrayList<Role>();
// private List<Role> roleArray;
//
// public User() {
// }
//
// public User(Integer id, String loginName, String loginPwd) {
// this.id = id;
// this.loginName = loginName;
// this.loginPwd = loginPwd;
// }
//}
//
//@Data
//@XStreamAlias("role")
////对应carInfos元素
//class Role implements Serializable {
// private static final long serialVersionUID = -3134157833696958743L;
// @XStreamAsAttribute
// private Integer id;
// private String roleName;
// private String roleCode;
//
// public Role() {
// }
//
// public Role(Integer id, String roleName, String roleCode) {
// this.id = id;
// this.roleName = roleName;
// this.roleCode = roleCode;
// }
//}

@ -150,6 +150,11 @@
<artifactId>fastjson</artifactId>
<version>1.2.49</version>
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.11.1</version>
</dependency>
</dependencies>
</dependencyManagement>

Loading…
Cancel
Save