现在的位置: 首页 > 综合 > 正文

文章标题

2018年05月24日 ⁄ 综合 ⁄ 共 6994字 ⁄ 字号 评论关闭

package com.test.jaxbTest.Test;

import java.util.List;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementWrapper;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name = “hotel”)
public class Hotel {
@XmlElementWrapper(name = “RoomTypeVOs”)
@XmlElement(name = “RoomTypeVO”)
public List getRoomTypeVOs() {
return RoomTypeVOs;
}

public void setRoomTypeVOs(List<RoomTypeVO> roomTypeVOs) {
    RoomTypeVOs = roomTypeVOs;
}

private List<RoomTypeVO> RoomTypeVOs;

@XmlElement(name = "id")
//@XmlAttribute(name = "id")
public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

@XmlElement(name = "name")
public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

private int id;
private String name;

}

package com.test.jaxbTest.Test;

import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;

public class RoomTypeVO {

// /@XmlElement(name = "typeid")
@XmlAttribute(name = "typeid")
public int getTypeid() {
    return typeid;
}

public void setTypeid(int typeid) {
    this.typeid = typeid;
}

@XmlElement(name = "typename")
public String getTypename() {
    return typename;
}

public void setTypename(String typename) {
    this.typename = typename;
}

@XmlElement(name = "price")
public String getPrice() {
    return price;
}

public void setPrice(String price) {
    this.price = price;
}

private int typeid;
private String typename;
private String price;

}

package com.test.jaxbTest.Test;

import java.io.StringReader;
import java.io.StringWriter;
import java.util.Collection;

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.annotation.XmlAnyElement;
import javax.xml.namespace.QName;

import org.apache.commons.lang.StringUtils;

/**
* 使用Jaxb2.0实现XML<->Java Object的Binder.
*
* 特别支持Root对象是List的情形.
*
* @author
*/
public class JaxbUtil {
// 多线程安全的Context.
private JAXBContext jaxbContext;

/**
 * @param types
 *            所有需要序列化的Root对象的类型.
 */
public JaxbUtil(Class<?>... types) {
    try {
        jaxbContext = JAXBContext.newInstance(types);
    } catch (JAXBException e) {
        throw new RuntimeException(e);
    }
}

/**
 * Java Object->Xml.
 */
public String toXml(Object root, String encoding) {
    try {
        StringWriter writer = new StringWriter();
        createMarshaller(encoding).marshal(root, writer);
        return writer.toString();
    } catch (JAXBException e) {
        throw new RuntimeException(e);
    }
}

/**
 * Java Object->Xml, 特别支持对Root Element是Collection的情形.
 */
@SuppressWarnings("unchecked")
public String toXml(Collection root, String rootName, String encoding) {
    try {
        CollectionWrapper wrapper = new CollectionWrapper();
        wrapper.collection = root;

        JAXBElement<CollectionWrapper> wrapperElement = new JAXBElement<CollectionWrapper>(new QName(rootName), CollectionWrapper.class, wrapper);

        StringWriter writer = new StringWriter();
        createMarshaller(encoding).marshal(wrapperElement, writer);

        return writer.toString();
    } catch (JAXBException e) {
        throw new RuntimeException(e);
    }
}


/**
 * Java Object->Xml File, 特别支持对Root Element是Collection的情形.
 */
@SuppressWarnings("unchecked")
public void toXmlFile(Collection collect, String rootName, String encoding, java.io.File filePath) {
    try {
        CollectionWrapper wrapper = new CollectionWrapper();
        wrapper.collection = collect;
        JAXBElement<CollectionWrapper> wrapperElement = new JAXBElement<CollectionWrapper>(new QName(rootName), CollectionWrapper.class, wrapper);

// StringWriter writer = new StringWriter();
createMarshaller(encoding).marshal(wrapperElement, filePath);

    } catch (JAXBException e) {
        throw new RuntimeException(e);
    }
}


/**
 * Xml->Java Object.
 */
@SuppressWarnings("unchecked")
public <T> T fromXml(String xml) {
    try {
        StringReader reader = new StringReader(xml);
        return (T) createUnmarshaller().unmarshal(reader);
    } catch (JAXBException e) {
        throw new RuntimeException(e);
    }
}

/**
 * Xml->Java Object, 支持大小写敏感或不敏感.
 */
@SuppressWarnings("unchecked")
public <T> T fromXml(String xml, boolean caseSensitive) {
    try {
        String fromXml = xml;
        if (!caseSensitive)
            fromXml = xml.toLowerCase();
        StringReader reader = new StringReader(fromXml);
        return (T) createUnmarshaller().unmarshal(reader);
    } catch (JAXBException e) {
        throw new RuntimeException(e);
    }
}

/**
 * 创建Marshaller, 设定encoding(可为Null).
 */
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 RuntimeException(e);
    }
}

