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

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

如何輕松實現JavaBeans到XML的相互轉換

2019-11-18 12:49:57
字體:
來源:轉載
供稿:網友

  為了靈活的滿足Web應用和Web services需求的變化,javaxml的輕便性和可擴展性使它們成為解決這一問題的理想選擇。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。
  
  組件的編寫
  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.nbspString 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文件的映射關系
  
 如何輕松實現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文件。
  
 如何輕松實現JavaBeans到XML的相互轉換(圖二)

  
  從XML轉換到JavaBean
  讀XML文件時,根結點名,節點屬性,嵌套節點會分別與bean,set方法和嵌套的beans建立映射關系。因此,要完成映射,必須為每個bean提供默認構造函數及每個屬性的set方法(基本類型或嵌套bean)。
  
  圖3 顯示ContactInfo的XML文件,對應的ContactInfo類及通過fromXML()方法產生的ContactInfo類實例。
  
 如何輕松實現JavaBeans到XML的相互轉換(圖三)

  
  使用舉例
  讓我們看一個使用BeanXMLMapping組件的例子。例子由XML文件,JavaBean類和一個在線銀行的快照組成。你可以從這里下載例子的源碼.
  
  圖4 在線銀行的歷史帳務頁面。
  
 如何輕松實現JavaBeans到XML的相互轉換(圖四)

  圖5顯示類AccountHistory的類圖, 列表3顯示該類通過toXML()方法產生的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()方法。
  
 如何輕松實現JavaBeans到XML的相互轉換(圖六)

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

  列表4 XML封裝的歷史帳務請求信息
  <?xml version

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲女同性videos| 亚洲xxxx3d| 欧美久久精品午夜青青大伊人| 成人h片在线播放免费网站| 国内精品国产三级国产在线专| 欧美激情一区二区三级高清视频| 在线日韩日本国产亚洲| 97在线免费观看| 久久99精品视频一区97| 91成人免费观看网站| 久久激情视频免费观看| 日韩av电影免费观看高清| 亚洲男人av电影| 中文字幕在线国产精品| 国产成人jvid在线播放| 91爱视频在线| 欧美激情精品久久久| 久久精品中文字幕一区| 91经典在线视频| 欧美激情视频一区二区| 九九热在线精品视频| 久久久精品欧美| 久久久久久久久国产| 欧美日韩加勒比精品一区| 亚洲国产精品推荐| 国产精品嫩草影院一区二区| 亚洲色图第一页| 欧美激情综合色综合啪啪五月| 亚洲一区二区三区成人在线视频精品| 亚洲在线观看视频| 91美女福利视频高清| 日本高清久久天堂| 一二美女精品欧洲| 欧美在线观看一区二区三区| 国产福利精品在线| 午夜精品久久久久久99热软件| 91成人在线观看国产| 欧美与欧洲交xxxx免费观看| 国产在线播放91| 欧美性极品少妇精品网站| 国模精品视频一区二区三区| 国产亚洲精品久久久久久| 国产精品福利在线观看| 国产精品露脸自拍| 97国产一区二区精品久久呦| 日韩电影免费观看在线观看| 欧美在线激情视频| 亚洲精品日产aⅴ| 色综合久久88色综合天天看泰| 国产精品青草久久久久福利99| 国产成人精品在线| 精品久久久香蕉免费精品视频| 久久久久久久色| 欧美日韩精品在线视频| 亚洲一区二区三区在线免费观看| 国产欧美日韩视频| 日韩精品欧美国产精品忘忧草| 国产精品爽黄69天堂a| 久久五月天综合| 亚洲综合最新在线| 欧美性生活大片免费观看网址| 久久久久久高潮国产精品视| 欧美老女人bb| 午夜精品福利在线观看| 中文字幕久久精品| 国产中文日韩欧美| 最新亚洲国产精品| 亚洲国产一区二区三区在线观看| 亚洲精品国产精品乱码不99按摩| 精品在线小视频| 深夜福利国产精品| 国产精品中文字幕在线观看| 国产精品久久久久久久久| 操人视频在线观看欧美| 久久综合久久八八| 亚洲天堂第二页| 97国产真实伦对白精彩视频8| 最近2019年中文视频免费在线观看| 亚洲欧美日韩综合| 久久精品国产免费观看| 欧美成人精品激情在线观看| 国产精品一区二区久久久久| 一区二区三区四区精品| 国产精品99蜜臀久久不卡二区| 国产欧美韩国高清| 国产成人欧美在线观看| 欧美日韩黄色大片| 色天天综合狠狠色| 91tv亚洲精品香蕉国产一区7ujn| 成人激情免费在线| 欧美一区二区三区免费视| 久久精品亚洲精品| 国产精品福利在线观看网址| 国产精品久久一区主播| 亚洲欧洲在线免费| 精品人伦一区二区三区蜜桃网站| 亚洲欧美日韩直播| 欧美激情三级免费| 2019亚洲日韩新视频| 亚洲精品欧美日韩| 国产日产欧美精品| 日韩欧美成人精品| 久久久精品久久久久| 亚洲人成免费电影| 亚洲自拍偷拍第一页| 琪琪亚洲精品午夜在线| 亚洲综合av影视| 在线播放日韩欧美| 亚洲精品v天堂中文字幕| 国产婷婷成人久久av免费高清| 久久亚洲一区二区三区四区五区高| 欧美一区亚洲一区| 成人免费福利视频| 国产精品久久久久久久午夜| 久久九九免费视频| 亚洲网站在线观看| 91精品国产777在线观看| 日韩中文字幕视频在线观看| 97av视频在线| 日韩精品免费一线在线观看| 88xx成人精品| 日韩精品在线视频观看| 国产精品欧美一区二区三区奶水| 国产成人一区二区三区电影| 国产成人精品日本亚洲专区61| 91精品免费看| 久久久久亚洲精品| www.日韩.com| 久久av红桃一区二区小说| 午夜欧美大片免费观看| 国产成人小视频在线观看| 欧美日韩国产在线| 国产精品丝袜久久久久久不卡| 欧美国产高跟鞋裸体秀xxxhd| 欧美成人免费观看| 韩国国内大量揄拍精品视频| 日韩亚洲精品视频| 91精品国产高清| 国产精品成人一区二区| 国产精品jizz在线观看麻豆| 九色91av视频| 欧美影院久久久| 欧美劲爆第一页| 黑人巨大精品欧美一区免费视频| 亚洲电影免费观看高清完整版在线| 国产丝袜一区二区三区| 欧美激情国产日韩精品一区18| 少妇高潮久久久久久潘金莲| 亚州精品天堂中文字幕| 欧美午夜精品久久久久久浪潮| 高清欧美电影在线| 亚洲色图欧美制服丝袜另类第一页| 日韩国产精品一区| 中国china体内裑精亚洲片| 日韩有码在线电影| 日韩欧美有码在线| 亚洲美女www午夜| 亚洲国产婷婷香蕉久久久久久| 亚洲欧美中文字幕| 68精品久久久久久欧美| 日韩在线视频网| 欧美日韩激情小视频| 国产999在线观看| 美日韩精品免费视频|