package com.apusic.esb.util.jaxb;
import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.InputStream;
import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import com.apusic.esb.util.UtilPlugin;
/**
* JAXB工具,通过使用注解,实现java对象与XML文件的相互转换
* @author TigerlChen
*/
public class JaxbUtil {
private static ConcurrentHashMap<Class<?>, JAXBContext> jaxbContextMap = new ConcurrentHashMap<Class<?>,JAXBContext>();
/**
* 将JAXB实现对象转换成XML格式的字符串
* @param <T> 这里的类是具体类,不能是接口
* @param tclz 转换对象实例
* @return
*/
public static <T> String marshToXmlBinding(Class<T> tclz,T t) throws JAXBException {
JAXBContext jc = null;
if(jaxbContextMap.get(tclz)==null) {
Map<String, String> properties = new HashMap<String, String>();
jc = JAXBContext.newInstance(new Class<?>[]{tclz},properties);
jaxbContextMap.put(tclz, jc);
}else{
jc = jaxbContextMap.get(tclz);
}
Marshaller u = jc.createMarshaller();
// XML内容格式化
u.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
StringWriter sw = new StringWriter ();
u.marshal(t, sw);
return sw.toString();
}
/**
* 将XML格式的字符串转换成JAXB实现对象
* @param <T> 这里的类是具体类,不能是接口
* @param tclz
* @param file 当目录存在文件不存在时,自动创建;当目录不存在时,将抛异常
* @return
*/
public static <T> void marshToXmlBinding(Class<T> tclz, T t, File file) throws JAXBException {
if (tclz == null || file == null) {
return ;
}
JAXBContext jc = null;
if (jaxbContextMap.get(tclz) == null) {
Map<String, String> properties = new HashMap<String, String>();
jc = JAXBContext.newInstance(new Class<?>[] {tclz}, properties);
jaxbContextMap.put(tclz, jc);
} else {
jc = jaxbContextMap.get(tclz);
}
Marshaller u = jc.createMarshaller();
u.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
u.marshal(t, file);
}
public static <T> void marshToXmlBinding(Class<T> tclz, T t, IFile file) throws JAXBException {
String str = marshToXmlBinding(tclz, t);
ByteArrayInputStream stream = null;
try {
stream = new ByteArrayInputStream(str.getBytes("UTF8"));
if (!file.exists()) {
file.create(stream, true, new NullProgressMonitor());
} else {
file.setContents(stream, true, false, new NullProgressMonitor());
}
} catch (CoreException e) {
UtilPlugin.log(e);
} catch (UnsupportedEncodingException e) {
UtilPlugin.log(e);
}
}
/**
* 将XML格式的字符串转换成JAXB实现对象
* @param <T> 这里的类是具体类,不能是接口
* @param tclz
* @param xmlstr
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T unmarshToObjBinding(Class<T> tclz,String xmlstr) {
try {
JAXBContext jc = null;
if(jaxbContextMap.get(tclz)==null) {
Map<String, String> properties = new HashMap<String, String>();
jc = JAXBContext.newInstance(new Class<?>[]{tclz},properties);
jaxbContextMap.put(tclz, jc);
}else{
jc = jaxbContextMap.get(tclz);
}
Unmarshaller un = jc.createUnmarshaller();
return (T) un.unmarshal(new ByteArrayInputStream(xmlstr.getBytes("utf-8")));
} catch (JAXBException e) {
UtilPlugin.log(e);
} catch (UnsupportedEncodingException e) {
UtilPlugin.log(e);
}
return null;
}
/**
* 将XML格式的文件转换成JAXB实现对象
* @param <T>
* @param tclz
* @param file
* @return
*/
@SuppressWarnings("unchecked")
public static <T> T unmarshToObjBinding(Class<T> tclz,File file) {
if (tclz == null || file == null || !file.exists()) {
return null;
}
try {
JAXBContext jc = null;
if(jaxbContextMap.get(tclz)==null) {
Map<String, String> properties = new HashMap<String, String>();
jc = JAXBContext.newInstance(new Class<?>[]{tclz},properties);
jaxbContextMap.put(tclz, jc);
}else{
jc = jaxbContextMap.get(tclz);
}
Unmarshaller un = jc.createUnmarshaller();
return (T) un.unmarshal(file);
} catch (JAXBException e) {
UtilPlugin.log(e);
}
return null;
}
@SuppressWarnings("unchecked")
public static <T> T unmarshToObjBinding(Class<T> tclz,InputStream inputStream) {
if (tclz == null || inputStream == null) {
return null;
}
try {
JAXBContext jc = null;
if(jaxbContextMap.get(tclz)==null) {
Map<String, String> properties = new HashMap<String, String>();
jc = JAXBContext.newInstance(new Class<?>[]{tclz},properties);
jaxbContextMap.put(tclz, jc);
}else{
jc = jaxbContextMap.get(tclz);
}
Unmarshaller un = jc.createUnmarshaller();
return (T) un.unmarshal(inputStream);
} catch (JAXBException e) {
UtilPlugin.log(e);
}
return null;
}
public static <T> T unmarshToObjBinding(Class<T> tclz, IFile file) {
return unmarshToObjBinding(tclz, file.getLocation().toFile());
}
}
分享到:
相关推荐
java对象转换xml&xml;解析成java对象,主要是针对最近写的博文 jaxb工具使用的工具类
自用JAXB工具类,java内置,比XSteam快一倍多,内容比较齐全,下载即用,傻瓜式导入
JAXB是Java开发中处理XML的强大工具,通过注解和API实现了XML与Java对象的自动转换。了解并熟练掌握JAXB,能够提升XML数据处理的效率和代码的可读性。在实际项目中,结合JAXB与XML Schema,可以构建更健壮、易于维护...
首先,定义了一个名为`Product`的Java类,该类使用JAXB注解来指定XML映射规则。`@XmlRootElement`注解定义了XML根元素的名称和命名空间,`@XmlAccessorType`定义了访问类型,`@XmlType`注解提供了类级别的元数据,而...
当我们需要处理XML文件,比如从XML中提取数据时,JAXB(Java Architecture for XML Binding)是一个强大的工具。本教程将详细解释如何在Idea中利用JAXB来读取XML文件中的数据。 JAXB是Java标准API,它提供了将Java...
- **生成Java类**:JAXB提供了一个工具`xjc`,可以将XML Schema文档转换为对应的Java类。 - **对象到XML**:使用`Marshaller`类将Java对象转换为XML文档。 - **XML到对象**:使用`Unmarshaller`类将XML文档反序列...
- **编译XSD到Java类**:使用JAXB的`xjc`工具,可以将XSD文件转换为Java源代码。`xjc`命令行工具通常包含在JDK中,也可以通过Maven或Gradle插件集成到构建流程中。 - **绑定配置**:通过在XSD文件中添加特殊的JAXB...
11. **XML处理工具类**:如DOM、SAX、StAX或JAXB,用于XML的解析和生成。 12. **日志记录工具类**:如Log4j、SLF4J、Java Util Logging等,提供灵活的日志记录方案。 这些工具类大大提升了代码的可读性和可维护性...
Java是一种广泛使用的编程语言,其丰富的库和工具类极大地提升了开发效率。在Java中,工具类通常是封装了常见操作的静态方法集合,便于开发者在不同项目中复用。本资源包含了一系列全面的Java工具类,涵盖了多个核心...
JAXB工具类,xml和java对象相互转换的工具类,支持List直接转xml
总结一下,JAXB的Eclipse插件是Java开发者处理XML数据的强大工具,它集成了XML Schema与Java类的相互转换、源代码编辑支持以及调试等功能。通过利用这些插件,开发者可以更加高效地进行XML相关的开发工作,实现Java...
标题“用jaxb自动生成xsd对像”指的是利用JAXB的XJC(XSD到Java绑定编译器)工具,从XML Schema文件生成对应的Java类。这使得你可以直接操作Java对象,而无需直接处理XML的细节。 描述中的“简单易用”意味着通过...
2. **jaxb-xjc.jar**:XJC(XML Java Compiler)是JAXB的代码生成工具,可以将XML Schema(XSD)转换为对应的Java类。当你有XML Schema定义时,使用xjc工具可以自动生成符合该Schema的Java类,使得处理XML数据更为...
在Java开发中,JAXB工具是处理XML文档的强大助手。它的工作原理主要分为两个部分:XML到Java对象的绑定(Unmarshalling)和Java对象到XML的绑定(Marshalling)。当给定一个XML Schema文件(XSD),JAXB可以自动生成...
1. **jaxb-api.jar**: 这个库包含了JAXB API,即Java接口和抽象类,定义了JAXB的工作方式。它提供了必要的接口和类,如`javax.xml.bind.JAXBContext`, `Unmarshaller`, `Unmarshaller`, 和 `Validator`等,用于实现...
### 三、封装JAXB工具类 为了方便使用JAXB,可以封装一个工具类,如`JaxbXmlUtil`,该类提供了以下功能: 1. 创建`JAXBContext`:根据指定的Java类生成`JAXBContext`。 2. 序列化:将Java对象转换为XML字符串。 3....
总的来说,`jaxb-api-2.1.jar` 和 `jaxb-impl-2.1.8.jar` 在Java开发中扮演着重要的角色,它们为XML数据处理提供了强大的工具,使得XML与Java对象之间的转换变得简单易行。然而,随着技术的发展,开发者也应关注新的...
JavaUtils工具类是Java开发中常见的一类辅助代码集合,它们通常包含各种静态方法,用于简化常见的编程任务,提高开发效率。这篇博文链接(已提供但无法直接访问)可能详细探讨了JavaUtils工具类的设计原则、常用方法...
JAXB (Java Architecture for XML Binding) 是 Java 中用于对象到XML以及XML到对象转换的API。它使得开发者能够轻松地将Java对象模型映射到...在实际开发中,JAXB是一个强大的工具,尤其在处理数据交换和序列化场景中。