您的位置:首页 > 编程语言 > Java开发

java 用 jackson 进行 xml bean 互转

2015-08-27 14:57 671 查看

xml和bean互转

maven 依赖包

<properties>
<json-version>2.4.2</json-version>
</properties>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>${json-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-annotations</artifactId>
<version>${json-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${json-version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
<version>${json-version}</version>
</dependency>


jackson xmlMapper 对象

package com.tqmall.utils;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

/**
*
* @author yibo.liu
*/
public class JacksonMapper {
/**
* can reuse, share globally
*/
private static final ObjectMapper object = new ObjectMapper();

/**
* can reuse, share globally
*/
private static final XmlMapper xml = new XmlMapper();

/**
* private constructor
*/
private JacksonMapper() {
}

/**
* return a ObjectMapper that is singleton
* @return
*/
public static ObjectMapper getObjectMapper() {
return object;
}

/**
* return a XmlMapper that is singleton
* @return
*/
public static XmlMapper getXmlMapper() {
return xml;
}
}


转换工具类

package com.tqmall.elasticsearch.nindex.writer.slaveproxy;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.dataformat.xml.XmlMapper;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;

/**
* 通用方法,用于转换xml到bean,或者bean 到xml
* @author yibo.liu
*/
public class JacksonUtils {

public static void main(String[] args) throws IOException {
new SlaveIndexXmlParser().parse();
}

/**
* XML To Object
*
* @param xmlPath
* @param cls
* @param <T>
* @return
* @throws IOException
*/
public static <T> T xmlToBean(String xmlPath, Class<T> cls) throws IOException {
XmlMapper xml = JacksonMapper.getXmlMapper();
T obj = xml.readValue(new File(xmlPath), cls);
return obj;
}

/**
* @param xmlFile
* @param cls
* @param <T>
* @return
* @throws IOException
*/
public static <T> T xmlToBean(File xmlFile, Class<T> cls) throws IOException {
XmlMapper xml = JacksonMapper.getXmlMapper();
T obj = xml.readValue(xmlFile, cls);
return obj;
}

/**
* @param xmlInputStream
* @param cls
* @param <T>
* @return
* @throws IOException
*/
public static <T> T xmlToBean(InputStream xmlInputStream, Class<T> cls) throws IOException {
XmlMapper xml = JacksonMapper.getXmlMapper();
T obj = xml.readValue(xmlInputStream, cls);
return obj;
}

public static <T> String beanToXml(T bean) throws JsonProcessingException {
XmlMapper xml = JacksonMapper.getXmlMapper();
String string = xml.writeValueAsString(bean);
return string;
}
}


xml文档结构定义:

这一部分不是重点。只是简单描述。

1. 扩展为 .xsd 的文件为 XML Schemas Definition ,所以我们需要先定义这个文件。(在项目中可以直接套用spring maven 等包的定义,改成自己的)

2. xmlns:xs=”http://www.w3.org/2001/XMLSchema” 中 xmlns 是 xml namespace ,即命名空间, :xs 是别名定义,如果有引用多个,用于区分不同的命名空间,避免命令冲突。而引号里面的,就是xml定义文档了。这个是网际网路联盟(World Wide Web Consortium,简称W3C)的定义,也就是定义 xsd 文档 的定义。

3. targetNamespace=”http://www.tqmall.com/search/slave/0.0.1” xmlns=”http://www.tqmall.com/search/slave/0.0.1” 这两个中,targetNamespace是定义这个文档的命名空间,也就是你定义的这个文档,而后面那个就是直接引用了自己,干什么用的,不清楚。

4. 然后,在使用上面定义的xsd的xml里面

- xmlns=”http://www.tqmall.com/search/slave/0.0.1”

- xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance”

- xsi:schemaLocation=”http://www.tqmall.com/search/slave/0.0.1

- http://www.tqmall.com/search/slave/slave-0.0.1.xsd

- xsi:schemaLocation 是用来导入需要用到的 xsd 定义文件,必需。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: