Jaxb 工具类

本文介绍了一个用于Java Bean和XML之间转换的工具类。该工具类提供了将Java对象序列化为XML文件的功能,并能反序列化XML文件为Java对象。同时支持指定编码格式,并通过Schema进行验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

package zj.simpleframework.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;

import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.ValidationEvent;
import javax.xml.bind.ValidationEventHandler;
import javax.xml.bind.ValidationEventLocator;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.xml.sax.SAXException;

/**
* <p>Title: JAXB 工具类</p>
* <p>Description: 此工具类使用JAXB将对象转化成xml 或者 将xml文件转化成Object</p>
* @author zhou_jun
*
*/
public abstract class JAXBUtil {
private static final Log log = LogFactory.getLog(JAXBUtil.class);
private static final String DEFAULT_ENCODING = "UTF-8";

/**
* 将Javabean 对象转化成 xml
* @param jc (JAXBContext)
* @param element (JAXBElement)
* @param xmlPath (String) xml文件路径
* @param encoding 转化的编码 , 默认为UTF-8
*/

public static void objectToXml(JAXBContext jc, JAXBElement<?> element, final String xmlPath, String encoding){
try {
Marshaller m = jc.createMarshaller();
//格式化输出
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
//编码
encoding = encoding == null ? DEFAULT_ENCODING : encoding;
//打印到控制台
m.marshal(element, System.out);
//设置输出的编码格式
m.setProperty("jaxb.encoding", encoding);
OutputStream out = new FileOutputStream(new File(xmlPath));
m.marshal(element, out);
out.flush();
out.close();
} catch (JAXBException e) {
e.printStackTrace();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}

/**
* 重载方法, 具体实现看: objectToXml(JAXBContext jc, JAXBElement<?> element, final String xmlPath, String encoding)
* @param jc (JAXBContext)
* @param element (JAXBElement)
* @param xmlPath (String) xml文件路径
*/
public static void objectToXml(JAXBContext jc, JAXBElement<?> element, final String xmlPath){
objectToXml(jc, element, xmlPath,null);
}

/**
* 将传入的xml文件,转化成Object
* @param u (Unmarshaller)
* @param xmlPath (String) xml文件路径
* @return Object
*/
public static Object xmlToObject(Unmarshaller u, final String xmlPath){
Object obj = null;
try {
JAXBElement<?> je = (JAXBElement<?>)u.unmarshal(new FileInputStream(xmlPath));
obj = je.getValue();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
return obj;
}

/**
* 验证Schema, 返回一个Unmarshaller对象
* @param jc (JAXBContext)
* @param xsdPath (schema文件路径)
* @return (Unmarshaller)
*/
public static Unmarshaller validate(JAXBContext jc, String xsdPath){
Unmarshaller u = null;
try {
u = jc.createUnmarshaller();
SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
Schema schema = sf.newSchema(new File(xsdPath));
u.setSchema(schema);
u.setEventHandler(
new ValidationEventHandler(){
public boolean handleEvent(ValidationEvent ve){
if(ve.getSeverity() == ValidationEvent.ERROR || ve.getSeverity() != ValidationEvent.WARNING){
ValidationEventLocator vel = ve.getLocator();
log.error("Line:Col[" + vel.getLineNumber() + ":" + vel.getColumnNumber() + "]:" + ve.getMessage());
return false;
}
return true;
}
}
);
} catch (SAXException e) {
log.error("Unable to validate due to following error.");
e.printStackTrace();
} catch (JAXBException e) {
e.printStackTrace();
}
return u;
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值