<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    love fish大鵬一曰同風(fēng)起,扶搖直上九萬(wàn)里

    常用鏈接

    統(tǒng)計(jì)

    積分與排名

    friends

    link

    最新評(píng)論

    Spring2.0項(xiàng)目中的中文問(wèn)題

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


      詳細(xì)錯(cuò)誤信息:
    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)

    測(cè)試代碼:
    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");
    ?}
    ?
    出錯(cuò)原因:
      這個(gè)問(wèn)題是筆者在參與開(kāi)發(fā)EasyJWeb及EasyDBO框架中遇到過(guò)的問(wèn)題,因此很容易就找到了問(wèn)題的所在。Java的Class.getResource(name)返回的是一個(gè)URL,而URL.getFile默認(rèn)情況下返回的是經(jīng)過(guò)URL編碼后的字符,會(huì)把中文等特殊字符變成類似%e6的形式。而一般io構(gòu)造路徑是沒(méi)有自動(dòng)解碼功能的,所以在中文路徑下要出現(xiàn)錯(cuò)誤。
    ?
    解決辦法:
      在使用URL.getFile返回的路徑時(shí),使用前需要使用java.net.URLDecoder對(duì)路徑進(jìn)行一次解碼操作。修改后的且能通過(guò)測(cè)試的方法如下:
    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開(kāi)源項(xiàng)目的開(kāi)發(fā)團(tuán)隊(duì)中,除了一些喜歡跟在Rod大叔的屁股后面唱中文版贊歌的“春迷”以外,當(dāng)前似乎還沒(méi)有中國(guó)人參與到正式的Spring開(kāi)發(fā)小組中。因此,也許沒(méi)有在中文路徑下運(yùn)行過(guò)測(cè)試用例,導(dǎo)致我這樣的Spring初學(xué)者一不小心就遇上這樣的問(wèn)題。
      問(wèn)題是解決了,但是卻是一種比較罕見(jiàn)的方式,而且Spring開(kāi)發(fā)小組事先也許沒(méi)有預(yù)想到或是故意忽略掉的問(wèn)題,因此,可以稱得上是“沒(méi)商量”的中文問(wèn)題。

    posted on 2007-01-11 15:10 liaojiyong 閱讀(431) 評(píng)論(0)  編輯  收藏 所屬分類: Spring

    主站蜘蛛池模板: 亚洲国产精品成人一区| 国产亚洲无线码一区二区| 亚洲国产精品一区第二页| 亚洲国产成人在线视频| 一级毛片a免费播放王色电影| 无码人妻精品中文字幕免费 | 女人被男人躁的女爽免费视频| 亚洲日韩精品无码专区网站 | 亚洲男人天堂2018av| 国产美女视频免费观看的网站| 1000部拍拍拍18免费网站| 亚洲国产午夜福利在线播放| 亚洲人成综合在线播放| 黄色网页在线免费观看| 思思99re66在线精品免费观看| 亚洲国产精品一区二区第一页| 亚洲aⅴ无码专区在线观看| 香港a毛片免费观看| 亚洲国产成人影院播放| 亚洲制服丝袜第一页| AAA日本高清在线播放免费观看| 国产成人免费永久播放视频平台 | 亚洲成年人在线观看| 免费又黄又爽又猛大片午夜| 国产高清不卡免费在线| 2048亚洲精品国产| 亚洲国产精品无码观看久久| 久久精品一本到99热免费| 久久久久无码专区亚洲av| 亚洲另类无码专区首页| 3d成人免费动漫在线观看| 国产精品亚洲玖玖玖在线观看| 亚洲日产乱码一二三区别| 久久久久免费看成人影片| 老司机亚洲精品影视www| 妇女自拍偷自拍亚洲精品| 成年免费大片黄在线观看岛国| 久久精品国产精品亚洲蜜月| 人与动性xxxxx免费| 四虎免费永久在线播放| 亚洲欧美国产国产一区二区三区|