1、用xstream将xml转换为javabean案例

Xstream介绍

Xstream是一种OXMapping 技术,是用来处理XML文件序列化的框架,在将JavaBean序列化,或将XML文件反序列化的时候,不需要其它辅助类和映射文件,使得XML序列化不再繁索。Xstream也可以将JavaBean序列化成Json或反序列化,使用非常方便。

1、不使用注解

不使用注解的时候要注意的点是:javabean中的类名以及字段名要和xml文件中的节点名完全相同,大小写也要一样,否则会解析报错

1.1、xml文件(history_property.xml)

<!--<?xml version="1.0" encoding="UTF-8" standalone="no"?>-->
<Config>  
    <configItems>
        <ConfigItem>
            <configName>QUERY_WEB</configName>
            <configParams>
                <ConfigParam>
                    <paramName>QUERY_URL</paramName>
                    <!--<ParamValue>http://192.111.25.245:9080/queryweb/services/IndexQueryService?wsdl</ParamValue>-->
                    <paramValue>http://192.111.25.111:9080/queryweb/services/IndexQueryService?wsdl</paramValue>
                    <!--<ParamValue>http://192.111.25.95:8080/queryweb/services/IndexQueryService?wsdl</ParamValue>-->
                    <paramDesc>queryWeb访问地址</paramDesc>
                </ConfigParam>
                <ConfigParam>
                    <paramName>MAX_PAGE_NUM</paramName>
                    <paramValue>10000</paramValue>
                    <paramDesc>queryWeb每面返回记录数</paramDesc>
                </ConfigParam>
                <ConfigParam>
                    <paramName>MAX_RECORD</paramName>
                    <paramValue>200000</paramValue>
                    <paramDesc>最大返回结果数</paramDesc>
                </ConfigParam>
                <ConfigParam>
                    <paramName>TIME_OUT</paramName>
                    <paramValue>60000</paramValue>
                    <paramDesc>超时时间毫秒</paramDesc>
                </ConfigParam>
            </configParams>
        </ConfigItem>

        <ConfigItem>
            <configName>LOAD_DATA</configName>
            <configParams>
                <ConfigParam>
                    <paramName>ORG_FLUSH_TIME</paramName>
                    <paramValue>24</paramValue>
                    <paramDesc>组织数据更新时间,单位:小时</paramDesc>
                </ConfigParam>
                <ConfigParam>
                    <paramName>ROOT_ORG_LIST</paramName>
                    <paramValue>ROOT,900000000</paramValue>
                    <paramDesc>根节点的组织配置</paramDesc>
                </ConfigParam>
                <ConfigParam>
                    <paramName>QUERY_ORG_SQL</paramName>
                    <paramValue>select inst_no,creunit_no,inst_name,inst_parent_no from F_ORG_TYYH_ORGINFO</paramValue>
                    <paramDesc>组织数据查询语句</paramDesc>
                </ConfigParam>
                <ConfigParam>
                    <paramName>SENSITIVE_FLUSH_TIME</paramName>
                    <paramValue>24</paramValue>
                    <paramDesc>脱敏数据更新时间,单位:小时</paramDesc>
                </ConfigParam>
                <ConfigParam>
                    <paramName>QUERY_SENSITIVE_SQL</paramName>
                    <paramValue>select menu_id,menu_name,column_name,desen_type from cfg_hdqs_data_desensitization</paramValue>
                    <paramDesc>脱敏配置查询语句</paramDesc>
                </ConfigParam>
                <ConfigParam>
                    <paramName>DICT_FLUSH_TIME</paramName>
                    <paramValue>24</paramValue>
                    <paramDesc>字典数据更新时间,单位:小时</paramDesc>
                </ConfigParam>
                <ConfigParam>
                    <paramName>QUERY_DICT_CODE_SQL</paramName>
                    <paramValue>select dd_code,table_name,column_name,comments from cfg_hdqs_dd_code</paramValue>
                    <paramDesc>表字段对应字典表查询语句</paramDesc>
                </ConfigParam>
                <ConfigParam> 
                    <paramName>QUERY_DICT_DESC_SQL</paramName>
                    <paramValue>select dd_code,column_code,code_desc,code_seq from cfg_hdqs_dd_desc</paramValue>
                    <paramDesc>字典表查询语句</paramDesc>
                </ConfigParam>
            </configParams>
        </ConfigItem>
    </configItems>
</Config>

1.2、javabean

1.2.1、Config
/**
 * @Author Xu 
 * @ClassName: com.fjnx.history.entity
 * @Description:  根节点
 * @Date 2019/9/1
 */
