隨筆 - 115  文章 - 481  trackbacks - 0
          <2007年1月>
          31123456
          78910111213
          14151617181920
          21222324252627
          28293031123
          45678910

          常用鏈接

          留言簿(19)

          隨筆檔案(115)

          文章檔案(4)

          新聞檔案(1)

          成員連接

          搜索

          •  

          最新評論

          閱讀排行榜

          評論排行榜

            Spring是一個非常優(yōu)秀的開源項目,然而,跟其它任何優(yōu)秀的系統(tǒng)產(chǎn)品一樣,也存在著這樣那樣的問題,我們喜歡稱為Bug。Spring中的Bug確實不少,今天為了充實“中文問題沒商量”主題,舉一個不算很重要,也比較簡單理解的一個Bug示例。
            這里提前申明,這個話題不是針對Spring項目,因此請“春迷”們自重、沒事勿擾,文中不足之處歡迎大家批評指教。
            我們知道,一個開源軟件項目,給用戶的單元測試最基本的要求是能全部通過測試,在Java中就是在運行單元測試的時候應(yīng)該要看見一個綠條。Spring項目的單元測試寫得非常好,也非常全面。然而,單元測試中卻有一些問題,在中文路徑上無法完全通過測試,必須放到英文路徑下才能完全通過測試,因此,這屬于一種“沒商量”的中文問題。
            單元測試:
            包:org.springframework.beans.factory.xml
            類:XmlBeanFactoryTests
            方法:testFileSystemResourceWithImport
            錯誤圖示:
          ?


            詳細(xì)錯誤信息:
          org.springframework.beans.factory.BeanDefinitionStoreException: IOException parsing XML document from file [C:\Documents%20and%20Settings\Administrator\%e6%a1%8c%e9%9d%a2\spring\spring-framework-2.0-rc2\bin\org\springframework\beans\factory\xml\resource.xml]; nested exception is java.io.FileNotFoundException: C:\Documents%20and%20Settings\Administrator\%e6%a1%8c%e9%9d%a2\spring\spring-framework-2.0-rc2\bin\org\springframework\beans\factory\xml\resource.xml (系統(tǒng)找不到指定的路徑。)
          Caused by: java.io.FileNotFoundException: C:\Documents%20and%20Settings\Administrator\%e6%a1%8c%e9%9d%a2\spring\spring-framework-2.0-rc2\bin\org\springframework\beans\factory\xml\resource.xml (系統(tǒng)找不到指定的路徑。)
          ?at java.io.FileInputStream.open(Native Method)
          ?at java.io.FileInputStream.<init>(FileInputStream.java:106)
          ?at org.springframework.core.io.FileSystemResource.getInputStream(FileSystemResource.java:85)
          ?at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:334)
          ?at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:315)
          ?at org.springframework.beans.factory.xml.XmlBeanFactory.<init>(XmlBeanFactory.java:73)
          ?at org.springframework.beans.factory.xml.XmlBeanFactory.<init>(XmlBeanFactory.java:61)
          ?at org.springframework.beans.factory.xml.XmlBeanFactoryTests.testFileSystemResourceWithImport(XmlBeanFactoryTests.java:946)
          ?at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
          ?at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
          ?at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
          ?at java.lang.reflect.Method.invoke(Method.java:585)
          ?at junit.framework.TestCase.runTest(TestCase.java:154)
          ?at junit.framework.TestCase.runBare(TestCase.java:127)
          ?at junit.framework.TestResult$1.protect(TestResult.java:106)
          ?at junit.framework.TestResult.runProtected(TestResult.java:124)
          ?at junit.framework.TestResult.run(TestResult.java:109)
          ?at junit.framework.TestCase.run(TestCase.java:118)
          ?at junit.framework.TestSuite.runTest(TestSuite.java:208)
          ?at junit.framework.TestSuite.run(TestSuite.java:203)
          ?at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:128)
          ?at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
          ?at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
          ?at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
          ?at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
          ?at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)

          測試代碼:
          public void testFileSystemResourceWithImport() {
          ??String file = getClass().getResource("resource.xml").getFile();
          ??XmlBeanFactory xbf = new XmlBeanFactory(new FileSystemResource(file));
          ??// comes from "resourceImport.xml"
          ??ResourceTestBean resource1 = (ResourceTestBean) xbf.getBean("resource1");
          ??// comes from "resource.xml"
          ??ResourceTestBean resource2 = (ResourceTestBean) xbf.getBean("resource2");
          ?}
          ?
          出錯原因:
            這個問題是筆者在參與開發(fā)EasyJWeb及EasyDBO框架中遇到過的問題,因此很容易就找到了問題的所在。Java的Class.getResource(name)返回的是一個URL,而URL.getFile默認(rèn)情況下返回的是經(jīng)過URL編碼后的字符,會把中文等特殊字符變成類似%e6的形式。而一般io構(gòu)造路徑是沒有自動解碼功能的,所以在中文路徑下要出現(xiàn)錯誤。
          ?
          解決辦法:
            在使用URL.getFile返回的路徑時,使用前需要使用java.net.URLDecoder對路徑進(jìn)行一次解碼操作。修改后的且能通過測試的方法如下:
          public void testFileSystemResourceWithImport() {
          ??String file = getClass().getResource("resource.xml").getFile();
          ??try{
          ??file=java.net.URLDecoder.decode(file,"UTF-8");
          ??}
          ??catch(Exception e)
          ??{
          ???e.printStackTrace();
          ??}?
          ??XmlBeanFactory xbf = new XmlBeanFactory(new FileSystemResource(file));
          ??// comes from "resourceImport.xml"
          ??ResourceTestBean resource1 = (ResourceTestBean) xbf.getBean("resource1");
          ??// comes from "resource.xml"
          ??ResourceTestBean resource2 = (ResourceTestBean) xbf.getBean("resource2");
          ?}
          ?
          小結(jié):
            由于Spring開源項目的開發(fā)團(tuán)隊中,除了一些喜歡跟在Rod大叔的屁股后面唱中文版贊歌的“春迷”以外,當(dāng)前似乎還沒有中國人參與到正式的Spring開發(fā)小組中。因此,也許沒有在中文路徑下運行過測試用例,導(dǎo)致我這樣的Spring初學(xué)者一不小心就遇上這樣的問題。
            問題是解決了,但是卻是一種比較罕見的方式,而且Spring開發(fā)小組事先也許沒有預(yù)想到或是故意忽略掉的問題,因此,可以稱得上是“沒商量”的中文問題。
            ?(注:本文作者,EasyJF開源團(tuán)隊 大峽,轉(zhuǎn)載請保留作者聲明!)
          posted on 2006-08-21 11:45 簡易java框架 閱讀(2222) 評論(30)  編輯  收藏

          FeedBack:
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-21 13:16 楊一
          在使用spring之前,我曾自己設(shè)計了一個配置的樹形結(jié)構(gòu),來管理配置我的web企業(yè)應(yīng)用項目。但后來接觸了spring我才發(fā)現(xiàn)這是我想要的東西。還有orm的思想也是,很多人都曾經(jīng)這么實踐過。有了更好的東西,我們?yōu)槭裁床挥媚?,我需要一個配置樹,但我的配置樹卻不支持依賴注入。在我有時間和能力做出更好的東西或發(fā)現(xiàn)更好的東西以前,只能用spring了。
          至于您說的spring的bug,我只想說一句話,您參與了windows或linux的開發(fā)了嗎?  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-21 16:39 nononone
          這個問題明顯是URL不支持中文造成的,怎么算是“Spring2.0項目中的Bug一例 ”呢?你覺得這個問題應(yīng)該由Spring來解決嗎?

          BTW:俺不是“春迷”,請樓主不要神經(jīng)過敏對號入座。  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-21 17:40 鬼扯
          鬼扯  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-21 21:01 建議找本xml的入門讀物
          倒!!!!!!居然直接把UTF-8寫到程序里面去了............
          mmwy的是正解,你要在xml中使用UTF-8字符,至少這個文件的編碼格式.否則,就只能使用這種硬編碼方式
            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-21 21:02 建議找本xml的入門讀物
          上文漏字,應(yīng)該是:
          至少在開頭指明這個文件的編碼格式

            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-21 22:10 也來侃侃
            有點意思,難道上面幾位就是大峽說的傳說中的春迷嗎?我剛才試了一下,確實有這個問題,要是Spring的開發(fā)小組看了也一定會虛心改正的啊,我們在這里沒必要為此受不了啊。
            BTW:“建議找本xml的入門讀物”,不懂就別裝了好不,這個不關(guān)什么XML格式的,是JDK中URL類的問題,希望多看到這樣的文章!
            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-21 23:07 建議找本xml的入門讀物

          你也知道是jdk中的URL類的問題。URL.getFile()不是在默認(rèn)情況下返回經(jīng)過URL編碼后的字符,而是所有情況下都這樣。
          把UTF-8硬編碼到程序里面,windows系統(tǒng)下是搞定了,因為windows的內(nèi)碼天生就是unicode的,別的系統(tǒng)下面試一試?
            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-21 23:36 也來侃侃
          @建議找本xml的入門讀物
          我看作者說確實也是Spring項目問題之一啊,難道你不覺得嗎?沒必須跑題吧!  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 00:17 建議找本xml的入門讀物
          和spring其實不搭界。
          這個補(bǔ)丁不是應(yīng)當(dāng)spring來打,而是java消除平臺無關(guān)性的時候做的.像樓主那樣打補(bǔ)丁,只能說是拆了西墻補(bǔ)東墻.
          打個比方,某家前門鎖壞了,隔三岔五進(jìn)小偷,沒辦法,只能把后門的鎖拆下來裝到前門。  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 00:42 也來侃侃
          我又來了,PS“建議找本xml的入門讀物”,我看作者的意思只是舉了一個例子吧,“拆了西墻補(bǔ)東墻. ”,不補(bǔ)連運行都運行不起,不管怎么說,補(bǔ)了比沒補(bǔ)好。當(dāng)然,你要能否拿出一個不需要補(bǔ)的完美方案來呢,有的話不妨拿出來我也學(xué)習(xí)學(xué)習(xí)。謝謝作者讓我長了見識,剛剛特意去他們網(wǎng)站看了一下,發(fā)現(xiàn)這是一個很有活力的團(tuán)隊,東西有點多,過幾天再好好看看。這里希望你也能拿出一些東西來讓我長點見識。
            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 09:52 建議找本xml的入門讀物
          需要解決方案么?
          搞那么多中文目錄干嗎? 就像以前有個哥們自己搞了一個什么中文編程一樣.自己找切么。
          寫程序就寫程序好了,玩那么多花活干什么. 英文不認(rèn)識就好好去補(bǔ)英文。也許有人更加喜歡這種:
          如果 五 大于 三 那么
          打印 "你好,世界"
          風(fēng)格的?那就好好的去玩自己的輪子吧。那也是一片天地。
            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 10:04 建議找本xml的入門讀物
          難道有活力就能改變干事情的性質(zhì)。這個圈子里面最有活力的就是搞流氓軟件的了。
            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 10:06 也來侃侃
          @建議找本xml的入門讀物

            在我看來這個例子沒有一個萬能的解決方案的。但作者的例子應(yīng)該能在windows下的任意操作系統(tǒng)下執(zhí)行,比Spring項目小組的寫法有所改進(jìn)。另外,不知道是不是我們跑題了?好像人家是談中文問題吧。
            對了,樓上的朋友那么瞧不起中文,不考慮中文用戶的感受,不知道你孩子生下來是先教他喊“Dad”呢,還是喊“爸爸”,感覺樓上的很清高啊。
            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 10:48 楊一
          樓主在指出中文問題這件事情上是對的,大家就事論事。但總覺得把中文問題歸罪給spring有些牽強(qiáng),我舉個例子:在工業(yè)革命早期,工人被剝削,不考慮推翻資本家,卻去砸機(jī)器。如果你承認(rèn)了狗皇帝,就不要抱怨地方官  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 11:30 建議找本xml的入門讀物
          別。選擇性失明就是你的不對了
          樓主明明談的是spring項目中的中文問題,而且把這個歸因于spring的bug,你倒好,直接泛化為中文問題了。
          作為一般使用者,面對中文自然是合理要求,但作為程序員和系統(tǒng)開發(fā)者/管理者,在可控范圍內(nèi)弄出一大堆中文目錄,那就是自己找切。怨不得別人。
          還有,那個平臺相關(guān)性是比一致性失敗更加危險的動作。其實,要想只windows下玩,.NET是不二之選,玩java豈不是多此一舉  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 14:23 春迷沒救了
          @楊一,@建議找本xml的入門讀物
            我覺得他是指出了Spring中一些不嚴(yán)謹(jǐn)?shù)牡胤?。另?我不完全贊同windows下.net是不二的選擇這個說法,開發(fā)80%還是在windows下吧。好像也沒有針對Spring吧,不是還有幾篇嗎?

            好好看看作者開篇語里面的原話,怎么你就只會為Spring辯護(hù)呢,我終于知道作者為什么要不厭其煩的提“春迷”,在我看來,春迷不是一群人,更像一種現(xiàn)象了!
            我?guī)湍銈冋^來:
            “這個主題會在我以后的工作遇到一個寫一個,不斷完善?!爸形膯栴}沒商量”系列文章的目的除了把本人在工作及學(xué)習(xí)過程中遇到的一些中文問題拿來跟大家交流以外,一個重要目的是想拋磚引玉,希望能搜集更多的困擾我們的中文問題,歡迎大家把工作中所遇到的無法解決的中文問題提交到這個主題里面。”
            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 15:51 建議找本xml的入門讀物
          easyjf的難道只會扣帽子,naive,不要搞得象紅衛(wèi)兵那樣。
          前面的哥們不是說了么,這個和spring沒關(guān)系,只是jdk的問題。我看樓主的標(biāo)題不如改成"XXXX沒商量"之jdk的bug,然后立志實現(xiàn)一個jdk,更牛氣了
          在windows下玩就是在windows下開發(fā)?別會錯意了。在哪兒開發(fā)不重要,關(guān)鍵看部署。

            回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 16:12 春迷沒救了
          我這么快也成什么easyjf的了,easyjf是作者所在的網(wǎng)站吧,看來easyjf還真可憐.......不知道樓上又是哪個jf的呢?  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 19:39 溫柔一刀
          路過  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 20:08 建議找本xml的入門讀物
          敢情easyjf們把貼標(biāo)簽當(dāng)作自己的專利了?
          貼別人的時候那么爽,被別人貼的時候就開始叫屈了,也太沒品了巴  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 20:15 春迷沒救了
          @建議找本xml的入門讀物
          不想跟你說了,免得連累人家easyjf,建議自己好好去csdn看看春迷們的的精彩表演吧,還嫌不夠丟人!  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-22 23:11 建議找本xml的入門讀物
          hehe.現(xiàn)在想撇清?來不及了。本來就是easyjf的馬甲么,還連累不連累的。
          就easyjf那個名聲,早就那樣了,難道還在乎誰比誰更丟人?  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-24 00:10 旁觀者
          說個跑題的話,很多人并不懷疑樓主的水平,你提出問題,并對自己的項目作出解決方案本身無可厚非,但是別人就不能質(zhì)疑你結(jié)論嗎?技術(shù)討論是為了共同進(jìn)步,不是辯論比賽,要拼命攻擊對方表達(dá)中出現(xiàn)的漏洞,從而分出輸贏的結(jié)果,技術(shù)并不是二元化的,不是非此即彼的。  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-08-30 15:43 little4
          daxia總是能扔出搞笑的命題
          芙蓉xiaxia  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-09-06 12:10 路過
          “石頭”語:素質(zhì),注意素質(zhì)  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-09-07 19:28 黃鵬霄
          看來春迷確實存在啊  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-09-09 09:20 123
          唉,春迷的存在,是中國軟件業(yè)的悲哀。  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2006-10-04 12:10 啥叫春迷啊?
          難道就只有春迷嗎?中國軟件業(yè)很悲哀嗎?兄弟是做那一方面開發(fā)的?。窟@么偉大,能拯救中國軟件業(yè)嗎?  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2007-01-12 10:16 王彥鋒的技術(shù)實踐
          看完無語,大家都是搞技術(shù)的,為一些不著調(diào)的東東爭論,有點不值得。取其精華,去其糟粕,然也。  回復(fù)  更多評論
            
          # re: “中文問題沒商量”之Spring2.0項目中的Bug一例  2007-03-17 12:52 BeanSoft
          早點控制農(nóng)民比例為10%, 實現(xiàn)工業(yè)化才是王道....我就看著2050年能不能達(dá)到50%農(nóng)民了.  回復(fù)  更多評論
            

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 固始县| 淮南市| 万山特区| 泽库县| 黔东| 黄骅市| 营口市| 通辽市| 尖扎县| 潮安县| 进贤县| 阳曲县| 巴青县| 肇东市| 通渭县| 鹤峰县| 新乐市| 广宁县| 定州市| 利辛县| 宝兴县| 徐水县| 抚顺县| 常山县| 兴国县| 福贡县| 楚雄市| 延安市| 林周县| 拉萨市| 绿春县| 双流县| 内江市| 靖西县| 洪江市| 正蓝旗| 秦安县| 宣汉县| 连云港市| 林西县| 安多县|