ravenix

          魚如何控制自己的呼吸
          posts - 7, comments - 3, trackbacks - 0, articles - 0
            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          2005年8月18日

          Eclipse 應(yīng)用可以使用Java Web Start部署,實現(xiàn)Rich Client。

          這要求把所有的插件打包成獨立的jar,并且要簽署它。

          如果要用到別人開發(fā)的java庫,就要利用eclipse提供的Create a plug-in project from existing JAR archives 把它做成 eclipse plugin。

          Apache Jakarta有許多項目使用了commons-logging來寫log。如果用到了這樣的項目,你也需要把commons-logging做成一個 plugin。但是commons-logging在使用eclispe plugin包裝并使用Java Web Start部署時,它會拋出異常

          LogConfigurationException : Invalid class loader hierarchy. You have more than one version of org.apache.commons.logging.Log visible, which is not allowed.

          究其原因,是JCL(Jakarta Commons Logging)中一直存在的classloader問題。

          簡單來說,JCL使用調(diào)用者的classloader加載Log接口,這是最常見的類載入方法;但是加載具體的實現(xiàn)類是,用的是thread context classloader。

          通常情況下,這兩個classloader是同一個。但是Eclipse有一套插件類加載機制,每個插件使用不同的 classloader。在這個例子中,加載Log接口是EclipseClassLoader,加載Log實現(xiàn)類的thread context classloader是JNLPClassLoader,它們并不相同。問題就來了,用不同classloader加載的類被認為是無關(guān)的,所以JCL 的實現(xiàn)類不能賦給Log接口類,就會拋出那個異常。

          關(guān)于JCL classloader問題更詳細解釋,請看log4j的創(chuàng)始人之一,Ceki Gülcü寫的文章

          為了解決這個問題,我啟動了一個項目,jcleclipse -- 重寫了JCL,固定實現(xiàn)為把所有的log寫到eclipse自己的ILog里。這樣就不用要求用戶在某個指定的地方建目錄來存儲log。

          jcleclipse項目主頁 http://jcleclipse.sourceforge.net/
          jcleclipse項目概要 http://sourceforge.net/projects/jcleclipse

          posted @ 2005-09-09 14:30 ravenix 閱讀(1260) | 評論 (1)編輯 收藏

          如果用digister處理的xml里包含了外部dtd指定,即在!DOCTYPE中用PUBLIC指定外部dtd,即使使用了

          digester.setValidating(false);

          底層的sax解析器xerces仍然會去指定的地址去加載DTD,特別地,如果指定的地址無法獲得DTD,就會拋出異常:
          SAXException: The markup declarations contained or pointed to by the document type declaration must be well-formed

          為了避免這個問題,可以使用這樣的語句:
          digester.setValidating(false);
          digester.setFeature(
          "http://apache.org/xml/features/nonvalidating/load-external-dtd",false);

          當(dāng)然這個設(shè)置只有在底層的sax解析器是xerces才有效。如果你使用的是其它的sax解析器,請參考解析器的文檔。

          posted @ 2005-08-30 15:57 ravenix 閱讀(1064) | 評論 (0)編輯 收藏

          目前所知道的
          apache xerces 支持中文元素
          saxon自帶的aelfred 不支持

          posted @ 2005-08-26 16:04 ravenix 閱讀(502) | 評論 (0)編輯 收藏

          盡管有一些不足,wutka dtdparser 仍然是使用最廣泛的java dtd dom解析器。

          其它可用的java dtd parser有 Ronald Bourret DTD ParserMatra DTD parser

          要在DTD中使用中文,必須要在dtd文件的第一行寫上

          <?xml version="1.0" encoding="UTF-8"?>

          并且將dtd文件以utf-8格式保存。別的編碼格式也可以試試,但我不想冒險。

          dtdparser不使用這個encoding指示來解析DTD,我們只能自己想辦法,修改它的代碼。

          dtdparser有這些構(gòu)造器(省略了帶trace的)

          DTDParser(java.io.File in)
          DTDParser(java.io.Reader in)
          DTDParser(java.net.URL in)

          其中以Reader為參數(shù)的沒有編碼問題,因為reader本身已經(jīng)指定了字符集。

          以File為參數(shù)的構(gòu)造器內(nèi)部使用了new FileReader(in),這個方式使用系統(tǒng)默認字符集,不要用它,可以用FileInputStream和InputStreamReader來指定字符集,傳遞給以Reader為參數(shù)的構(gòu)造器。

          以URL為參數(shù)的構(gòu)造器內(nèi)部使用了new InputStreamReader(in.openStream()),沒有指定字符集,我們可以給它增加一個帶有String charsetName參數(shù)的構(gòu)造器,內(nèi)部調(diào)用new InputStreamReader(in.openStream(), charsetName)

          posted @ 2005-08-22 21:02 ravenix 閱讀(1358) | 評論 (1)編輯 收藏

          w3c CSS2規(guī)范中明確指出,在樣式定義中要使用unicode字符,必須用轉(zhuǎn)義方式

          unicode的寫法如下

          unicode 	\\[0-9a-f]{1,6}[ \n\r\t\f]?

          必須以反斜線開頭,后面跟1到6個16進制字符(0-9a-f)來表示該字符的unicode碼,字符的后面可以附加空格,制表符,換行或回車。

          舉例來說,樣式“標(biāo)題”應(yīng)該寫成\6807\9898

          java工具native2ascii可以用來查看字符串的unicode碼,注意在CSS里反斜線后面不寫u

          另外要注意的是,用sac flute來解析CSS的時候,轉(zhuǎn)義字串的末尾如果是回車的話,一定要附加空格,否則會被解釋成“標(biāo)題\n”

          CSS里注釋是可以寫中文的,用/* */包圍起來就好了。
          帶有中文的CSS最好用UTF-8編碼保存,并且在CSS的第一行寫上
          @charset "UTF-8";

          CSS規(guī)范并沒有規(guī)定解析器必須支持何種編碼,但是UTF-8是被普遍支持的,如果你的解析器支持多語言編碼的話。

          posted @ 2005-08-22 17:31 ravenix 閱讀(781) | 評論 (0)編輯 收藏

          w3c的sac推薦了幾個java實現(xiàn): flute 1.3, batik-css和cssparser

          我用簡單的CSS測試了flute和batik,flute功能正常,但是batik會拋出IllegalStateException。具體原因沒有仔細研究。

          那位高手成功用過batik的css解析器,務(wù)請告訴我,不勝感謝。

          posted @ 2005-08-21 18:56 ravenix 閱讀(921) | 評論 (0)編輯 收藏

          今天用FOP的TTFReader工具創(chuàng)建字體影射文件,結(jié)果報FileNotFoundException

          D:\fop-0.20.5>ttfreader.bat c:\WINDOWS\Fonts\simfang.ttf simfang.xml
          TTF Reader v1.1.1

          Reading c:\WINDOWS\Fonts\simfang.ttf...

          Number of glyphs in font: 7580
          Postscript format 3
          Creating xml font file...

          Creating CID encoded metrics
          Writing xml font file simfang.xml...

          javax.xml.transform.TransformerException: java.io.FileNotFoundException: file:\D
          :\fop-0.20.5\simfang.xml (文件名、目錄名或卷標(biāo)語法不正確。)
          at org.apache.xalan.transformer.TransformerIdentityImpl.createResultCont
          entHandler(TransformerIdentityImpl.java:263)
          at org.apache.xalan.transformer.TransformerIdentityImpl.transform(Transf
          ormerIdentityImpl.java:296)
          at org.apache.fop.fonts.apps.TTFReader.writeFontXML(TTFReader.java:243)
          at org.apache.fop.fonts.apps.TTFReader.main(TTFReader.java:196)
          Caused by: java.io.FileNotFoundException: file:\D:\fop-0.20.5\simfang.xml (文件
          名、目錄名或卷標(biāo)語法不正確。)
          at java.io.FileOutputStream.open(Native Method)
          at java.io.FileOutputStream.(Unknown Source)
          at java.io.FileOutputStream.(Unknown Source)
          at org.apache.xalan.transformer.TransformerIdentityImpl.createResultCont
          entHandler(TransformerIdentityImpl.java:253)
          ... 3 more
          ---------
          java.io.FileNotFoundException: file:\D:\fop-0.20.5\simfang.xml (文件名、目錄名或
          卷標(biāo)語法不正確。)
          at java.io.FileOutputStream.open(Native Method)
          at java.io.FileOutputStream.(Unknown Source)
          at java.io.FileOutputStream.(Unknown Source)
          at org.apache.xalan.transformer.TransformerIdentityImpl.createResultCont
          entHandler(TransformerIdentityImpl.java:253)
          at org.apache.xalan.transformer.TransformerIdentityImpl.transform(Transf
          ormerIdentityImpl.java:296)
          at org.apache.fop.fonts.apps.TTFReader.writeFontXML(TTFReader.java:243)
          at org.apache.fop.fonts.apps.TTFReader.main(TTFReader.java:196)
          This font contains no embedding license restrictions

          在google上搜索到apache的郵件列表里有相關(guān)討論,說是FOP只能在jdk 1.4上運行。

          jdk1.5內(nèi)置了xerces和xalan,這是和1.4不同的地方。

          我修改了ttfreader.bat,把CLASSPATH里xml-apis.jar,xercesImpl-2.2.1.jar,xalan-2.4.1.jar注釋掉,再運行,成功!

          posted @ 2005-08-18 13:54 ravenix 閱讀(1300) | 評論 (1)編輯 收藏

          主站蜘蛛池模板: 曲水县| 桂平市| 威远县| 乌鲁木齐县| 旬阳县| 正镶白旗| 阳谷县| 武川县| 阜宁县| 那坡县| 耒阳市| 安义县| 东方市| 南雄市| 嘉祥县| 平原县| 车致| 九龙坡区| 广东省| 湟中县| 濮阳县| 凤城市| 萨迦县| 兰溪市| 延庆县| 宾阳县| 容城县| 会东县| 宁武县| 中江县| 酉阳| 泰宁县| 河源市| 辰溪县| 堆龙德庆县| 雷波县| 开阳县| 莆田市| 夏津县| 芮城县| 莎车县|