精华内容
参与话题
问答
  • JAXB

    2017-04-06 19:00:04
    Java Architecture for XML Binding ( JAXB ) 主要用于Java对象和XML之间的相关转换,开始是作为一个独立项目开发,后来被集成到JDK中(自Java 6)。 JAXB Marshalling:将Java对象转换为XML JAXB Unmarshalling:将...

    Java Architecture for XML Binding ( JAXB ) 主要用于Java对象和XML之间的相关转换,开始是作为一个独立项目开发,后来被集成到JDK中(自Java 6)。

    • JAXB Marshalling:将Java对象转换为XML
    • JAXB Unmarshalling:将XML对象转换为Java Object

    JAXB主要使用注释(annotations)来实现对象转换,比如,如果你需要将Java对象转换为XML,我们需要创建Marshaller对象,如果需要将XML转换为Java对象,则需要创建Unmarshaller对象。

    在JAXB中,你需要先创建JAXBContext对象提供了获取marshaller和unmarshall对象的方法

    一些常用的JAXB注释,官网中有更多JAXB中使用的注释。JAXB Official Site

    • @XmlRootElement
    • @XmlType
    • @XMLTransient
    • @XmlAttibute
    • @XmlElement(name=“abc”)

      这里写图片描述

      XML To Java Object

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
    <requests>
    <request id="123">
    <url>http://www.baidu.com</url>
    <cookie>username=test;logintime=20170202131415789;</cookie>
    <encoding>utf-8</encoding>
    </request>
    </requests>
    </root>

    Java Bean

    import javax.xml.bind.annotation.XmlAttribute;
    import javax.xml.bind.annotation.XmlElement;
    
    public class Request {
        private String url;
        private String cookie;
        private String encoding;
        private int id;
        public int getId() {
            return id;
        }
        @XmlAttribute
        public void setId(int id) {
            this.id = id;
        }
        public String getUrl() {
            return url;
        }
        @XmlElement
        public void setUrl(String url) {
            this.url = url;
        }
        public String getCookie() {
            return cookie;
        }
        @XmlElement
        public void setCookie(String cookie) {
            this.cookie = cookie;
        }
        public String getEncoding() {
            return encoding;
        }
        @XmlElement
        public void setEncoding(String encoding) {
            this.encoding = encoding;
        }
    
        public String toString(){
            return "id = "+id+",url = " + url+",cookie = " +cookie+",encoding = " + encoding;
        }
    }
    
    import java.util.ArrayList;
    
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlElementWrapper;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement(name = "root")
    public class Requests {
        private ArrayList<Request> requests;
    
    
        public void addRequest(Request request){
            if(requests == null){
                requests = new ArrayList<Request>();
            }
            requests.add(request);
        }
    
    
        public ArrayList<Request> getRequests() {
            return requests;
        }
    
        @XmlElementWrapper(name="requests")
        @XmlElement(name="request")
        public void setRequests(ArrayList<Request> requests) {
            this.requests = requests;
        }
    
    }
    

    XML To Bean

    @SuppressWarnings("unchecked")
        public static <T> T xmlToBean(Class<T> bean,File file){
            T s = null;
            try{
                JAXBContext context = JAXBContext.newInstance(bean);
                Unmarshaller unmarshaller = context.createUnmarshaller();
                s = (T)unmarshaller.unmarshal(file);
            }catch(Exception e){
                e.printStackTrace();
            }
            return s;
        }

    Java Object To XML

    import javax.xml.bind.annotation.XmlElement;
    
    public class Result {
        private String response;
        private String url;
        private String status;
    
        public String getResponse() {
            return response;
        }
    
        @XmlElement
        public void setResponse(String response) {
            this.response = response;
        }
    
        public String getUrl() {
            return url;
        }
    
        @XmlElement
        public void setUrl(String url) {
            this.url = url;
        }
    
        public String getStatus() {
            return status;
        }
    
        @XmlElement
        public void setStatus(String status) {
            this.status = status;
        }
    
        public String toString() {
            return "status = " + status + ",url = " + url + ",response = " + response;
        }
    }
    
    
    import java.util.List;
    
    import javax.xml.bind.annotation.XmlElement;
    import javax.xml.bind.annotation.XmlElementWrapper;
    import javax.xml.bind.annotation.XmlRootElement;
    
    @XmlRootElement(name="root")
    public class Results {
        private List<Result> results;
    
        public List<Result> getResults() {
            return results;
        }
        @XmlElementWrapper(name = "results")
        @XmlElement(name="result")
        public void setResults(List<Result> results) {
            this.results = results;
        }
    }
    

    Bean To XML

    public static <T> String beanToXml(T bean){
            String xmlStr = null;
            StringWriter writer = null;
            try{
                JAXBContext context = JAXBContext.newInstance(bean.getClass());
                Marshaller marshaller = context.createMarshaller();
                writer = new StringWriter();
                marshaller.marshal(bean, writer);
                xmlStr = writer.toString();
            }catch(Exception e){
                e.printStackTrace();
            }       
            return xmlStr;
        }
        public static <T> void beanToXml(String fileName,T bean){
            try{
                File file = new File(fileName);
                JAXBContext context = JAXBContext.newInstance(bean.getClass());
                Marshaller marshaller = context.createMarshaller();
                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
                marshaller.marshal(bean,file);
                marshaller.marshal(bean, System.out);
            }catch(Exception e){
                e.printStackTrace();
            }
        }

    result.xml

    这里写图片描述

    这里写链接内容

    展开全文
  • jaxb

    2018-11-22 15:18:27
     摘要: JAXB 作为JDK的一部分,能便捷地将Java对象与XML进行相互转换,本教程从实际案例出发来讲解JAXB 2 的那些事儿。完整版目录  XML 是各种应用程序之间进行数据传输的最常用的语言之一,而JAXB提供了一个...


                 摘要: JAXB 作为JDK的一部分,能便捷地将Java对象与XML进行相互转换,本教程从实际案例出发来讲解JAXB 2 的那些事儿。完整版目录


      XML 是各种应用程序之间进行数据传输的最常用的语言之一,而JAXB提供了一个快速便捷的方式将Java对象与XML进行转换。

     


    JAXB 发展历程

    JAXB 1.0 由Java 社区开发与维护。
    在2006年,发布JAXB 2.0 版本后,成为了J2SE和J2EE平台的一部分。
    2006年,发布的Java SE 6 采用JAXB 2.0。
    2011年,发布的J2SE 7 采用JAXB 2.2.3。
    2014年,发布的J2SE 8 采用JAXB 2.2.8。
    2017年,发布的J2SE 9 采用JAXB 2.3.0,不过该模块被标记为废弃的(deprecated )。
    在Java 11中,JAXB 将会从J2SE中去除,只保留J2EE版本中的JAXB。

     

    JAXB 转换

    一般地,我们将Java对象转换为XML的过程称之为Marshal,将XML转换为Java对象的过程称之为UnMarshal。
    为了能告诉转换器使用什么样的规则进行转换,JAXB提供了如下两种方式:


    Java Annotation 注解
    JAXB 的 xjc 工具定义 schema


    JAXB相关的重要类与接口

     

    JAXBContext 类

    应用的入口,用于管理XML/Java绑定信息。

     

    Marshaller 接口

    将Java对象序列化为XML数据。

     

    Unmarshaller 接口

    将XML数据反序列化为Java对象。

     

    JAXB 与 jackson

    JAXB(Java Architecture for XML Binding)是JSE和JEE平台的一部分,让开发者能够快速完成java类和XML的互相映射。虽然它官方、简洁(不需要引入依赖jar包),确被另外一个产品jackson 的名声盖过了。jackson 对于处理 JSON 有着独特的优势,对XML 的转换也有比较好的支持(虽然是基于JAXB)。

     

     

    展开全文
  • Jaxb

    2015-10-11 23:23:18
    /* * Copyright (c) 2015. Bond(China), java freestyle app */ package com.jfa.commons.util; import javax.xml.bind.*; import java.io.File;...import java.io.FileNotFoundException;...import java.io.FileOut
    /*
     * Copyright (c) 2015. Bond(China), java freestyle app
     */
    
    package com.jfa.commons.util;
    
    import javax.xml.bind.*;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.FileOutputStream;
    import java.lang.reflect.Method;
    
    
    public class JAXBUtils {
    
        /**
         * 通过一个指定的Java类,和一个文件生成一个POJO
         *
         * @param clz    Class
         *               由xjc.bat生成
         * @param xmlDoc 数据文件
         * @return
         * @throws JAXBException
         */
        @SuppressWarnings("unchecked")
        public static <T extends Object> T parseXmlDocument(Class<?> clz, File xmlDoc) throws JAXBException {
    
            JAXBContext jaxbContext = JAXBContext.newInstance(clz);
    
            Unmarshaller shaller = jaxbContext.createUnmarshaller();
    
            return (T) shaller.unmarshal(xmlDoc);
    
        }
    
        /**
         * 生成一个指定XML文档
         *
         * @param t             T
         * @param storeFileName
         * @return
         * @throws JAXBException
         * @throws FileNotFoundException
         */
        public static <T extends Object> Boolean generalXmlDocument(T t, String storeFileName) throws JAXBException {
            try {
    
                String pkg = t.getClass().getPackage().getName();
                JAXBContext context = JAXBContext.newInstance(pkg);
                JAXBElement<?> element = _invoke(t);
                if (element == null) {
                    return false;
                }
                Marshaller marshaller = context.createMarshaller();
                marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
                marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
    
                marshaller.marshal(element, new FileOutputStream(storeFileName));
                return true;
            } catch (Exception e) {
                throw new JAXBException(e);
            }
        }
    
        /*
         * 生成一个工厂对象,并创建JAXBElement对象
         */
        @SuppressWarnings("unchecked")
        private static <T extends Object> JAXBElement<T> _invoke(Object o) throws Exception {
    
            String pkg = o.getClass().getPackage().getName();
            Class<?> clz = Class.forName(pkg + ".ObjectFactory");
    
            Method[] methods = clz.getMethods();
            Object factory = clz.newInstance();
            String destName = "create" + o.getClass().getSimpleName();
            for (Method method : methods) {
                if (method.getName().equals(destName)) {
                    return (JAXBElement<T>) method.invoke(factory, o);
                }
            }
            return null;
        }
    
    }
    
    展开全文

空空如也

1 2 3 4 5 ... 20
收藏数 5,065
精华内容 2,026
关键字:

jaxb