Xstream(对象和xml转换)
package com.vcredit.framework.utils;
import java.io.Writer;
import org.apache.commons.lang3.StringUtils;
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.XmlFriendlyNameCoder;
import com.thoughtworks.xstream.io.xml.XppDriver;
/**
 * XML工具类
 */
public class XmlUtils {
/**
     * 创建XStream
     */
    private static XStream createXstream() {
        XStream xstream = new XStream(new MyXppDriver(false));
        xstream.autodetectAnnotations(true);
        return xstream;
    }
/**
     * 支持注解转化XML
     */
    public static String toXML(Object obj, Class<?> cls) {
        if (obj == null) {
            return null;
        }
        XStream xstream = createXstream();
        xstream.processAnnotations(cls);
        return getDefaultXMLHeader() + xstream.toXML(obj);
    }
/**
     * Object 转化 XML
     */
    public static String toXML(Object obj) {
        if (obj == null) {
            return null;
        }
        XStream xstream = createXstream();
        return getDefaultXMLHeader() + xstream.toXML(obj);
    }
/**
     * XML转化为JAVA对象
     */
    @SuppressWarnings("unchecked")
    public static <T> T xml2Obj(String xml, Class<?> cls) {
        if (StringUtils.isBlank(xml)) {
            return null;
        }
        XStream xstream = createXstream();
        if (cls != null) {
            xstream.processAnnotations(cls);
        }
        return (T) xstream.fromXML(xml);
    }
/**
     * XML转化为JAVA对象
     */
    public static <T> T xml2Obj(String xml) {
        return xml2Obj(xml, null);
    }
private static String getDefaultXMLHeader() {
        return "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n";
    }
/**
     * 
     * @description XppDriver
     *
     * @author lixining
     * @version $Id: XmlUtils.java, v 0.1 2015年8月18日 上午9:46:57 lixining Exp $
     */
    public static class MyXppDriver extends XppDriver {
        boolean useCDATA = false;
MyXppDriver(boolean useCDATA) {
            super(new XmlFriendlyNameCoder("__", "_"));
            this.useCDATA = useCDATA;
        }
@Override
        public HierarchicalStreamWriter createWriter(Writer out) {
            if (!useCDATA) {
                return super.createWriter(out);
            }
            return new PrettyPrintWriter(out) {
                boolean cdata = true;
@Override
                public void startNode(String name, @SuppressWarnings("rawtypes") Class clazz) {
                    super.startNode(name, clazz);
                }
@Override
                protected void writeText(QuickWriter writer, String text) {
                    if (cdata) {
                        writer.write(cDATA(text));
                    } else {
                        writer.write(text);
                    }
                }
private String cDATA(String text) {
                    return "<![CDATA[" + text + "]]>";
                }
            };
        }
    }
}
调用方法String xmlForMobileScore = XmlUtils.toXML(decisionReqForMobileScore);
再写到文件中:
String decisionReqName = getSaveFile(timestamp, modelName, "req");
            String decisionResName = getSaveFile(timestamp, modelName, "res");
            logger.info("DecisionClient->Request->" + timestamp + "->" + xml);
            FileUtils.write(new File(decisionReqName), xml, "utf-8");
解析xml:dom4j
private DecisionResponse parseDecisionRespXML(String resultXml) throws BusinessException {
        if (StringUtils.isBlank(resultXml)) {
            throw new BusinessException("决策无数据返回");
        }
        DecisionResponse result = new DecisionResponse();
        Element root = Dom4jUtils.getRoot(resultXml);
        Element decisionResult = root.element("DecisionResult");
        // 决策结果-建议拒绝 or 通过
        Element resultElement = decisionResult.element("Result");
        result.setResult(resultElement.getStringValue());
// 解析拒绝原因
        if (!StringUtils.equals(result.getResult(), "通过")) {
            Element ruleSetElement = decisionResult.element("RuleResultSets");
            List<String> modList = parseRejectRules(decisionResult.element("RejectReasonList"));
            parseRuleSet(result, ruleSetElement, modList);
        }
        
        // 解析决策评分卡结果
        Element vbInfoSetElement = decisionResult.element("VBInfo");
        parseVBInfoSet(result,vbInfoSetElement);
        
        // 解析决策评分细节
        Element ruleResultElement = decisionResult.element("RuleResultCanShowSets");
        parseruleResult(result,ruleResultElement);
Element ruleResultCanShowSets = decisionResult.element("RuleResultCanShowSets");
        parseRelatedRate(result, ruleResultCanShowSets);
        logger.info("Decision Result -> " + GsonUtils.toJson(result));
        return result;
    }
package com.vcredit.framework.utils;
import org.apache.commons.lang3.StringUtils;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Dom4jUtils {
    private static final Logger logger = LoggerFactory.getLogger(Dom4jUtils.class);
public static Document getDocument(String xml) {
        Document document = null;
        try {
            document = DocumentHelper.parseText(xml);
            if (document == null) {
                throw new RuntimeException("document is null");
            }
            return document;
        } catch (Exception e) {
            logger.error("parse xml fail", e);
            throw new RuntimeException("get document fail", e);
        }
    }
/**
     * 解析XML获取Root节点
     * 
     * @param xml
     * @return Element
     */
    public static Element getRoot(String xml) {
        Document document = getDocument(xml);
        return document.getRootElement();
    }
/**
     * 获取节点值
     * 
     * @param root
     * @param nodeName
     * @return String
     */
    public static String getValue(Element root, String nodeName) {
        try {
            if (root == null || StringUtils.isBlank(nodeName)) {
                return null;
            }
            Element nodeElement = root.element(nodeName);
            if (nodeElement == null) {
                return null;
            }
            return nodeElement.getTextTrim();
        } catch (Exception e) {
            logger.error("get node(" + nodeName + ") value fail");
            return null;
        }
    }
//    public static void main(String[] args) throws IOException {
    //        Document doc = getDocument(FileUtils.readFileToString(new File("e:\\test\\result.xml"), "utf-8"));
    //        Element root = doc.getRootElement();
    //        List<Element> elementList = root.elements();
    //        for (Element element : elementList) {
    //            System.err.println("-------------------------->" + element.getName());
    //            System.err.println(element.getStringValue());
    //        }
    //        System.err.println("test");
    //    }
}
Xstream(对象和xml转换)的更多相关文章
- Java对象和XML转换
		
