JAXB(二)Map属性映射
来源:互联网 发布:淘宝自检工具 编辑:程序博客网 时间:2024/06/10 23:47
//JAXB support Collection(List,Set),does not support Map(not Collection).
//XmlAdapter<ValueType,BoundType> : !use List to implement Map's feature,like (List students)!!!
//<ValueType> : to be persisted format, The type that JAXB knows how to handle out of the box
//<BoundType> : memory format, The type that JAXB doesn't know how to handle
public class MapAdapter extends XmlAdapter<MapAdapter.AdaptedMap, Map<String, String>>
/** * @author timeriver.wang * @date 2013-01-09 8:07:01 PM */@XmlRootElement@XmlAccessorType(XmlAccessType.PROPERTY)public class Student {private String id;private String name;public String getId() {return id;}@XmlElement(name = "id")public void setId(String id) {this.id = id;}@XmlElement(name = "name")public String getName() {return name;}public void setName(String name) {this.name = name;}}
/** * @author timeriver.wang * @date 2013-01-09 8:08:15 PM */public class Test { private static String filePath = "D:/teacher.xml"; public static void main( String[] args )throws Exception { toXml(); toObj(); } private static void toXml()throws Exception { Teacher teacher = initTeacher(); // JAXBContext jaxbContext = JAXBContext.newInstance( Teacher.class ); // marshal 整理,编列,元帅的意思 Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); // format, make every element keep a separate line. jaxbMarshaller.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, true ); //output --> file File file = new File( filePath ); jaxbMarshaller.marshal( teacher, file ); //output --> console jaxbMarshaller.marshal( teacher, System.out ); } private static void toObj()throws Exception { File file = new File( filePath ); JAXBContext jaxbContext = JAXBContext.newInstance( Teacher.class ); Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller(); Teacher teacher = (Teacher) jaxbUnmarshaller.unmarshal( file ); System.out.println( teacher.getName() ); } private static Teacher initTeacher(){ // organize Object(to be saved/persisted) Teacher teacher = new Teacher(); teacher.setId( "101" ); teacher.setName( "DAO SHI" ); Address address = new Address(); address.setArea( "bei jing, hai dian qu" ); address.setStreet( "shang di 8 jie 88 hao" ); teacher.setAddress( address ); Student stu1 = new Student(); stu1.setId( "007" ); stu1.setName( "ZHOU XING XING" ); Student stu2 = new Student(); stu2.setId( "008" ); stu2.setName( "DA WEN XI" ); List<Student>students = new ArrayList<Student>(); students.add( stu1 ); students.add( stu2 ); teacher.setStudents( students ); Set<String> interests = new HashSet<String>(); interests.add( "play dota" ); interests.add( "smoke" ); teacher.setInterests( interests ); Map<String,String> phones = new HashMap<String,String>(); phones.put( "workPhoe", "18612345678" ); phones.put( "homePhoe", "01012345678" ); teacher.setPhones( phones ); return teacher; }}
/** * @author timeriver.wang * @date 2013-01-09 8:07:09 PM */// @XmlRootElement(namespace ="NAMESPACE" )@XmlRootElement@XmlType(propOrder = {"id","name","address","students","interests","phones"})public class Teacher { private String id; private String name; private Address address; private List<Student> students; private Set<String> interests; private Map<String, String> phones; @XmlAttribute(name = "tid") public String getId() { return id; } public void setId( String id ) { this.id = id; } @XmlElement(name = "tname") public String getName() { return name; } public void setName( String name ) { this.name = name; } @XmlElement(name = "address") public Address getAddress() { return address; } public void setAddress( Address address ) { this.address = address; } @XmlElementWrapper(name = "students") @XmlElement(name = "student") public List<Student> getStudents() { return students; } public void setStudents( List<Student> students ) { this.students = students; } @XmlElementWrapper(name = "interests") @XmlElement(name = "interest") public Set<String> getInterests() { return interests; } public void setInterests( Set<String> interests ) { this.interests = interests; }// can not use XmlElementWrapper, because "Map" is not a "Collection"// @XmlElementWrapper(name = "phones")// @XmlElement(name = "phone") // 也可以不加任何注解,JAXB,会提供一个默认的注解 @XmlJavaTypeAdapter(MapAdapter.class) @XmlElement(name = "phones") public Map<String, String> getPhones() { return phones; } public void setPhones( Map<String, String> phones ) { this.phones = phones; }}
//JAXB support Collection(List,Set),does not support Map(not Collection).//XmlAdapter<ValueType,BoundType> : !use List to implement Map's feature,like (List students)!!!//<ValueType> : to be persisted format, The type that JAXB knows how to handle out of the box//<BoundType> : memory format, The type that JAXB doesn't know how to handlepublic class MapAdapter extends XmlAdapter<MapAdapter.AdaptedMap, Map<String, String>> { public static class AdaptedMap { public List<Entry> entry = new ArrayList<Entry>(); } public static class Entry { public String key; public String value; } @Override public Map<String, String> unmarshal(AdaptedMap adaptedMap) throws Exception { Map<String, String> map = new HashMap<String, String>(); for(Entry entry : adaptedMap.entry) { map.put(entry.key, entry.value); } return map; } //use List to implement Map's feature,like (List students)! @Override public AdaptedMap marshal(Map<String, String> map) throws Exception { AdaptedMap adaptedMap = new AdaptedMap(); for(Map.Entry<String, String> mapEntry : map.entrySet()) { Entry entry = new Entry(); entry.key = mapEntry.getKey(); entry.value = mapEntry.getValue(); adaptedMap.entry.add(entry); } return adaptedMap; } }
@XmlRootElementpublic class Address { private String area; private String street; @XmlElement(name = "area") public String getArea() { return area; } public void setArea( String area ) { this.area = area; } @XmlElement(name = "street") public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } }
阅读全文
0 0
- JAXB(二)Map属性映射
- 二、XML与Java类映射JAXB
- hibernate4 映射集合属性Map
- JAXB--@XmlElementWrapper注解(二)
- JAXB--@XmlElementWrapper注解(二)
- JAXB--@XmlElementWrapper注解(二)
- JAXB的应用之二---------Xml与多个对象的映射(聚合或组合)及注意事项
- 阴影映射(Shadow Map)的研究(二)
- Core Java (二十一) 映射表(Map接口)
- JAXB映射HashMap
- Soundex(map映射)
- JAXB学习二 (类型绑定)
- JAXB: XML 与 Java之间的映射 (OXM)
- Hibernate映射组件属性为集合(二)
- 5.6.4 映射集合属性:Map集合属性
- 映射集合属性之⑤:Map集合属性
- JAXB学习一 (入门)JAXB学习二 (类型绑定)
- virsual studio等AP无法访问网络映射驱动器(map network drive)的解决办法(二)
- 滑动silder切换图片,向上弹出设置层
- JAXB(一)入门--概述,简单例子
- Android 调用地图导航
- 安卓开发大全、系列文章、精品教程
- 文本框防QQ登录界面 代理 协议 回车换控件
- JAXB(二)Map属性映射
- OneToMany字段序列化 failed to lazily initialize a collection of role
- JAXB(三)xsd 验证
- 深度学习与神经网络学习笔记(一)
- 一段html片段,得到其中的某个元素
- Thread--Syn系列(四)线程构造方式
- 关于动画的使用
- Thread--Syn系列(五)
- 我最常用的eclipse快捷方式