public class Config {

    private List<ConfigItem> configItems;//与xml文件中节点configItems大小写一致

    public Config(List<ConfigItem> configItems) {
        this.configItems = configItems;
    }

    public List<ConfigItem> getConfigItems() {
        return configItems;
    }

    public void setConfigItems(List<ConfigItem> configItems) {
        this.configItems = configItems;
    }

    @Override
    public String toString() {
        return "Config{" +
                "configItems=" + configItems +
                '}';
    }
}
1.2.2、ConfigItem
package com.fjnx.history.entity;

import java.util.List;

/**
 * @Author Xu 
 * @ClassName: com.fjnx.history.entity
 * @Description:
 * @Date 2019/9/1
 */
public class ConfigItem {
    private String configName;
    private List<ConfigParam> configParams;

    public ConfigItem(String configName, List<ConfigParam> configParams) {
        this.configName = configName;
        this.configParams = configParams;
    }

    public String getConfigName() {
        return configName;
    }

    public void setConfigName(String configName) {
        this.configName = configName;
    }

    public List<ConfigParam> getConfigParams() {
        return configParams;
    }

    public void setConfigParams(List<ConfigParam> configParams) {
        this.configParams = configParams;
    }

    @Override
    public String toString() {
        return "ConfigItem{" +
                "configName='" + configName + '\'' +
                ", configParams=" + configParams +
                '}';
    }
}

1.2.3、ConfigParam
package com.fjnx.history.entity;

/**
 * @Author Xu 
 * @ClassName: com.fjnx.history.entity
 * @Description:
 * @Date 2019/9/1
 */

public class ConfigParam {

    private String paramName;
    private String paramValue;
    private String paramDesc;

    public ConfigParam(String paramName, String paramValue, String paramDesc) {
        this.paramName = paramName;
        this.paramValue = paramValue;
        this.paramDesc = paramDesc;
    }

    public String getParamName() {
        return paramName;
    }

    public void setParamName(String paramName) {
        this.paramName = paramName;
    }

    public String getParamValue() {
        return paramValue;
    }

    public void setParamValue(String paramValue) {
        this.paramValue = paramValue;
    }

    public String getParamDesc() {
        return paramDesc;
    }

    public void setParamDesc(String paramDesc) {
        this.paramDesc = paramDesc;
    }

    @Override
    public String toString() {
        return "ConfigParam{" +
                "paramName='" + paramName + '\'' +
                ", paramValue='" + paramValue + '\'' +
                ", paramDesc='" + paramDesc + '\'' +
                '}';
    }
}

1.3、代码调试

本次解析xml流文件

package com.fjnx.history;

import com.fjnx.history.entity.Config;
import com.fjnx.history.entity.ConfigItem;
import com.fjnx.history.entity.ConfigParam;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @Author Xu 
 * @ClassName: com.fjnx.history
 * @Description:
 * @Date 2019/8/31
 */
public class ConfigManager {
    private static final String HITORY_PROPERTY="history_property.xml";//配置文件名
    