有时候,我们需要把Java对象转换成XML文件.这时可以用JAXB来实现.(JDK1.6及以后的版本无需导入依赖包,因为已经包含在JDK里了) 假如某个公司有许多部门,每个部门有许多职员,我们可以这样 ...
 - webservice04#对象与xml转换-jaxb#Stax解析xml#新建修改xml
		
1,Student类 package com.yangw.xml; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement / ...
 - 使用XStream是实现XML与Java对象的转换(3)--注解
		
六.使用注解(Annotation) 总是使用XStream对象的别名方法和注册转换器,会让人感到非常的乏味,又会产生很多重复性代码,于是我们可以使用注解的方式来配置要序列化的POJO对象. 1,最基 ...
 - 使用XStream注解实现Java对象与XML互相转换的代码示例
		
本文记录一下使用xstream这个api的注解特性对Java对象与XML字符串相互转换的一些代码示例. 我们很多人都处理过XML文件,也有很多非常成熟的第三方开源软件.如:jdom.dom4j等 ...
 - 使用XStream是实现XML与Java对象的转换(4)--转换器
		
七.转换器(Converter) 我们程序中的POJO是千变万化的,而且需求也是千奇百怪的,所以XStream中的内置的转换器的功能不一定能够满足我们的要求,所以我们就需要自己构建转换器. 1,一个基 ...
 - 使用XStream是实现XML与Java对象的转换(2)--别名
		
五.使用别名(Alias) 首先,有这样一段Java代码: import java.util.ArrayList; import java.util.List; import com.thoughtw ...
 - 使用XStream是实现XML与Java对象的转换(1)--简介及入门示例
		
一.简单介绍 XStream是thoughtworks开发的开源框架,用于实现XML数据于Java对象.Json数据的转换.它不需要schema或其他的mapping文件就可以进行java对象和xml ...
 - 使用XStream是实现XML与Java对象的转换(5)--Object Stream
		
八,Object Stream 之前的例子我们都是直接输出Xml成为String类型或者从String中获得并解析Xml,现在我们要处理输入流和输出流! 1,输出流(ObjectOutputStrea ...
 - Java对象表示方式2:XStream实现对对象的XML化
		
上一篇文章讲到了使用Java原生的序列化的方式来表示一个对象.总结一下这种对象表示方式的优缺点: 1.纯粹的Java环境下这种方式可以很好地工作,因为它是Java自带的,也不需要第三方的Jar包的支持 ...
 
随机推荐
- 简单的c#插件框架
			
插件式架构,一种全新的.开放性的.高扩展性的架构体系.插件式架构设计近年来非常流行,基于插件的设计好处很多,把扩展功能从框架中剥离出来,降低了框架的复杂度,让框架更容易实现.扩展功能与框架以一种很松的 ...
 - 【JAVA】数字相加
			
设计思想:定义双精度变量 i 和 s=0 ,定义另一个变量 n 作为计数,方便之后求平均值.程序里将数据输入 i 中,通过 s 来将各个数据求和,最后除 n 得平均值. 程序流程图: 源程序代码: p ...
 - java工厂模式实例化class
			
import java.io.*; import java.util.*; interface fruit { public abstract void eat(); } class Apple im ...
 - The 2015 China Collegiate Programming Contest A. Secrete Master Plan hdu5540
			
Secrete Master Plan Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65535/65535 K (Java/Othe ...
 - HDU2138 & 米勒拉宾模板
			
题意: 给出n个数,判断它是不是素数. SOL: 米勒拉宾裸题,思想方法略懂,并不能完全理解,所以实现只能靠背模板.... 好在不是很长... Code: /*==================== ...
 - SAD算法在opencv上的实现代码(c++)
			
#include <opencv2/opencv.hpp>#include <opencv2/core/core.hpp>#include <opencv2/highgu ...
 - Codeforces Round #248 (Div. 2) B. Kuriyama Mirai's Stones
			
题目简单描述就是求数组中[l,r]区间的和 #include <iostream> #include <vector> #include <string> #inc ...
 - NOIp 2012 #2 借教室 Label:区间修改线段树
			
题目描述 在大学期间,经常需要租借教室.大到院系举办活动,小到学习小组自习讨论,都需要向学校申请借教室.教室的大小功能不同,借教室人的身份不同,借教室的手续也不一样. 面对海量租借教室的信息,我们自然 ...
 - ORA-01034错误:ORALCE NOT CONNECT
			
解决办法: 启动数据库 sqlplus '/as sysdba ' startup;
 - 【HDU】1517 A Multiplication Game
			
http://acm.hdu.edu.cn/showproblem.php?pid=1517 题意:每次乘上2~9..p>=n时赢.. #include <cstdio> #incl ...