隨筆:2 文章:0 評(píng)論:2 引用:0
          BlogJava 首頁 發(fā)新隨筆
          發(fā)新文章 聯(lián)系 聚合管理

          2007年1月27日

          本文主要講述的是Dom4j在把Document保存到文件過程中出現(xiàn)的一個(gè)中文問題,文中不足之處歡迎大家批評(píng)指教。
            Dom4j是一個(gè)比較優(yōu)秀的java開源xml解析項(xiàng)目,支持DOM,?SAX?and?JAXP.,并提供對(duì)XPath查詢語言的強(qiáng)大支持。因此,在EasyJF團(tuán)隊(duì)的很多開源項(xiàng)目中,如EasyJWeb、EasyDBO等都是使用Dom4j來處理xml文件相關(guān)操作。
          ?
          1、從一個(gè)xml文件中載入一個(gè)Dom到內(nèi)存:
            FileInputStream?in?=?new?FileInputStream(new?File(fileName));
            SAXReader?reader?=?new?SAXReader();
            doc?=?reader.read(in);
          2、把Dom中的數(shù)據(jù)寫入到xml文件中
            使用Dom4j,要把一個(gè)Dom中的數(shù)據(jù)寫入到文件非常簡單,API如下:
            ?public?void?write(Writer?writer)?throws?IOException;
            因此,假如我們要把一個(gè)Document寫入到c:\test.xml文件中,可以簡單的使用下面的代碼即可:
          ??????? java.io.Writer?wr=?new?java.io.FileWrite(filename);
            doc.write(wr);
          ??????? wr.close();//注意,必須要執(zhí)行close()方法,才會(huì)實(shí)現(xiàn)真正的寫入
            
            這種用法也是Dom4j所推薦我們使用的非常簡單的方法。然而,當(dāng)我們的dom中包含有中文字符數(shù)據(jù)的時(shí)候,這種方法寫入的xml文檔卻無法使直覺打開。會(huì)提示類似如下的錯(cuò)誤:
            ?org.dom4j.DocumentException:?invalid?byte?1?of?1-byte?UTF-8?sequence?(0xb2)?Nested?exception:?invalid?byte?1?of?1-byte?UTF-8?sequence?(0xb2)
          ?at?org.dom4j.io.SAXReader.read(SAXReader.java:484)
          ?at?org.dom4j.io.SAXReader.read(SAXReader.java:343)
          ?at?
            我們可以看生成的xml文件編碼,內(nèi)容是utf-8的,但文件格式確是ANSI的,如下圖所示:

          ?
          原因分析:
            由于FileWriter默認(rèn)的輸出編碼是ANSI編碼,而Dom4j中的wirte方法提供的內(nèi)容實(shí)際是以UTF-8保存的,因此造成了包括中文字符的XML文件無法正常閱讀。
          ?
          解決方法:
          ?  不能使用簡單的FileWriter,而應(yīng)該是使用一個(gè)能指定具體輸出編碼的Writer,在JDK的io包中,?OutputStreamWriter可以指定輸出編碼。
            正確的代碼如下:
          ??? java.io.OutputStream?out=new?java.io.FileOutputStream(fileName);
          ???java.io.Writer?wr=new?java.io.OutputStreamWriter(out,"UTF-8");???
          ???doc.write(wr);???
          ???wr.close();
          ???out.close();

            簡化一下可以寫成下面的樣式:

          ?? java.io.Writer?wr=new?java.io.OutputStreamWriter(new?java.io.FileOutputStream(fileName),"UTF-8");???
          ???doc.write(wr);???
          ???wr.close();

          小結(jié):
            由于大多數(shù)優(yōu)秀的基礎(chǔ)性開源項(xiàng)目都是老外開發(fā),他們不大可能在中文平臺(tái)下進(jìn)行測試,用例數(shù)據(jù)也很少會(huì)使用中文平臺(tái),因此,我們即使按照這些開源項(xiàng)目的通用說明文檔及用戶指南去操作,也會(huì)出現(xiàn)很多不可預(yù)知的錯(cuò)誤。這也是為什么本人要參與組建開源團(tuán)隊(duì)EasyJF,提倡搞國產(chǎn)開源,并開發(fā)一些基礎(chǔ)性的開源框架如EasyJWeb、EasyDBO的一個(gè)初衷。
            當(dāng)然,這里提出的中文問題,算是一個(gè)還“沒來得及商量”以及要通過一些罕見的處理才能正確運(yùn)行的中文問題。因此,同樣歸并到了“中文問題沒商量”系列中。

          (注:本文作者,EasyJF開源團(tuán)隊(duì) 大峽,轉(zhuǎn)載請(qǐng)保留作者聲明!)
          posted @ 2007-02-08 15:03 shakebaby 閱讀(1050) | 評(píng)論 (1)編輯 收藏
           

          Service Component Architecture(SCA) 是一組標(biāo)準(zhǔn),描述了一個(gè)通過SOA構(gòu)建應(yīng)用系統(tǒng)的模型。SCA擴(kuò)展并補(bǔ)充了之前服務(wù)實(shí)現(xiàn)的方法,構(gòu)建在一些開放的標(biāo)準(zhǔn)之上,比如Web Services。

          SCA提倡基于SOA的業(yè)務(wù)應(yīng)用能夠用組件(component)的形式來實(shí)現(xiàn)業(yè)務(wù)邏輯,這些組件通過面向服務(wù)的接口提供功能(服務(wù)),或者使用別的組件通過面向服務(wù)的接口提供的功能,即服務(wù)引用(Service references)。SCA將構(gòu)建一個(gè)SOA的應(yīng)用切分為兩個(gè)主要步驟:
          ?1.服務(wù)組件的實(shí)現(xiàn):提供或者使用(consume)服務(wù);
          ?2.服務(wù)組件的組裝:用來構(gòu)建完整的業(yè)務(wù)應(yīng)用,通過連接服務(wù)引用與服務(wù)(Through the wiring ??? of service reference to services)。
          Figure 1. Service Component Architecture

          Service Component Architecture

          SCA服務(wù)的實(shí)現(xiàn)支持使用多種的編程語言,既包括傳統(tǒng)的面向?qū)ο蠡蜻^程的語言,如:Java,PHP,C++,COBOL,以XML為核心的BPEL,XSLT等,又包括一些聲明語言(declarative language)如:SQL和XQuery。SCA同樣支持異步的和面向消息的調(diào)用以及同步的調(diào)用返回模式。

          SCA支持綁定(Bindings)一組訪問機(jī)制用來調(diào)用服務(wù),包括Web Services,Messaging Systems 和 CORBA IIOP,Bindings 是聲明式的(are handled declarativly)獨(dú)立于實(shí)現(xiàn)代碼,SCA通過使用策略定義了基礎(chǔ)功能的使用,目的是為了更方便的應(yīng)用到業(yè)務(wù)系統(tǒng)。

          SCA提倡使用Service Data Object(SDO)來表示服務(wù)中使用或返回的業(yè)務(wù)數(shù)據(jù),提供對(duì)業(yè)務(wù)數(shù)據(jù)統(tǒng)一的訪問來滿足對(duì)SCA自己提供的業(yè)務(wù)服務(wù)的統(tǒng)一訪問。

          SCA規(guī)范由許多文檔共同描述,每一文檔描述SCA中的一個(gè)方面。裝配模型(Assembly Model)描述了組件間的配線連接。裝配模型獨(dú)立于實(shí)現(xiàn)語言。客戶端和實(shí)現(xiàn) 描述了服務(wù)的實(shí)現(xiàn)和服務(wù)客戶端—— 每一種實(shí)現(xiàn)語言有其自己的客戶端和針對(duì)該語言的SCA模型實(shí)現(xiàn)規(guī)范。

          原文

          posted @ 2007-01-27 18:35 shakebaby 閱讀(314) | 評(píng)論 (1)編輯 收藏
          CALENDER
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(1)

          隨筆分類

          隨筆檔案

          搜索

          •  

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜


          Powered By: 博客園
          模板提供滬江博客

          主站蜘蛛池模板: 南昌县| 沁源县| 武陟县| 张掖市| 志丹县| 壤塘县| 乌拉特后旗| 信宜市| 板桥市| 颍上县| 通州市| 德州市| 新余市| 醴陵市| 孝感市| 青岛市| 额尔古纳市| 鄄城县| 江西省| 新竹县| 叙永县| 平顶山市| 盱眙县| 台安县| 榕江县| 武宣县| 宜兰县| 永修县| 普格县| 海林市| 祥云县| 抚远县| 普宁市| 措美县| 金坛市| 郓城县| 新野县| 兴宁市| 海口市| 东兴市| 永顺县|