use JOX framework let javabean to xml

JOX Documentation

The Javadoc API documentation is available in the JOX distribution, or you can view it online here.

The Quick & Dirty JOX Tutorial

JOX is extremely easy to use. Assume you have the following Java Bean with several properties including an indexed property and a property whose value is another object.

package com.wutka.jox.test;
import com.wutka.jox.*;
import java.util.*;

public class TestBean implements java.io.Serializable
{
    protected int foo;
    protected String bar;
    protected java.util.Date baz;
    protected Vector thingies;
    protected TestSubbean subbean;

    public TestBean()
    {
        bar = "";
        baz = new Date();
        thingies = new Vector();
    }

    public int getFoo() { return foo; }
 
    public void setFoo(int aFoo) { foo = aFoo; }

    public String getBar() { return bar; }
 
    public void setBar(String aBar) { bar = aBar; }

    public java.util.Date getBaz() { return baz; }
 
    public void setBaz(java.util.Date aBaz) { baz = aBaz; }

    public TestSubbean getSub() { return subbean; }
 
    public void setSub(TestSubbean aSub) { subbean = aSub; }

    public String[] getThingies()
    {
        String[] retThingies = new String[thingies.size()];
        if (thingies.size() > 0) thingies.copyInto(retThingies);
        return retThingies;
    }

    public void setThingies(String[] newThingies)
    {
        thingies = new Vector(newThingies.length);
        for (int i=0; i < newThingies.length; i++)
        {
            thingies.addElement(newThingies[i]);
        }
    }

    public String getThingies(int i)
    {
        return (String) thingies.elementAt(i);
    }
    public void setThingies(int i, String thingy)
    {
        thingies.setElementAt(thingy, i);
    }
    public String toString()
    {
        StringBuffer ret = new StringBuffer(
            "foo="+foo+";bar="+bar+";baz="+baz.toString()+";thingies=");
        for (int i=0; i < thingies.size(); i++)
        {
            if (i > 0) ret.append(",");
            ret.append((String) thingies.elementAt(i));
        }
        ret.append(";sub=");
        ret.append(subbean.toString());
        return ret.toString();
    }
}
 

and you have the following XML file:

<?xml version="1.0"?>
<MarkTest>
<thingies>Moe</thingies>
<thingies>Larry</thingies>
<thingies>Curly</thingies>
<thingies>Shemp</thingies>
<thingies>Curly Joe</thingies>
<foo>5</foo>
<baz>6/25/00 12:46 AM</baz>
<bar>This is the bar value</bar>
<sub>
<age>35</age>
<name>Mark</name>
</sub>
</MarkTest>
 

The following program reads in the XML file and stores its values into TestBean:

 

package com.wutka.jox.test;
import com.wutka.jox.*;
import java.io.*;
public class TestDeser
{
    public static void main(String[] args)
    {
        try
        {
            FileInputStream in = new FileInputStream("bean.xml");
            JOXBeanInputStream joxIn = new JOXBeanInputStream(in);
            TestBean testBean = (TestBean) joxIn.readObject(
                TestBean.class);
            System.out.println(testBean);
        }
        catch (Exception exc)
        {
            exc.printStackTrace();
        }
    }
}
 

All you do is create a FileInputStream or FileReader to read the XML file and wrap a JOXBeanInputStream or JOXBeanReader around the file stream. Then you tell JOX to read an object and tell it the class of the object.

 

Writing a bean out to XML is just as easy:

 

package com.wutka.jox.test;
import com.wutka.jox.*;
import java.io.*;
public class TestSer
{
    public static void main(String[] args)
    {
        try
        {
            TestBean b = new TestBean();
            b.setFoo(5);
            b.setBar("This is the bar value");
            b.setThingies(new String[] {
                "Moe", "Larry", "Curly", "Shemp", "Curly Joe" });
            TestSubbean sub = new TestSubbean();
            sub.setName("Mark");
            sub.setAge(35);
            b.setSub(sub);
            FileOutputStream fileOut = new FileOutputStream("bean.xml");
            JOXBeanOutputStream joxOut = new JOXBeanOutputStream(fileOut);
            joxOut.writeObject("MarkTest", b);
            joxOut.close();
        }
        catch (Exception exc)
        {
            exc.printStackTrace();
        }
    }
}
 

You just put some values in the bean, create an output stream for writing the XML, slap a JOXBeanOutputStream or JOXBeanWriter around the output stream and write the object. Notice that you need to put the root tag name for the XML file when you write out the XML. In the future, you won't have to do this if you have a DTD and JOX can figure out the root tag from the DTD.

For a final example, assume you have the following DTD:

<?xml version="1.0" encoding="ISO-8859-1"?>

<!ELEMENT MarkTest (Thingies*, foo?, BAR?, baz? S-U-B?)>

<!ELEMENT Thingies #PCDATA>
<!ELEMENT foo #PCDATA>
<!ELEMENT BAR #PCDATA>
<!ELEMENT baz #PCDATA>
<!ELEMENT S-U-B (age)>
<!ELEMENT age #PCDATA>
<!ATTLIST S-U-B name CDATA "">

The following program reads in the DTD and passes it to JOX to help JOX format the output:

package com.wutka.jox.test;

import com.wutka.jox.*;
import com.wutka.jox.dtd.*;
import java.io.*;

public class TestSerDTD
{
    public static void main(String[] args)
    {
        try
        {
            TestBean b = new TestBean();
            b.setFoo(5);
            b.setBar("This is the bar value");
            b.setThingies(new String[] {"Moe", "Larry", "Curly", "Shemp", "Curly Joe" });
            TestSubbean sub = new TestSubbean();
            sub.setName("Mark");
            sub.setAge(35);
            b.setSub(sub);

            FileOutputStream fileOut = new FileOutputStream("bean.xml");
	   FileReader reader = new FileReader("testbean.dtd");
            Parser dtdParser = new Parser();
            DTD dtd = dtdParser.parse(reader);
            reader.close();
            JOXBeanOutputStream joxOut = new JOXBeanOutputStream(dtd, fileOut);
            joxOut.writeObject("MarkTest", b);
            joxOut.close();
        }
        catch (Exception exc)
        {
            exc.printStackTrace();
        }
    }
}
 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值