jaxb解析xml工具类
[quote]jaxb jdk 自带的解析xml的一种方式支持,只需要用注解对javabean进行数据绑定[/quote]
package com.nnk.flowrecharge.common;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import com.nnk.flowrecharge.config.SystemConfig;
public class XmlUtil {
private static String DEFAULT_CHARSET = SystemConfig.DEFAULT_CHARSET;
public static String toXml(Object model) throws JAXBException, IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream(1024);
marshal(model, output);
output.flush();
return new String(output.toByteArray(), DEFAULT_CHARSET);
}
public static String toXml(Object model,boolean isFormatOut) throws JAXBException, IOException {
ByteArrayOutputStream output = new ByteArrayOutputStream(1024);
marshal(model, output,isFormatOut);
output.flush();
return new String(output.toByteArray(), DEFAULT_CHARSET);
}
public static void marshal(Object model, OutputStream output) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(model.getClass());
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARSET);
jaxbMarshaller.marshal(model, output);
}
public static void marshal(Object model, OutputStream output,boolean isFormatOut) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(model.getClass());
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, isFormatOut);
jaxbMarshaller.setProperty(Marshaller.JAXB_ENCODING, DEFAULT_CHARSET);
jaxbMarshaller.marshal(model, output);
}
public static <T> T parseXml(Class<T> clazz, String xml) throws JAXBException, IOException {
byte[] buf = xml.getBytes(DEFAULT_CHARSET);
ByteArrayInputStream input = new ByteArrayInputStream(buf, 0, buf.length);
return unmarshal(clazz, input);
}
@SuppressWarnings("unchecked")
public static <T> T unmarshal(Class<T> clazz, InputStream input) throws JAXBException {
JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
return (T) jaxbUnmarshaller.unmarshal(input);
}
public static void saveXmlToFile(Object model, String filename) throws FileNotFoundException, JAXBException {
FileOutputStream fos = new FileOutputStream(filename);
marshal(model, fos);
}
public static void saveXmlToFile(Object model, File file) throws FileNotFoundException, JAXBException {
FileOutputStream fos = new FileOutputStream(file);
marshal(model, fos);
}
public static <T> T loadXmlFromFile(Class<T> clazz, String filename) throws FileNotFoundException, JAXBException {
return unmarshal(clazz, new FileInputStream(filename));
}
public static <T> T loadXmlFromFile(Class<T> clazz, File file) throws FileNotFoundException, JAXBException {
return unmarshal(clazz, new FileInputStream(file));
}
public static <T> T loadXmlFromFile(Class<T> clazz, InputStream is) throws JAXBException {
return unmarshal(clazz, is);
}
}
[quote]
动态生成xml 的javabean
[/quote]
package com.nnk.flowrecharge.config;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
@XmlAccessorType(XmlAccessType.NONE)
public class CodeConfig {
@XmlAttribute
private String key = "";
@XmlAttribute
private String text = "";
@XmlAttribute
private String value = "";
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getText() {
return text;
}
public void setText(String text) {
this.text = text;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
}
[quote]
package com.nnk.flowrecharge.config;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.xml.bind.JAXBException;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;
import com.nnk.msgsrv.client.common.XmlUtil;
@XmlRootElement(name = "root")
@XmlAccessorType(XmlAccessType.NONE)
public class InterfaceConfig {
@XmlElement(name = "recharge")
private Recharge recharge = new Recharge();
@XmlElement(name = "query")
private Query query = new Query();
@XmlElement(name = "global")
private Global global = new Global();
public static Map<String, CodeConfig> getRechargecodes() {
return rechargecodes;
}
public Global getGlobal() {
return global;
}
public static Map<String, Prama> getPramas() {
return Pramas;
}
public static void setPramas(Map<String, Prama> Pramas) {
InterfaceConfig.Pramas = Pramas;
}
private static InterfaceConfig instance = null;
private static Map<String, CodeConfig> rechargecodes = new HashMap<String, CodeConfig>();
private static Map<String, CodeConfig> queryCodes = new HashMap<String, CodeConfig>();
private static Map<String, Prama> Pramas = new HashMap<String, Prama>();
public Recharge getRecharge() {
return recharge;
}
public Query getQuery() {
return query;
}
public static Map<String, CodeConfig> getQueryCodes() {
return queryCodes;
}
public static synchronized InterfaceConfig getInstance() {
if (instance == null) {
try {
instance = XmlUtil.loadXmlFromFile(InterfaceConfig.class, "config/interface.xml");
rechargecodes.clear();
List<CodeConfig> _codes = instance.getRecharge().getCodes();
for (CodeConfig cc : _codes) {
rechargecodes.put(cc.getKey(), cc);
}
queryCodes.clear();
_codes = instance.getQuery().getCodes();
for (CodeConfig cc : _codes) {
queryCodes.put(cc.getKey(), cc);
}
Pramas.clear();
List<Prama> _pramas = instance.getGlobal().getPramas();
for (Prama cc : _pramas) {
Pramas.put(cc.getKey(), cc);
}
} catch (FileNotFoundException e) {
throw new RuntimeException(e);
} catch (JAXBException e) {
throw new RuntimeException(e);
}
}
return instance;
}
}
@XmlAccessorType(XmlAccessType.NONE)
class Recharge {
@XmlElement(name = "code")
@XmlElementWrapper(name = "codes")
private List<CodeConfig> codes = new ArrayList<CodeConfig>();
public List<CodeConfig> getCodes() {
return codes;
}
public void setCodes(List<CodeConfig> codes) {
this.codes = codes;
}
}
@XmlAccessorType(XmlAccessType.NONE)
class Query
{
@XmlElement(name = "code")
@XmlElementWrapper(name = "codes")
private List<CodeConfig> codes = new ArrayList<CodeConfig>();
public List<CodeConfig> getCodes() {
return codes;
}
public void setCodes(List<CodeConfig> codes) {
this.codes = codes;
}
}
@XmlAccessorType(XmlAccessType.NONE)
class Global{
@XmlElement(name = "prama")
@XmlElementWrapper(name = "pramas")
private List<Prama> Pramas = new ArrayList<Prama>();
public List<Prama> getPramas() {
return Pramas;
}
public void setPramas(List<Prama> Pramas) {
this.Pramas = Pramas;
}
}[/quote]
[quote]
@XmlAttribute 表示属性节点绑定 @XmlRootElement 根节点 @XmlAccessorType xml接触类型,XmlAccessType.NONE表示没有注解标注的不进行动态绑定 XmlAccessType.Filed 表示javabean属性字段都进行绑定,无需再加注解
@XmlElement表示节点绑定
[/quote]
jaxb解析xml工具类的更多相关文章
- android 解析XML 工具类
/** * Created by John on 2016/3/29. */ public class XmlParser { private static final String ns = nul ...
- XML工具类 - XmlUtils.java
XML工具类,提供序列化XML.反序列化XML.获取指定节点的值的方法. 源码如下:(点击下载 - XmlUtils.java.dom4j-1.6.1.jar.xstream-1.4.7.jar ) ...
- JaxbUtil转json转XML工具类
json转换为XML工具类 package com.cxf.value; import org.springframework.util.StringUtils; import javax.xml.b ...
- java 解析excel工具类
java 解析excel工具类 CreateTime--2018年3月5日16:48:08 Author:Marydon ReadExcelUtils.java import java.io.Fi ...
- Excel解析easyexcel工具类
Excel解析easyexcel工具类 easyexcel解决POI解析Excel出现OOM <!-- https://mvnrepository.com/artifact/com.alibab ...
- Java常用工具类---XML工具类、数据验证工具类
package com.jarvis.base.util; import java.io.File;import java.io.FileWriter;import java.io.IOExcepti ...
- DOM4j XML 工具类
之前项目有跟客户系统对接一个webservice系统,该接口有传参和返回都是xml,所以找时间百度研究了一下dom4j,dom4j是一个Java的XML API,是jdom的升级品,用来读写XML文件 ...
- flink---实时项目--day02-----1. 解析参数工具类 2. Flink工具类封装 3. 日志采集架构图 4. 测流输出 5. 将kafka中数据写入HDFS 6 KafkaProducer的使用 7 练习
1. 解析参数工具类(ParameterTool) 该类提供了从不同数据源读取和解析程序参数的简单实用方法,其解析args时,只能支持单只参数. 用来解析main方法传入参数的工具类 public c ...
- JAXB解析XML为对象
JAXB支持注解将XML转化为对象,具体看一个简单的例子: <?xml version="1.0" encoding="utf-8"?> <A ...
随机推荐
- 数据中心网络架构的问题与演进 — SDN
目录 文章目录 目录 前文列表 OpenFlow 源起 从 OpenFlow 衍生 SDN 前文列表 <数据中心网络架构的问题与演进 - 传统路由交换技术与三层网络架构> <数据中心 ...
- 基于axis的WebService的案例
1.axis axis是Apache旗下产品,它是一个webservice容器,可被用于创建.部署和运行webservice.网址http://axis.apache.org/,网址上的部分截图如下. ...
- Xcode中Info.plist文件里的"Bundle versions string, short" 跟 "Bundle version" 的区别
Bundle versions string, short:用于itunes上显示的版本号,即对外的版本.(最多是3个部分组成即 x.y.z) Bundle version:内部项目管理的版本号,不对 ...
- HBase 数据恢复
参考链接: https://community.hortonworks.com/content/supportkb/48748/hbase-master-wont-start-with-followi ...
- sh脚本实战
做了什么东西还是要尽快移动到博客上,不然回头看自己写的东西已经看不懂了... 凭着回忆+搜资料,把当初写sh脚本的过程写上来. 首先新建一个.sh文件,用vim就可以 在sh的第一行,写上 #!/bi ...
- Cisco 三层交换机划分VLan与普通路由器连接配置
根据一些中小企业的一些业务需求,设计一套方案: 计划目标:针对不同部门划分不同的VLAN,前期满足能够同时上网的需求,后期需要能够隔离不同部门的资源访问(本次配置操作不涉及). 因之前未接触CISCO ...
- 华为HCNA乱学Round 12:NAT和easy IP
- python selenium API 常用方法
配置使用环境 下载相应的浏览器驱动, Firefox 是默认的 本文以 chrome 为主 ,放在scripts目录下ChromeDriver 官方下载地址 : 所有版本的 ChromeDriver ...
- 【Python开发】PyQt5应用与实践
一个典型的GUI应用程序可以抽象为:主界面(菜单栏.工具栏.状态栏.内容区域),二级界面(模态.非模态),信息提示(Tooltip),程序图标等组成.本篇根据作者使用PyQt5编写的一个工具,介绍如何 ...
- Centos7 安装多版本php 并添加swoole拓展
服务器默认安装了php7 直接使用lnmp工具包安装php5.6 使用之前的lnmp安装包,切换到root sudo su - 运行 选择5.6 安装完成 没有安装swoole拓展 由官方https: ...