通过JOX轻松实现JavaBeans与XML的相互转换

来源:微学计算机考试发布时间:2008-07-16
 不用复杂的代码,就可以让您的JavaBeans自己控制到XML文件的相互转化。本文展示了怎样通过JOX来实现从JavaBeans到XML文件的相互转换。 为了灵活的满足Web应用和Web services需求的变化,Java和XML的轻便性和可扩展性使它们成为解决这一问题的理想选择。SAX (Simple API for XML), DOM (document.nbspObject Model), XSL (Extensible Stylesheet Language), XSLT (XSL Transformations), SOAP (Simple Object Access Protocol), and BML (Bean Markup Language)是XML领域内的相关技术。本文集合了Java和XML轻便和可扩展的优点,但又不需要开发人员了解上述的相关技术。 在Java分布式应用中使用远程方法调用(RMI),而不是直接用底层的socket或其它网络链接代码。EJB技术也使开发人员从transaction,recovery, activation等底层机制中解放出来。同样,使用本文的JavaBean-XML映射组件,开发人员也不用直接处理与XML有关的APIs。

  1.先定义javaBean

  view plaincopy to clipboardprint?

  不用复杂的代码,就可以让您的JavaBeans自己控制到XML文件的相互转化。本文展示了怎样通过JOX来实现从JavaBeans到XML文件的相互转换。

  为了灵活的满足Web应用和Web services需求的变化,Java和XML的轻便性和可扩展性使它们成为解决这一问题的理想选择。SAX (Simple API for XML), DOM (document.nbspObject Model), XSL (Extensible Stylesheet Language), XSLT (XSL Transformations), SOAP (Simple Object Access Protocol), and BML (Bean Markup Language)是XML领域内的相关技术。本文集合了Java和XML轻便和可扩展的优点,但又不需要开发人员了解上述的相关技术。

  在Java分布式应用中使用远程方法调用(RMI),而不是直接用底层的socket或其它网络链接代码。EJB技术也使开发人员从transaction,recovery, activation等底层机制中解放出来。同样,使用本文的JavaBean-XML映射组件,开发人员也不用直接处理与XML有关的APIs。

  1.先定义javaBean

  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();

  }

  }

  不用复杂的代码,就可以让您的JavaBeans自己控制到XML文件的相互转化。本文展示了怎样通过JOX来实现从JavaBeans到XML文件的相互转换。

  为了灵活的满足Web应用和Web services需求的变化,Java和XML的轻便性和可扩展性使它们成为解决这一问题的理想选择。SAX (Simple API for XML), DOM (document.nbspObject Model), XSL (Extensible Stylesheet Language), XSLT (XSL Transformations), SOAP (Simple Object Access Protocol), and BML (Bean Markup Language)是XML领域内的相关技术。本文集合了Java和XML轻便和可扩展的优点,但又不需要开发人员了解上述的相关技术。

  在Java分布式应用中使用远程方法调用(RMI),而不是直接用底层的socket或其它网络链接代码。EJB技术也使开发人员从transaction,recovery, activation等底层机制中解放出来。同样,使用本文的JavaBean-XML映射组件,开发人员也不用直接处理与XML有关的APIs。

  

  1.先定义javaBean

  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();

  }

  }view plaincopy to clipboardprint?

  2.xml文件

  2.xml文件view plaincopy to clipboardprint?

  <PRE class=csharp name="code"><?xml version="1.0"?>

  <MarkTest>

  <thingies>http://www.5a520.cn 小说520网</thingies>

  <thingies>http://www.bt285.cn BT下载</thingies>

  <thingies>http://www.bt285.cn/caj/ caj下载</thingies>

  <thingies>http://www.bt285.cn/baolimotuo/ 暴力摩托</thingies>

  <thingies>http://www.bt285.cn/btjinglin bt精灵</thingies>

  <foo>5</foo>

  <baz>6/25/00 12:46 AM</baz>

  <bar>This is the website value</bar>

  <sub>

  <age>1</age>

  <name>wangdei</name>

  </sub>

  </MarkTest>

  </PRE>

  view plaincopy to clipboardprint?<?xml version="1.0"?> <MarkTest> <thingies>http://www.5a520.cn 小说520网</thingies> <thingies>http://www.bt285.cn BT下载</thingies> <thingies>http://www.bt285.cn/caj/ caj下载</thingies> <thingies>http://www.bt285.cn/baolimotuo/ 暴力摩托</thingies> <thingies>http://www.bt285.cn/btjinglin bt精灵</thingies> <foo>5</foo> <baz>6/25/00 12:46 AM</baz> <bar>This is the website value</bar> <sub> <age>1</age> <name>wangdei</name> </sub> </MarkTest> <?xml version="1.0"?>

  <MarkTest>

  <thingies>http://www.5a520.cn 小说520网</thingies>

  <thingies>http://www.bt285.cn BT下载</thingies>

  <thingies>http://www.bt285.cn/caj/ caj下载</thingies>

  <thingies>http://www.bt285.cn/baolimotuo/ 暴力摩托</thingies>

  <thingies>http://www.bt285.cn/btjinglin bt精灵</thingies>

  <foo>5</foo>

  <baz>6/25/00 12:46 AM</baz>

  <bar>This is the website value</bar>

  <sub>

  <age>1</age>

  <name>wangdei</name>

  </sub>

  </MarkTest>

  下面的程序是把xml转为成javaBean

  view plaincopy to clipboardprint?

  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);

  <A title=system href="http://www.alimama.com/membersvc/buyadzone/buy_ad_zone.htm?adzoneid=892989 " target=_blank>system</A>.out.println(testBean);

  }

  catch (Exception exc)

  {

  exc.printStackTrace();

  }

  }

  }

  <P>下面的程序是把javaBean转为成xml

  </P><PRE class=csharp name="code">

  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[] {

  "http://www.5a520.cn 小说520网", "http://www.bt285.cn BT下载", "http://www.bt285.cn/caj/ caj下载", "http://www.bt285.cn/baolimotuo/ 暴力摩托", "http://www.bt285.cn/btjinglin bt精灵" });

  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();

  }

  }

  }

  </PRE>