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;
}
}
分享到:
- 2008-12-09 16:49
- 浏览 1819
- 评论(2)
- 论坛回复 / 浏览 (2 / 4293)
- 查看更多
相关推荐
java对象转换xml&xml;解析成java对象,主要是针对最近写的博文 jaxb工具使用的工具类
JAXB工具类 xml转为java对象 java对象转为xml ,本人亲测,可以使用!!!
自用JAXB工具类,java内置,比XSteam快一倍多,内容比较齐全,下载即用,傻瓜式导入
针对 xml 定义 生成实体类工具 无密码 解压后使用
JAXB工具类,xml和java对象相互转换的工具类,支持List直接转xml
这是一款用java编写的xml解析工具,可以自动的将xml和java进行相互转换,整个过程只需要1-2行代码,简单易懂
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。JAXB与xml相互转换实例。
JAXB(Java Architecture for XML Binding) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例...
jaxb XMl和BEAN互转实例(内含jar包),将jaxb封装成一个Util工具类,只需要通过对BEAN进行简单的注解就可以直接实现xml和bean之间的互转
NULL 博文链接:https://cxl2012.iteye.com/blog/1941792
NULL 博文链接:https://ladybird2010.iteye.com/blog/675217
xml转java对象,java对象转xml对象工具类
使用JAXB进行xml和bean互转,其中为一个简单的demo,包含转换工具类和一个简单的bean的定义,如果有多级节点需要定义多个bean,将子节点作为一个属性放置到主节点类中
NULL 博文链接:https://endeavor416.iteye.com/blog/270507
关于Jaxb2-Maven-Plugin 这个Maven插件使用Java API for XML Binding(JAXB)2+版来执行以下2个主要任务之一: 从XML模式(以及可选的绑定文件)生成Java类。 这是通过将工作委派给Java SDK附带的XJC工具来完成的...
最近做项目数据传输这块最后采用了xml报文的形式来进行传输,所以特地写了一个工具类分享出来,支持xml报文和java对象间的相互转换。采用的是JAXB的形式,可快速解析。具体步骤已经单独写了一个文档放进去了。
JavaXml及Bean互转,内有xstream集成bean、xml互转工具类,JAXB注解实现bean、xml互转工具类
weixin-popular 包括微信公众平台基础API与支付API,提供...PayUtil 支付工具类,生成JS支付,原生支付 SignatureUtil 签权生成、验证 XMLConverUtil XML 对象转换(JAXB) JsUtil JsAPI config,chooseWXPay JSON生成
或作为通用XML工具箱。 具体来说: 尽管XML序列化在理想情况下应该类似于JAXB输出,但偏差不一定被视为错误-我们会尽力而为 应该保证的是,使用此模块编写的任何XML也必须使用该模块可读:也就是说,我们的目标是...
用于OpenStreetMap的JAXB 这些工具用于从封送和(大部分)封送map.osm文件。 据我所知,没有XSD定义可下载XML文件的结构。 因此,兼容JAXB的类不是通过XJC创建的,而是手动创建的。