JAXB初步的学习

之前解析xml一直用demo4j,再后来发现XStream也很好用,XStream能方便的解析xml,也能方便的吧xml元素转换为java对象。这一阵因为项目需求需要用JAXB,也就研究一下。
个人觉得JAXB挺方便一点是不需要引用第三方包,JDK1.6以及以后版本自带这些库,直接调用即可。
JAXB 2.0是JDK 1.6的组成部分。JAXB 2.2.3是JDK 1.7的组成部分。
JAXB能够使用Jackson对JAXB注解的支持实现(jackson-module-jaxb-annotations),既方便生成XML,也方便生成JSON,这样一来可以更好的标志可以转换为JSON对象的JAVA类。
核心类:
JAXBContext类,是应用的入口,用于管理XML/Java绑定信息。
Marshaller接口,将Java对象序列化为XML数据。
Unmarshaller接口,将XML数据反序列化为Java对象。
用法也很简单:
粘一个项目中我写的Java对象序列化为XML数据例子:
/**
     * 生成xml文件
     * 
     * @param filePath
     *            要生成的路径
     * @param fileName
     *            要生成的文件名
     * @param obj
     *            bean对象
     */
    public static void toXml(String filePath, String fileName, Object obj) {
        // TODO 自动生成的方法存根
        String path = filePath + fileName;
        File file = new File(path);

        try {
            JAXBContext jaxbContext = JAXBContext.newInstance(obj.getClass());
            Marshaller marshaller = jaxbContext.createMarshaller();

            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            marshaller.marshal(obj, file);
//          marshaller.marshal(obj, System.out);
        } catch (JAXBException e) {
            // TODO 自动生成的 catch 块
            e.printStackTrace();
        }
    }

再贴一个将XML数据反序列化为Java对象例子:

/**
     * 由xml文件生成java对象
     * 
     * @param filePath
     *            文件路径
     * @param fileName
     *            文件名字
     * @param obj
     * @return
     */
    public static Object toBean(String filePath, String fileName, Object obj) {
        // TODO 自动生成的方法存根

        String path = filePath + fileName;
        if (path != null) {

            File file = new File(path);

            try {
                JAXBContext jaxbContext = JAXBContext.newInstance(obj
                        .getClass());
                Unmarshaller umUnmarshaller = jaxbContext.createUnmarshaller();
                String text = FileUtilities.fetchFileContent(file, "UTF-8");
                obj = umUnmarshaller.unmarshal(new StringReader(text));

                return obj;
            } catch (Exception e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
                return null;
            }
        } else {
            return null;
        }
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值