    public Config parseConfigProperty() {
        InputStream in = null;
        Config config=null;
        try {
            in = ConfigManager.class.getClassLoader().
                    getResourceAsStream(HITORY_PROPERTY);
            XStream xStream = new XStream(new DomDriver());
//            xStream.ignoreUnknownElements();//忽略未知的元素
            //将xml转换为javabean
//            ConfigItem  configItems = (ConfigItem) xStream.fromXML(inputStream, ConfigItem.class);
            xStream.alias("Config", Config.class);
            xStream.alias("ConfigItem", ConfigItem.class);
            xStream.alias("ConfigParam", ConfigParam.class);
            config = (Config) xStream.fromXML(in);
            return config;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return config;
    }

    static String getParam(String configName,String paramName){
        ConfigManager configManager=new ConfigManager();
        Config config=configManager.parseConfigProperty();
        List<ConfigItem> configItems=config.getConfigItems();
        String paramValue=null;
        for(ConfigItem configItem:configItems){
            if(configItem.equals(configItem.getConfigName())){
                List<ConfigParam> configParams= configItem.getConfigParams();
                for(ConfigParam configParam:configParams){
                    if(paramName.equals(configParam.getParamName())){
                        paramValue=configParam.getParamValue();
                        return paramValue;
                    }
                }
            }
        }
        return paramValue;
    }

    public static void main(String[] args) {
       ConfigManager configManager=new ConfigManager();
       configManager.parseConfigProperty();
    }
}

2、使用注解(建议使用此方式,比较方便)

使用注解可以减少一些代码的编写,包括节点名称大小写问题,使用注解可以更方便的解决这个问题

2.1、xml文件

注意此处的xml文件命名不再与javabean中一一对应,比如节点ConfigItems ,javabean中变量名为configItems,接下来看如何使用注解方式解决名称不一致问题

2.1.1、history_property.xml
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--  -->
<Config xmlns:Config="http://www.w3.org/2001/XMLSchema-instance">
    <!--<ConfigItem>-->
        <!--<ConfigName>LOCAL_CONFIG</ConfigName>-->
        <!--<ConfigParam>-->
            <!--<ParamName>STATIC_IP</ParamName>-->
            <!--<ParamValue>192.111.25.93</ParamValue>-->
            <!--<ParamDesc>本机ip设置, 如果不配置取网卡ip</ParamDesc>-->
        <!--</ConfigParam>-->
    <!--</ConfigItem>-->
    <ConfigItem>
        <ConfigName>QUERY_WEB</ConfigName>
        <ConfigParam>
            <ParamName>QUERY_URL</ParamName>
            <!--<ParamValue>http://192.111.25.245:9080/queryweb/services/IndexQueryService?wsdl</ParamValue>-->
            <ParamValue>http://192.111.25.111:9080/queryweb/services/IndexQueryService?wsdl</ParamValue>
            <!--<ParamValue>http://192.111.25.95:8080/queryweb/services/IndexQueryService?wsdl</ParamValue>-->
            <ParamDesc>queryWeb访问地址</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>MAX_PAGE_NUM</ParamName>
            <ParamValue>10000</ParamValue>
            <ParamDesc>queryWeb每面返回记录数</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>MAX_RECORD</ParamName>
            <ParamValue>200000</ParamValue>
            <ParamDesc>最大返回结果数</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>TIME_OUT</ParamName>
            <ParamValue>60000</ParamValue>
            <ParamDesc>超时时间毫秒</ParamDesc>
        </ConfigParam>
    </ConfigItem>

    <ConfigItem>
        <ConfigName>LOAD_DATA</ConfigName>
        <ConfigParam>
            <ParamName>ORG_FLUSH_TIME</ParamName>
            <ParamValue>24</ParamValue>
            <ParamDesc>组织数据更新时间,单位:小时</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>ROOT_ORG_LIST</ParamName>
            <ParamValue>ROOT,900000000</ParamValue>
            <ParamDesc>根节点的组织配置</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>QUERY_ORG_SQL</ParamName>
            <ParamValue>select inst_no,creunit_no,inst_name,inst_parent_no from F_ORG_TYYH_ORGINFO</ParamValue>
            <ParamDesc>组织数据查询语句</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>SENSITIVE_FLUSH_TIME</ParamName>
            <ParamValue>24</ParamValue>
            <ParamDesc>脱敏数据更新时间,单位:小时</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>QUERY_SENSITIVE_SQL</ParamName>
            <ParamValue>select menu_id,menu_name,column_name,desen_type from cfg_hdqs_data_desensitization</ParamValue>
            <ParamDesc>脱敏配置查询语句</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>DICT_FLUSH_TIME</ParamName>
            <ParamValue>24</ParamValue>
            <ParamDesc>字典数据更新时间,单位:小时</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>QUERY_DICT_CODE_SQL</ParamName>
            <ParamValue>select dd_code,table_name,column_name,comments from cfg_hdqs_dd_code</ParamValue>
            <ParamDesc>表字段对应字典表查询语句</ParamDesc>
        </ConfigParam>
        <ConfigParam>
            <ParamName>QUERY_DICT_DESC_SQL</ParamName>
            <ParamValue>select dd_code,column_code,code_desc,code_seq from cfg_hdqs_dd_desc</ParamValue>
            <ParamDesc>字典表查询语句</ParamDesc>
        </ConfigParam>
    </ConfigItem>
</Config>

2.2、javabean

2.2.1、Config

注意集合的注解

package com.fjnx.history.entity;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;

import java.util.List;

/**
 * @Author Xu 
 * @ClassName: com.fjnx.history.entity
 * @Description:  根节点
 * @Date 2019/9/1
 */
@XStreamAlias("Config")
public class Config {
    @XStreamImplicit(itemFieldName = "ConfigItem")
    private List<ConfigItem> configItems;

    public Config(List<ConfigItem> configItems) {
        this.configItems = configItems;
    }

    public List<ConfigItem> getConfigItems() {
        return configItems;
    }

    public void setConfigItems(List<ConfigItem> configItems) {
        this.configItems = configItems;
    }

