Java实体序列化为Xml与xml转化java对象 -JDK Marshaller

Marshaller Api :  http://www.apihome.cn/api/java/Marshaller.html


package org.utils.common;


import lombok.Setter;
import lombok.experimental.Accessors;
import org.apache.commons.lang3.StringUtils;
import org.core.x.exception.ServiceException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;


import javax.xml.bind.*;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.StringReader;
import java.io.StringWriter;


/**
 * Project :       Monster-frameWork
 * Author:         XIE-HONGFEI
 * Company:        hongfei tld.
 * Created Date:   2016/4/1 0001
 * Copyright @ 2016 Company hongfei tld. – Confidential and Proprietary
 * <p/>
 * History:
 * ------------------------------------------------------------------------------
 *      Date       |      Author     |   Change Description
 * 2016/4/1 0001   |      xhf        |   初版做成
 *
 *  描述 :
 *  1.利用Java内置JAXB对JavaBean进行序列化为xml或将xml反序列化为java bean对象
 *  2.涉及实体Bean需有 @XmlRootElement 及 @XmlElement 注解
 *    note :
 *    @XmlElement注解只能应用在set方法中,如转换对象为ORM-Entity实体对象,则建议不再使用lombok进行代码处理;
 */


public class JaxbUtils {


    private static final Logger logger      =       LoggerFactory.getLogger(JaxbUtils.class);


    private  JAXBContext jaxbContext;


    /**
     * 构造所有需要序列化类型的JAXBContent对象
     * @param classes
     */
    public JaxbUtils ( Class<?>... classes )
    {
        try
        {
            jaxbContext      =        JAXBContext.newInstance(classes);
        } catch (JAXBException e)
        {
            throw new ServiceException("Build JAXBContext Error"+e.getMessage(),e.getCause());
        }
    }






    public  String bean2Xml( Object obj )
    {
        try
        {
            //输出到控制台
            //createMarshaller().marshal(obj,System.out);


            //输出到字符流
            StringWriter writer    =      new StringWriter();


            createMarshaller().marshal( obj,writer );


            return writer.toString();


        } catch ( JAXBException e )
        {
            throw new ServiceException("Operate marshal error"+e.getMessage(),e.getCause());
        }
    }




    public  <T> T xml2Bean(String xmlContent)
    {


        StringReader reader        =       new StringReader(xmlContent);


        try
        {
            return (T) createUnmarshaller().unmarshal(reader);
        } catch ( JAXBException e )
        {
            throw new ServiceException("Resole xml content to bean Error"+e.getMessage(),e.getCause());
        }
    }




    /**
     * Create a <tt>Marshaller</tt> object that can be used to convert a
     * java content tree into XML data.
     *
     * @return a <tt>Marshaller</tt> object
     *
     * @throws JAXBException if an error was encountered while creating the
     *                       <tt>Marshaller</tt> object
     */
    public  Marshaller createMarshaller()
    {
        return createMarshaller(null);
    }


    /**
     * Create a <tt>Marshaller</tt> object that can be used to convert a
     * java content tree into XML data.
     *
     * @return a <tt>Marshaller</tt> object
     *
     * @throws JAXBException if an error was encountered while creating the
     *                       <tt>Marshaller</tt> object
     */
    public  Marshaller createMarshaller(String encoding){
        try {
            Marshaller marshaller   =    jaxbContext.createMarshaller();
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
            if(StringUtils.isNotBlank(encoding))
            {
                marshaller.setProperty(Marshaller.JAXB_ENCODING,encoding);
            }
            return marshaller;
        } catch (JAXBException e) {
            throw new ServiceException("Create Marshaller Error , "+e.getMessage(),e.getCause());
        }


    }








    /**
     * Create an <tt>Unmarshaller</tt> object that can be used to convert XML
     * data into a java content tree.
     *
     * @return an <tt>Unmarshaller</tt> object
     *
     * @throws JAXBException if an error was encountered while creating the
     *                       <tt>Unmarshaller</tt> object
     */
    public  Unmarshaller createUnmarshaller()
    {
        try
        {
            return jaxbContext.createUnmarshaller();
        } catch (JAXBException e)
        {
            throw new ServiceException("Create Unmarshaller Error,"+e.getMessage(),e.getCause());
        }
    }




    @Setter
    @Accessors( chain = true )
    @XmlRootElement
    static class Example
    {


        @XmlElement
        private String examId;

       //针对实体属性与xml节点名称不一致的情况,可采用name指定的方式进行映射;
        @XmlElement( name = "example_name" )
        private String examName;


        @Override
        public String toString()
        {
            return "no:"+examId +"\n"+"name:"+examName;
        }
    }


    
    public static void main(String[] args)
    {


        JaxbUtils jaxbUtils       =       new JaxbUtils(Example.class);


        Example example           =       new Example();


        example.setExamId("10086");
        example.setExamName("中国移动示例");


        System.out.println("=========================  bean2Xml 结果开始  =============================");
        System.out.println(jaxbUtils.bean2Xml(example));
        System.out.println("=========================  bean2Xml 结果结束  =============================");


        String xmlContent         =
                "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n" +
                "<example>\n" +
                "    <examId>10010</examId>\n" +
                "    <example_name>中国联通示例</example_name>\n" +
                "</example>";


        Example example2          =        jaxbUtils.xml2Bean(xmlContent);


        System.out.println("=========================  xml2Bean 结果开始  =============================");
        System.out.println(example2.toString());
        System.out.println("=========================  xml2Bean 结果开始  =============================");
    }






}

 
  
  
  
  



输出内容:


=========================  bean2Xml 结果开始  =============================
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<example>
    <examId>10086</examId>
    <example_name>中国移动示例</example_name>
</example>


=========================  bean2Xml 结果结束  =============================
=========================  xml2Bean 结果开始  =============================
no:10010
name:中国联通示例
=========================  xml2Bean 结果开始  =============================







你可能感兴趣的:(java对象,互相转换,xml转化)