亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

JavaBean-XML組件輕松實現JavaBeans到XML的相互轉換

2019-11-18 16:20:52
字體:
來源:轉載
供稿:網友
摘要
    不用復雜的代碼,就可以讓您的javaBeans自己控制到xml文件的相互轉化。本文展示了怎樣通過寫組件來實現從JavaBeans到XML文件的相互轉換。

   為了靈活的滿足Web應用和Web services需求的變化,Java和XML的輕便性和可擴展性使它們成為解決這一問題的理想選擇。SAX (Simple API for XML), DOM (Document Object 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。

組件的編寫
   BeanXMLMapping組件實現了從JavaBean到XML文件的相互轉換。借助于JavaBean的內省機制,XML解析器和DOM APIs,您可以編寫toXML()方法來實現從JavaBean到XML文件的轉換,以及fromXML()方法實現從XML文件到JavaBean的轉換.
      列表1展示BeanXMLMapping組件一種可能的實現。程序中使用JOX(Java Objects in XML)類庫。當然您也可以使用其它的APIs來實現BeanXMLMapping組件,這里選用JOX是因為比較簡單并且可以重用。

列表1 BeanXMLMapping組件
import com.wutka.jox.*;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;

public class BeanXMLMapping {

  /**
   *  Retrieves a bean object for the
   *  received XML and matching bean class
   */
  public static Object fromXML(String xml, Class className) {
    ByteArrayInputStream xmlData = new ByteArrayInputStream(xml.getBytes());
    JOXBeanInputStream joxIn = new JOXBeanInputStream(xmlData);
    try {
      return (Object) joxIn.readObject(className);
    } catch (IOException exc) {
      exc.printStackTrace();
      return null;
    } finally {
      try {
        xmlData.close();
        joxIn.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  /**
   *  Returns an XML document String for the received bean
   */
  public static String toXML(Object bean) {
    ByteArrayOutputStream xmlData = new ByteArrayOutputStream();
    JOXBeanOutputStream joxOut = new JOXBeanOutputStream(xmlData);
    try {
      joxOut.writeObject(beanName(bean), bean);
      return xmlData.toString();
    } catch (IOException exc) {
      exc.printStackTrace();
      return null;
    } finally {
      try {
        xmlData.close();
        joxOut.close();
      } catch (Exception e) {
        e.printStackTrace();
      }
    }
  }

  /**
   *  Find out the bean class name
   */
  private static String beanName(Object bean) {
    String fullClassName = bean.getClass().getName();
    String classNameTemp = fullClassName.substring(
        fullClassName.lastIndexOf(".") + 1,
        fullClassName.length()
        );
    return classNameTemp.substring(0, 1)
         + classNameTemp.substring(1);
  }
}

      BeanXMLMapping類提供了兩個方法來實現從JavaBean到XML文件的相互轉換:
toXML(): 產生bean實例相應的XML格式字符串
fromXML(): 用XML格式的字符串創建bean實例

組件的使用    列表2展示名為AccountHistoryContext的JavaBean,該類中的toXML()和fromXML()方法只是簡單的調用BeanXMLMapping組件的toXML()和fromXML()方法。


列表2 AccountHistoryContext bean
public class AccountHistoryContext{
  private String dateFrom;
  public String getDateFrom()  { return dateFrom; }
  public void setDateFrom(String s)  { dateFrom = s;  }
  ...
  // Other attributes with their get and set methods

  public String toXML()   {
    return BeanXMLMapping.toXML(this);
  }
  public static AccountHistoryContext fromXML (String xml)   {
      return (AccountHistoryContext)  
        BeanXMLMapping.fromXML (
           xml, AccountHistoryContext.class);
  }
}

圖1顯示一般的JavaBean類和其對應XML文件的映射關系
JavaBean-XML組件輕松實現JavaBeans到XML的相互轉換(圖一)

從javabean轉換到xml
    XML文件的第一行是XML版本的申明,在上例中指定為1.0版(<?xml version="1.0" encoding="ISO-8859-1"?>)。
下面一行定義XML文件的根接點,例子中為JavaBean的類名(<Bean>)。

    再下面就是定義跟節點的子節點。節點名為bean中通過get方法可以訪問的屬性。如果屬性為基本類型(比如String,int),就直接用屬性的名字生成節點。如果屬性是另一個bean,則產生相應的嵌套節點.

圖2 顯示ContactInfo類實例,ContactInfo類及由toXML()方法產生的XML文件。
JavaBean-XML組件輕松實現JavaBeans到XML的相互轉換(圖二)

從xml轉換到javabean
    讀XML文件時,根結點名,節點屬性,嵌套節點會分別與bean,set方法和嵌套的beans建立映射關系。因此,要完成映射,必須為每個bean提供默認構造函數及每個屬性的set方法(基本類型或嵌套bean)。

圖3 顯示ContactInfo的XML文件,對應的ContactInfo類及通過fromXML()方法產生的ContactInfo類實例。
JavaBean-XML組件輕松實現JavaBeans到XML的相互轉換(圖三)

使用舉例
    讓我們看一個使用BeanXMLMapping組件的例子。例子由XML文件,JavaBean類和一個在線銀行的快照組成。你可以從這里下載例子的源碼.

圖4 在線銀行的歷史帳務頁面。
JavaBean-XML組件輕松實現JavaBeans到XML的相互轉換(圖四)

圖5顯示類AccountHistory的類圖, 列表3顯示該類通過toXML()方法產生的XML文件。
JavaBean-XML組件輕松實現JavaBeans到XML的相互轉換(圖五)

列表3 XML封裝的歷史帳務信息
<?xml version="1.0" encoding="ISO-8859-1"?>
<AccountHistory>
  <transactionList>
    <transaction>
      <deposit></deposit>
      <withdraw>-$1,150.00 </withdraw>
      <date>3/10/2002 </date>
      <description>Check Number: 213 </description>
      <balance>$3,340.50</balance>
    </transaction>
    <transaction>
      <deposit></deposit>
      <withdraw>-$151.50</withdraw>
      <date>3/7/2002</date>
      <description>ATM Withdrawal 350 SAN JOSE CA</description>
      <balance>$3,189.00</balance>
    </transaction>
    <transaction>
      <deposit>$4,060.40 </deposit>
      <withdraw></withdraw>
      <date>3/5/2002</date>
      <description>ACH DEPOSIT - MyCompany </description>
      <balance>$7,249.40</balance>
    </transaction>
    <transaction>
      <deposit></deposit>
      <withdraw>-$20.00</withdraw>
      <date>2/26/2002</date>
      <description>JC'S BBQ AND DELI SAN JOSE CA </description>
      <balance>$7,229.40</balance>
    </transaction>
  </transactionList>
  <accountHistoryContext>
    <account>
      <holder>Paulo Caroli</holder>
      <type>checkings</type>
      <number>316614-10</number>
    </account>
    <dateTo>Monday, March 11, 2002 </dateTo>
    <dateFrom>Monday, February 25, 2002 </dateFrom>
  </accountHistoryContext>
</AccountHistory>

圖6 時序圖顯示怎樣找到類AccountHistory并調用其toXML()方法。

JavaBean-XML組件輕松實現JavaBeans到XML的相互轉換(圖六)

圖7在線銀行請求歷史帳務的頁面。帳號和日期顯示在該頁面上;列表4用XML封裝該顯示信息。
JavaBean-XML組件輕松實現JavaBeans到XML的相互轉換(圖七)

列表4 XML封裝的歷史帳務請求信息
<?xml version="1.0" encoding="ISO-8859-1"?>
<AccountHistoryContext>
  <account>
    <holder>Paulo Caroli</holder>
    <type>checkings</type>
    <number>316614-10</number>
  </account>
  <dateTo>Monday, March 11, 2002 </dateTo>
  <dateFrom>Monday, February 25, 2002 </dateFrom>
</AccountHistoryContext>

      AccountHistoryContext類的FromXML()方法將傳來的XML文件轉換成相應的AccountHistoryContext類對象。

    就是這么簡單,根本不用復雜的代碼,就可以實現從JavaBean到XML文件的相互轉換。程序開發人員使用BeanXMLMapping組件就可以不用關心底層的與XML相關的類庫。

原文:
http://www.javaworld.com/javaworld/javatips/jw-javatip138.Html

matrix開源技術經javaworld授權翻譯并發布.
如果你對此文章有任何看法或建議,請到Matrix論壇發表您的意見.
注明: 如果對matrix的翻譯文章系列感興趣,請點擊oreilly和javaworld文章翻譯計劃查看詳細情況
您也可以點擊-Flashspy查看翻譯作者的詳細信息.
原文:http://www.javaworld.com/javaworld/javatips/jw-javatip138.html

(出處:http://www.49028c.com)



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
97视频在线观看视频免费视频| 亚洲精品一区中文字幕乱码| 在线视频国产日韩| 日韩精品视频在线| 亚州av一区二区| 久久网福利资源网站| 国产一区二区欧美日韩| 精品福利在线观看| 国产精品99久久久久久白浆小说| 久久国产精品久久精品| 国产精品成人在线| 日韩精品视频在线| 欧美国产日韩中文字幕在线| 伊人久久精品视频| 成人淫片在线看| 成人h片在线播放免费网站| 91国产精品91| 欧亚精品在线观看| 国产日韩欧美在线看| 国产亚洲视频中文字幕视频| 亚洲福利影片在线| 色妞在线综合亚洲欧美| 亚洲精品久久7777777| 亚洲精品电影在线观看| 伦伦影院午夜日韩欧美限制| 国产精品av在线播放| 日日摸夜夜添一区| 国产91精品在线播放| 国产中文欧美精品| 日本精品在线视频| 色噜噜国产精品视频一区二区| 日韩精品中文字幕有码专区| 国产精品入口夜色视频大尺度| 国产精品电影久久久久电影网| 亚洲国产三级网| 亚洲精品乱码久久久久久金桔影视| 国产精品吹潮在线观看| 亚洲人成五月天| 精品国产老师黑色丝袜高跟鞋| 亚洲人成啪啪网站| 日韩大陆欧美高清视频区| 国产一区二区久久精品| 国产精品日韩在线一区| 国产精品免费在线免费| 亚洲精品视频免费在线观看| 97国产精品久久| 国产精品三级美女白浆呻吟| 亚洲色图校园春色| 青青草成人在线| 亚洲第一精品夜夜躁人人躁| 国产在线一区二区三区| 国产有码一区二区| 国产免费一区二区三区香蕉精| 国产精品第一区| 国产精品大陆在线观看| 久久成人亚洲精品| 欧美视频精品一区| 亚洲片国产一区一级在线观看| 欧美人在线视频| 日韩电影中文字幕| 亚洲国产欧美一区| 国产精品视频自拍| 超碰精品一区二区三区乱码| 日本国产精品视频| yellow中文字幕久久| 久久精品国产久精国产一老狼| 精品久久久在线观看| 国产91色在线播放| 久久久亚洲影院| 欧美成人三级视频网站| 国产69久久精品成人看| 成人久久精品视频| 北条麻妃一区二区三区中文字幕| 亚洲国产欧美精品| 国产精品稀缺呦系列在线| 91免费在线视频网站| 国产精品久久av| 疯狂做受xxxx欧美肥白少妇| 国产亚洲a∨片在线观看| 国产精品无av码在线观看| 欧美福利视频在线观看| 7m精品福利视频导航| 国产日韩在线视频| www.亚洲男人天堂| 久久免费少妇高潮久久精品99| 91网在线免费观看| 蜜臀久久99精品久久久无需会员| 久久99国产精品久久久久久久久| 在线播放日韩精品| 97av在线影院| 九九热99久久久国产盗摄| 日韩av在线免费看| 欧美国产日韩在线| 中文字幕在线看视频国产欧美在线看完整| 亚洲精品不卡在线| 国产一区二区黑人欧美xxxx| 91成人国产在线观看| 日韩中文字在线| www.日韩av.com| 福利精品视频在线| 亚洲最新中文字幕| 高清一区二区三区日本久| 精品久久久久久久中文字幕| 国产精品成人品| 欧美xxxx做受欧美| 日韩二区三区在线| 国产精品毛片a∨一区二区三区|国| 欧美天堂在线观看| 久久99视频免费| 国产精品高精视频免费| 成人国产精品av| 色综合伊人色综合网| 亚洲欧美日韩一区二区三区在线| 国产精品免费电影| 亚洲无线码在线一区观看| 91社区国产高清| 中文字幕在线精品| 亚洲成**性毛茸茸| 久久精品国产久精国产一老狼| 成人精品视频久久久久| 国产日韩中文字幕在线| 91欧美视频网站| 国产一区二区三区毛片| 98精品国产高清在线xxxx天堂| 精品国产福利视频| 国产亚洲日本欧美韩国| 日韩av影片在线观看| 欧美高清理论片| 欧美在线精品免播放器视频| 亚洲国产成人一区| 一个色综合导航| 成人福利视频在线观看| 97久久精品视频| 日韩av免费在线| 色婷婷亚洲mv天堂mv在影片| 亚洲国内高清视频| 国产精品网红福利| 成人av.网址在线网站| 久久伊人精品一区二区三区| 海角国产乱辈乱精品视频| 亚洲加勒比久久88色综合| 日本91av在线播放| 成人国产亚洲精品a区天堂华泰| 亚洲毛茸茸少妇高潮呻吟| 欧美日韩成人精品| 国产91在线播放九色快色| 亚洲男人天堂2023| 亚洲三级免费看| 国产日韩视频在线观看| 久久影院模特热| 国产成人精品优优av| 久久综合伊人77777| 午夜免费日韩视频| 国产91精品黑色丝袜高跟鞋| 国产成人精品久久二区二区91| 欧美性生交大片免网| 欧美疯狂做受xxxx高潮| 久久精品亚洲精品| 最近中文字幕2019免费| 欧美韩国理论所午夜片917电影| 91嫩草在线视频| 91精品国产色综合久久不卡98口| 欧美一级大片在线免费观看| 在线亚洲男人天堂|