//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 handle public 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; } }
@XmlRootElement public 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; } }
相关推荐
如果有属性,可以将属性名和属性值作为二级Map添加到主Map中。 5. 处理嵌套节点:如果XML中有嵌套节点,可以递归地将它们转换为嵌套的Map结构。 6. 完成转换:遍历结束后,Map就包含了整个XML文档的数据结构。 在...
@XmlAttribute 注解用于将 Java 对象的属性映射为 XML 属性。它可以通过 name 属性为生成的 XML 属性指定别名。 例如: ```java @XmlAttribute(name = "Country") private String state; ``` 五、@XmlAccessorType ...
JAXB的核心概念包括:`@XmlRootElement`、`@XmlElement`、`@XmlAttribute`等注解,这些注解用于标记Java类和类的字段,以便JAXB知道如何映射它们到XML元素和属性。 **Jackson简介** Jackson是另一个流行的数据绑定...
如果一个元素有多个属性,这些属性将以某种形式(例如属性对象或属性Map)存储。如果元素有子元素,子元素将成为嵌套的Map或者List。 要实现XML到Map的转换,我们可以使用Java的标准库JAXB(Java Architecture for ...
在Java编程中,XML(可扩展标记语言)和Map(映射)是两种常见的数据存储和交换格式。XML因其结构化和易于解析的特性,在数据交换和配置文件中广泛使用,而Map则作为Java中存储键值对的高效数据结构。在实际开发中,...
通过JAXB,你可以将XML文档的数据映射到Java对象,反之亦然。这使得处理XML配置文件变得简单且直观。在描述的项目场景中,PTN(Packet Transport Network)健康检查报告的配置可能存储在XML文件中,使用JAXB可以方便...
例如,Map对象不能直接映射到XML元素,因为XML Schema不支持动态属性的直接表示。 2. **自定义数据类型**:对于像Map这样的复杂类型,开发者可以创建自定义的数据类型来映射XML元素。这通常涉及到创建一个Java类,...
以`JAXB`为例,它提供了一种方便的方式来映射Java对象到XML以及反之。首先,你需要创建一个`JAXBContext`实例,然后使用`Marshaller`对象将`Map`对象写入XML字符串。 ```java import javax.xml.bind.JAXBContext; ...
这个过程通常涉及到XML解析和数据映射。 在描述中提到的“递归 XML 转 MAP”,是指XML文档可能存在嵌套结构,递归方法是处理这种结构的有效手段。递归意味着函数调用自身来处理XML元素的子节点,直到所有节点都被...
- Map-backed属性映射:处理Map类型数据的映射。 - 索引映射:根据索引关系进行映射。 - 深层映射:递归映射对象中的所有属性。 - 排除字段:在映射过程中排除某些不需要映射的字段。 - 单向映射:只进行单向映射,...
对于Map,我们可以通过创建一个自定义的JAXB类,将Map元素映射到XML节点,然后在服务端和客户端之间传递这个自定义类。 接下来,我们可以通过以下步骤实现这个过程: 1. **创建JAXB类**:为Map创建一个对应的JAXB...
这个过程可能包括验证数据的有效性、解析元素和属性、以及将这些元素映射到Java对象的属性上。转换为映射后,数据可以更方便地被Java代码访问,例如,通过键来查找和修改值。 Xsd2Map的实现可能依赖于Java的标准库...
- **映射Map支持的属性**:针对Map类型的属性,可以指定如何映射键值对。 - **索引映射**:如果需要按照特定顺序映射数组或列表,可以使用索引映射。 - **深度映射**:当源对象和目标对象具有相同的嵌套结构时,可以...
在Java中,我们可以使用JAXB(Java Architecture for XML Binding)进行XML与Java对象之间的双向绑定,或者使用DOM(Document Object Model)、SAX(Simple API for XML)和StAX(Streaming API for XML)等API来...
当使用JAXB进行操作时,对于类的属性访问控制需要特别注意,例如,如果私有属性设置了public权限的getter/setter方法,则不应使用`@XmlElement`和`@XmlAttribute`注解,否则可能会因为同一个属性在Java类中被映射两...
#### 二、Nachos Machine(Nachos机器) 这一部分主要介绍了构成Nachos运行环境的基础硬件组件及其管理机制。 ##### 2.1 Machine Components(机器组件) - **CPU**: Nachos基于MIPS架构设计,该架构的特点是简单...
- `maptoXml()`方法遍历Map的键值对,创建一个`key`元素并设置其属性和文本。 2. **Map到XML转换**: - `doc2String()`方法(未在代码中显示)应该是将`Document`对象转换为字符串的方法,通常会使用`...
在CXF的服务接口中,我们可以声明一个接受`Order`对象的方法,CXF会自动将XML请求中的数据映射到对应的JavaBean实例。 对于List集合类型的参数和返回值,CXF同样提供了很好的支持。假设我们的服务需要处理一个包含...
- **JAXB(Java Architecture for XML Binding)**:自动将XML映射到Java对象,反之亦然。对于复杂的XML结构,JAXB提供了一种便捷的转换方式。 - **DOM4J**和**JDOM**:这两个是第三方库,提供了对DOM的扩展,简化...