天天看點

Castor實作XML與Java的互轉

bean

package ex1; 

import java.io.Serializable; 

import java.util.*; 

public class Foo implements Serializable { 

        private String name; 

        private Date birthday = new Date(); 

        private List adds = new ArrayList(0); 

        private Map map =    new HashMap(0); 

        public Foo() { 

        } 

        public Foo(String name) { 

                this.name = name; 

        public String getName() { 

                return name; 

        public void setName(String name) { 

        public Date getBirthday() { 

                return birthday; 

        public void setBirthday(Date birthday) { 

                this.birthday = birthday; 

        public List getAdds() { 

                return adds; 

        public void setAdds(List adds) { 

                this.adds = adds; 

        public Map getMap() { 

                return map; 

        public void setMap(Map map) { 

                this.map = map; 

}

test類:

import org.exolab.castor.xml.Marshaller; 

import org.exolab.castor.xml.Unmarshaller; 

import java.io.FileReader; 

import java.io.FileWriter; 

import java.util.Map; 

public class MarshalTester { 

        public static void main(String[] args) { 

                testMarshaller(); 

                testUnMarshaller(); 

        /** 

         * java->XML 

         */ 

        public static void testMarshaller() { 

                try { 

                        Foo f = new Foo("foo"); 

                        f.getAdds().add("zhengzhou"); 

                        f.getAdds().add("xian"); 

                        f.getMap().put("a", "aaa"); 

                        f.getMap().put("b", "bbb"); 

                        FileWriter writer = new FileWriter("foo.xml"); 

                        Marshaller marshaller = new Marshaller(writer); 

                        marshaller.setEncoding("GBK"); 

                        marshaller.marshal(f); 

                } catch (Exception e) { 

                        e.printStackTrace(System.err); 

                } 

         * XML->java 

        public static void testUnMarshaller() { 

                        FileReader reader = new FileReader("D:\\teststu\\testcastor\\foo.xml"); 

                        Foo foo = (Foo) Unmarshaller.unmarshal(Foo.class, reader); 

                        System.out.println("Name: " + foo.getName()); 

                        System.out.println("Birthday: " + foo.getBirthday()); 

                        for (Object s : foo.getAdds()) { 

                                System.out.println("Add: " + s.toString()); 

                        } 

                        for (Object o : foo.getMap().entrySet()) { 

                                Map.Entry e = (Map.Entry) o; 

                                System.out.println("Map: " + e.getKey() + "--" + e.getValue()); 

                        System.err.println(e.getMessage()); 

生成的xml檔案如下:

foo.xml

<?xml version="1.0" encoding="GBK"?> 

<foo> 

        <name>foo</name> 

        <birthday>2010-04-30T18:01:59.375+08:00</birthday> 

        <map xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:java="http://java.sun.com" 

                 xsi:type="java:org.exolab.castor.mapping.MapItem"> 

                <key xsi:type="java:java.lang.String">a</key> 

                <value xsi:type="java:java.lang.String">aaa</value> 

        </map> 

                <key xsi:type="java:java.lang.String">b</key> 

                <value xsi:type="java:java.lang.String">bbb</value> 

        <adds xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:java="http://java.sun.com" 

                    xsi:type="java:java.lang.String">zhengzhou 

        </adds> 

                    xsi:type="java:java.lang.String">xian 

</foo>

運作反解組測試方法:

log4j:WARN No appenders could be found for logger (org.castor.core.util.AbstractProperties). 

log4j:WARN Please initialize the log4j system properly. 

Name: foo 

Birthday: Fri Apr 30 18:01:59 CST 2010 

Add: zhengzhou 

Add: xian 

Map: a--aaa 

Map: b--bbb 

Process finished with exit code 0

紅色部分是有效輸出!

雖然格式還不夠美觀,但已經感受到了Castor的強大功能!

這個例子不夠完美,xml還沒格式化,輸出了一些類參數資訊,顯得不夠專業。以後再研究研究。

本文轉自 leizhimin 51CTO部落格,原文連結:http://blog.51cto.com/lavasoft/307808,如需轉載請自行聯系原作者