上一次的Castor是依据项目做的,现在自己做了一个小demo
一、实体类
Data
1 package com.yj.fenghao.castor; 2 3 public class Data { 4 5 private Head head; 6 private Row[] row; 7 public Head getHead() { 8 return head; 9 } 10 public void setHead(Head head) { 11 this.head = head; 12 } 13 public Row[] getRow() { 14 return row; 15 } 16 public void setRow(Row[] row) { 17 this.row = row; 18 } 19 public Data(Head head, Row[] row) { 20 super(); 21 this.head = head; 22 this.row = row; 23 } 24 public Data() { 25 super(); 26 // TODO Auto-generated constructor stub 27 } 28 29 }
Head
1 package com.yj.fenghao.castor; 2 3 public class Head { 4 5 private String name; 6 private String age; 7 private String sex; 8 public String getName() { 9 return name; 10 } 11 public void setName(String name) { 12 this.name = name; 13 } 14 public String getAge() { 15 return age; 16 } 17 public void setAge(String age) { 18 this.age = age; 19 } 20 public String getSex() { 21 return sex; 22 } 23 public void setSex(String sex) { 24 this.sex = sex; 25 } 26 public Head(String name, String age, String sex) { 27 super(); 28 this.name = name; 29 this.age = age; 30 this.sex = sex; 31 } 32 public Head() { 33 super(); 34 // TODO Auto-generated constructor stub 35 } 36 37 38 }
Row
1 package com.yj.fenghao.castor; 2 3 import java.util.Map; 4 5 public class Row { 6 7 private String contronl; 8 private Map<String,String> map; 9 public String getContronl() { 10 return contronl; 11 } 12 public void setContronl(String contronl) { 13 this.contronl = contronl; 14 } 15 public Map<String, String> getMap() { 16 return map; 17 } 18 public void setMap(Map<String, String> map) { 19 this.map = map; 20 } 21 public Row(String contronl, Map<String, String> map) { 22 super(); 23 this.contronl = contronl; 24 this.map = map; 25 } 26 public Row() { 27 super(); 28 // TODO Auto-generated constructor stub 29 } 30 31 }
二、下面是映射文件
1 <?xml version="1.0" encoding="UTF-8"?> 2 <!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Mapping DTD Version 1.0//EN" "http://castor.org/mapping.dtd"> 3 <mapping> 4 <class name="com.yj.fenghao.castor.Data" auto-complete="true"> 5 <map-to xml="data"></map-to> 6 <field name="head" type="com.yj.fenghao.castor.Head"> 7 <bind-xml name="head" node="element"></bind-xml> 8 </field> 9 <field name="row" collection="array" type="com.yj.fenghao.castor.Row"> 10 <bind-xml name="row" node="element"></bind-xml> 11 </field> 12 </class> 13 <class name="com.yj.fenghao.castor.Head"> 14 <field name="name" type="string"> 15 <bind-xml name="name" node="element"></bind-xml> 16 </field> 17 <field name="age" type="string"> 18 <bind-xml name="age" node="element"></bind-xml> 19 </field> 20 <field name="sex" type="string"> 21 <bind-xml name="sex" node="element"></bind-xml> 22 </field> 23 </class> 24 <class name="com.yj.fenghao.castor.Row"> 25 <field name="contronl" type="string"> 26 <bind-xml name="contronl" node="element"></bind-xml> 27 </field> 28 <field name="map" collection="map"> 29 <bind-xml name="mapitem" location="map" > 30 <class name="org.exolab.castor.mapping.MapItem"> 31 <field name="key" type="string"> 32 <bind-xml name="key" node="attribute"></bind-xml> 33 </field> 34 <field name="value" type="string"> 35 <bind-xml name="value" node="text"></bind-xml> 36 </field> 37 </class> 38 </bind-xml> 39 </field> 40 </class> 41 </mapping>
三、下面是测试类
1 package com.yj.fenghao.castor; 2 3 import java.io.FileInputStream; 4 import java.io.FileNotFoundException; 5 import java.io.IOException; 6 import java.io.StringReader; 7 import java.io.UnsupportedEncodingException; 8 import java.net.URL; 9 10 import com.yj.fenghao.castor.Data; 11 12 import org.apache.commons.io.IOUtils; 13 import org.exolab.castor.mapping.Mapping; 14 import org.exolab.castor.mapping.MappingException; 15 import org.exolab.castor.xml.MarshalException; 16 import org.exolab.castor.xml.Unmarshaller; 17 import org.exolab.castor.xml.ValidationException; 18 import org.exolab.castor.xml.XMLContext; 19 20 public class Test { 21 22 23 public static final XMLContext xml=new XMLContext(); 24 public static final Test test=new Test(); 25 public Mapping load(){ 26 Mapping load=new Mapping(); 27 try { 28 URL resource = Thread.currentThread().getContextClassLoader().getResource("sample_mapping.xml"); 29 load.loadMapping(resource.getPath()); 30 } catch (IOException e) { 31 e.printStackTrace(); 32 } catch (MappingException e) { 33 e.printStackTrace(); 34 } 35 return load; 36 } 37 38 public static void main(String[] args) { 39 Mapping load = test.load(); 40 StringReader reader=null; 41 String message=null; 42 try { 43 FileInputStream fis=new FileInputStream("d:/123.xml"); 44 message=new String(IOUtils.toByteArray(fis),"utf-8"); 45 } catch (FileNotFoundException e1) { 46 e1.printStackTrace(); 47 } catch (UnsupportedEncodingException e) { 48 e.printStackTrace(); 49 } catch (IOException e) { 50 e.printStackTrace(); 51 } 52 try { 53 xml.addMapping(load); 54 Unmarshaller unmar = xml.createUnmarshaller(); 55 reader=new StringReader(message); 56 unmar.setClass(Data.class); 57 Data data = (Data)unmar.unmarshal(reader); 58 Head head = data.getHead(); 59 System.out.println(" "+head.getName()); 60 System.out.println(" "+head.getAge()); 61 System.out.println(" "+head.getSex()); 62 Row row = data.getRow()[0]; 63 System.out.println(" "+row.getContronl()); 64 System.out.println(" "+row.getMap().get("ce")); 65 } catch (MappingException e) { 66 e.printStackTrace(); 67 } catch (MarshalException e) { 68 e.printStackTrace(); 69 } catch (ValidationException e) { 70 e.printStackTrace(); 71 }finally{ 72 if(reader!=null){ 73 reader.close(); 74 } 75 } 76 77 } 78 79 }
只是简单的xml和实体类的映射进行数据转换