    @Override
    public String toString() {
        return "Config{" +
                "configItems=" + configItems +
                '}';
    }
}

2.2.2、ConfigItem
package com.fjnx.history.entity;

import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamImplicit;

import java.util.List;

/**
 * @Author Xu 
 * @ClassName: com.fjnx.history.entity
 * @Description:
 * @Date 2019/9/1
 */
@XStreamAlias("ConfigItem")
public class ConfigItem {
    @XStreamAlias("ConfigName")
    private String configName;
    @XStreamImplicit(itemFieldName = "ConfigParam")
    private List<ConfigParam> configParams;

    public ConfigItem(String configName, List<ConfigParam> configParams) {
        this.configName = configName;
        this.configParams = configParams;
    }

    public String getConfigName() {
        return configName;
    }

    public void setConfigName(String configName) {
        this.configName = configName;
    }

    public List<ConfigParam> getConfigParams() {
        return configParams;
    }

    public void setConfigParams(List<ConfigParam> configParams) {
        this.configParams = configParams;
    }

    @Override
    public String toString() {
        return "ConfigItem{" +
                "configName='" + configName + '\'' +
                ", configParams=" + configParams +
                '}';
    }
}

2.2.3、ConfigParam
package com.fjnx.history.entity;

import com.thoughtworks.xstream.annotations.XStreamAlias;

/**
 * @Author Xu 
 * @ClassName: com.fjnx.history.entity
 * @Description:
 * @Date 2019/9/1
 */
@XStreamAlias("ConfigParam")
public class ConfigParam {
    @XStreamAlias("ParamName")
    private String paramName;
    @XStreamAlias("ParamValue")
    private String paramValue;
    @XStreamAlias("ParamDesc")
    private String paramDesc;

    public ConfigParam(String paramName, String paramValue, String paramDesc) {
        this.paramName = paramName;
        this.paramValue = paramValue;
        this.paramDesc = paramDesc;
    }

    public String getParamName() {
        return paramName;
    }

    public void setParamName(String paramName) {
        this.paramName = paramName;
    }

    public String getParamValue() {
        return paramValue;
    }

    public void setParamValue(String paramValue) {
        this.paramValue = paramValue;
    }

    public String getParamDesc() {
        return paramDesc;
    }

    public void setParamDesc(String paramDesc) {
        this.paramDesc = paramDesc;
    }

    @Override
    public String toString() {
        return "ConfigParam{" +
                "paramName='" + paramName + '\'' +
                ", paramValue='" + paramValue + '\'' +
                ", paramDesc='" + paramDesc + '\'' +
                '}';
    }
}

2.3、测试代码

package com.fjnx.history;

import com.fjnx.history.entity.Config;
import com.fjnx.history.entity.ConfigItem;
import com.fjnx.history.entity.ConfigParam;
import com.thoughtworks.xstream.XStream;
import com.thoughtworks.xstream.io.xml.DomDriver;

import java.io.IOException;
import java.io.InputStream;
import java.util.List;

/**
 * @Author Xu 
 * @ClassName: com.fjnx.history
 * @Description:
 * @Date 2019/8/31
 */
public class ConfigManager {
    private static final String HITORY_PROPERTY="history_property.xml";//配置文件名


    public Config parseConfigProperty() {
        InputStream in = null;
        Config config=null;
        try {
            in = ConfigManager.class.getClassLoader().
                    getResourceAsStream(HITORY_PROPERTY);
            XStream xStream = new XStream(new DomDriver());
            xStream.processAnnotations(Config.class);
//            xStream.ignoreUnknownElements();//忽略未知的元素

            //将xml转换为javabean
            config = (Config) xStream.fromXML(in);
            return config;
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (in != null) {
                try {
                    in.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
        return config;
    }

    static String getParam(String configName,String paramName){
        ConfigManager configManager=new ConfigManager();
        Config config=configManager.parseConfigProperty();
        List<ConfigItem> configItems=config.getConfigItems();
        String paramValue=null;
        for(ConfigItem configItem:configItems){
            if(configItem.equals(configItem.getConfigName())){
                List<ConfigParam> configParams= configItem.getConfigParams();
                for(ConfigParam configParam:configParams){
                    if(paramName.equals(configParam.getParamName())){
                        paramValue=configParam.getParamValue();
                        return paramValue;
                    }
                }
            }
        }
        return paramValue;
    }

    public static void main(String[] args) {
       ConfigManager configManager=new ConfigManager();
       configManager.parseConfigProperty();
    }
}

  • 总结: 通过对比可以看出以注解方式能使xml配置文件更加简洁,我们要能熟练的使用注解配合xstream的一些 拍错方法的调用。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值