/**
 * 创建UnMarshaller.
 */
public Unmarshaller createUnmarshaller() {
    try {
        return jaxbContext.createUnmarshaller();
    } catch (JAXBException e) {
        throw new RuntimeException(e);
    }
}

/**
 * 封装Root Element 是 Collection的情况.
 */
public static class CollectionWrapper {
    @SuppressWarnings("unchecked")
    @XmlAnyElement
    protected Collection collection;
}

}

package com.test.jaxbTest.Test;

import java.io.File;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.TreeSet;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;

import com.test.jaxbTest.Test.JaxbUtil.CollectionWrapper;

public class Test {

/**
 * @param args
 */
public static void main(String[] args) {

    List hotelList = new ArrayList();

    Hotel hotel=new Hotel();
    hotel.setId(1);
    hotel.setName("name1");

    RoomTypeVO t1=new RoomTypeVO();
    t1.setPrice("20");
    t1.setTypeid(1);
    t1.setTypename("typename1");

    RoomTypeVO t2=new RoomTypeVO();
    t2.setPrice("30");
    t2.setTypeid(2);
    t2.setTypename("typename2");


    List<RoomTypeVO> RoomTypeVOs=new ArrayList<RoomTypeVO>();
    RoomTypeVOs.add(t1);
    RoomTypeVOs.add(t2);
    hotel.setRoomTypeVOs(RoomTypeVOs);

    //Transfer javaBean to XML string
    JaxbUtil requestBinder = new JaxbUtil(Hotel.class, CollectionWrapper.class);
    String retXml = requestBinder.toXml(hotel, "utf-8");
    System.out.println("xml:"+retXml);


    // Generate the XML and save it to XML file 
    File file = new File("C:\\Users\\Public\\testJAXB\\hotel.xml");
    JAXBContext jaxbContext = null;
    try {
        jaxbContext = JAXBContext.newInstance(Hotel.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        // output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        jaxbMarshaller.marshal(hotel, file);
        jaxbMarshaller.marshal(hotel, System.out);
    } catch (JAXBException e) {
        e.printStackTrace();
    }


    //Tranfer the XML file to JAVABean 
    hotelList.add(hotel);
    hotel.setId(2);
    hotelList.add(hotel);
    hotel.setId(3);
    hotelList.add(hotel);
    hotel.setId(4);
    hotelList.add(hotel);
    file = new File("C:\\Users\\Public\\testJAXB\\hotelList.xml");
    requestBinder = new JaxbUtil(Hotel.class, CollectionWrapper.class);
    requestBinder.toXmlFile(hotelList, "Root", "utf-8", file);

    // Transfer the XML String to java bean
    JaxbUtil resultBinder = new JaxbUtil(Hotel.class, CollectionWrapper.class);
    Hotel hotelObj = resultBinder.fromXml(retXml);


    System.out.println("hotelid:"+hotelObj.getId());
    System.out.println("hotelname:"+hotelObj.getName());
    for(RoomTypeVO roomTypeVO:hotelObj.getRoomTypeVOs())
    {
        System.out.println("Typeid:"+roomTypeVO.getTypeid());
        System.out.println("Typename:"+roomTypeVO.getTypename());
    }


    StringBuffer  buff ;
    StringBuilder  bulder ;
    String test;
    HashSet s;
    TreeSet sss;

}

}

抱歉!评论已关闭.