顯示具有 Java 標籤的文章。 顯示所有文章
顯示具有 Java 標籤的文章。 顯示所有文章

2011年10月3日 星期一

XSLT及Eclipse Tutorial

  1. 更新Eclipse,安裝 Helios下的Eclipse XSL Developer Tools
    image
  2. 安裝完後,Eclipse會要求重啟。重新啟動完Eclipse後,建立一個新的Java Project
  3. 在新建的Java Project下新增一個files的目錄
  4. 在files目錄下, 建立source.xml,內容如下
    <?xml version="1.0"?>
    <!-- This is a comment -->
    <people>
    <address type="personal">
    <name>Lars </name>
    <street> Test </street>
    <telephon number="0123" />
    </address>
    <address type="personal">
    <name>Joe </name>
    <street> Test2 </street>
    <telephon number="1234" />
    </address>
    <address type="business">
    <name>Jim</name>
    <street> Test3 </street>
    <telephon number="2345" />
    </address>
    </people>
  5. 在同一目錄下,建立一個transform2.xsl檔案,內容如下
  6. <?xml version="1.0"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        version="1.0">

        <xsl:output method="xml" />

        <!-- Copy everything -->
        <xsl:template match="*">
            <xsl:copy>
                <xsl:copy-of select="@*" />
                <xsl:apply-templates />
            </xsl:copy>
        </xsl:template>

        <!-- Do some adjustments for the address -->
        <xsl:template match="address">
            <xsl:element name="place-where-person-live">
                <xsl:apply-templates />
            </xsl:element>
        </xsl:template>

        <!-- Put the name in a <hubba> tag -->
        <xsl:template match="name">
            <xsl:element name="name">
                <hubba>
                    <xsl:apply-templates />
                </hubba>
            </xsl:element>
        </xsl:template>
    </xsl:stylesheet>

  7. 於Project explore中,對新建立的transform2.xsl按右鍵—>Run As—>XSL Transformation
    image
  8. Eclipse會跳出一個視窗,選取要轉換的XML檔案
    image 
  9. 轉換的結果會存在同目錄下的 source.out.xml檔案內

翻譯自 http://www.vogella.de/articles/XSLT/article.html

2011年9月29日 星期四

取消Java mixed components warning

在Java 1.6以後,Sun加入了新的安全機制,會檢視一個有signed過的程式是否摻雜unsigned的component。遇到這樣的情況,browser預設會跳出如下視窗,讓使用者確認。
這個情況下,若是按Yes,這個應用程式將會無法正常執行。所以如相信這個應用程式,必需選擇No。

 

若不想出現這個視窗,可以點選控制台-->Java,開啟Java主控台。然後選取進階-->安全-->混合程式碼。下面有四個選項,預設是選第一個 啟用 - 必要程顯示警告。若想直接執行類似的元件而不要跳出上面的視窗,可以如下圖所示,選取啟用-隱藏警告並在防護下執行 

image

 


資料來源:http://download.oracle.com/javase/6/docs/technotes/guides/jweb/mixed_code.html#manifest

2011年9月17日 星期六

如何安裝EMF

依照http://www.vogella.de/articles/EclipseEMF/article.html#emfinstallation 連結的介紹,只要裝Ecore Tools SDK及EMF-Eclipse Modeling Framework SDK。然而在安裝時卻遇到缺乏core-platform的訊息。經Google了一下,發現要先裝http://www.eclipse.org/eclipse/platform-core/downloads.php#updates這個東西後,就可以安裝所要的EMF元件了

2011年1月6日 星期四

使用JAXB Parse XML

轉載自:http://www.javaworld.com.tw/jute/post/view?bid=19&id=5482&sty=1&tpg=1&age=-1

相信正常一點的程式設計人員都覺得XML很煩
如果你是技術狂,那就算了,當我沒說 :p
通常我們只是想要讀一個能跨平台的文件
幹嘛要去了解一堆有的沒的定義及如何parse文件的東東
為什麼不讓這些煩人的事情包裝起來
我們只要關心我讀進來的資料該如何處理
處理完再把它順利的寫回就好哩
這個念頭相信在大家的心中都出現過
所以恭喜大家,前人已經幫我們種好樹了
大家趕快到樹下乘涼吧
JAXB就是我們要的東東
Java Architecture for XML Binding (JAXB)
簡單的講就是提供了一個自動在xml文件與java物件mapping的機制
所以我們不用去了解啥米弟踢弟、死雞碼該如何定義
也不用學習如何去吹薩克斯風或挖洞給自已跳
首先要下載Java Web Services Developer Pack
其中便包含有JAXB的實作套件
接下來要設定相關的環境變數
範例如下:
set JAVA_HOME=your_jdk_home_path
set JWSDP_HOME=your_jwsdp_home_path
set JAXB_HOME=%JWSDP_HOME%\jaxb-1.0
set JAXB_LIBS=%JAXB_HOME%\lib
set JAXP_LIBS=%JWSDP_HOME%\jaxp-1.2.2\lib
set JWSDP_LIBS=%JWSDP_HOME%\jwsdp-shared\lib
set PATH=%JAXB_HOME%\bin;%JWSDP_HOME%\jwsdpshared\bin;%PATH%
以下請自行連結為一行
set CLASSPATH=%JAXB_LIBS%\jaxb-api.jar;
%JAXB_LIBS%\jaxb-ri.jar;%JAXB_LIBS%\jaxb-xjc.jar;
%JAXB_LIBS%\jaxb-libs.jar;
%JAXP_LIBS%\jaxb-api.jar;
%JAXP_LIBS%\endorsed\xercesImpl.jar;
%JAXP_LIBS%\endorsed\xalan.jar;
%JAXP_LIBS%\endorsed\sax.jar;
%JAXP_LIBS%\endorsed\dom.jar;
%JWSDP_LIBS%\jax-qname.jar;
%JWSDP_LIBS%\namespace.jar;.;
接下來我們一步步來看該如何使用JAXB
首先要先綁架xml schema
透過JAXB所提供的工具xjc
可產生一組用以描述xml schema的Java介面及實作類別
xjc指令格式如下:
xjc -p <generated_package> -d <target_directory> xml_schema
例如:
xjc -p test.jaxb -d work_area books.xsd
接著要編譯所產生的介面及實作類別
javac test/jaxb/*.java test/jaxb/impl/*.java
再來就可試著透過Unmarshal的方式來取得xml文件裡的資料
可以在測試程式中撰寫類似以下程式碼
JAXBContext jc = JAXBContext.newInstance("test.jaxb");
Unmarshaller unmarshaller = jc.createUnmarshaller();
Collection collection =
(Collection)unmarshaller.unmarshal(new File( "books.xml"));
CollectionType.BooksType booksType = collection.getBooks();
List bookList = booksType.getBook();
然後就可以取出xml文件裡的資料
for( int i = 0; i < bookList.size();i++ ) {
test.jaxb.BookType book =(test.jaxb.BookType) bookList.get(i);
System.out.println("Item id: " + book.getItemId());
System.out.println("Book Name: " + book.getName().trim());
}
另外也可利用
unmarshaller.setValidating(true);
來指定是否要在Unmarshal的同時來驗證此份xml文件格式正確與否
再來就可試著透過Marshal的方式來將資料寫到所指定的xml文件裡
可以在測試程式中撰寫類似以下程式碼
JAXBContext jaxbContext = JAXBContext.newInstance("test.jaxb");
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT ,
new Boolean(true));
ObjectFactory objFactory = new ObjectFactory();
Collection collection= (Collection) objFactory.createCollection();
Collection.BooksType booksType = objFactory.
createCollectionTypeBooksType();
List bookList = booksType.getBook();
BookType book = objFactory.createBookType();
book.setItemId("777");
book.setName("JAXB簡介");
然後就可以將資料寫入我們所指定的xml文件裡
bookList.add(book);
collection.setBooks(booksType);
marshaller.marshal(collection,
new FileOutputStream("jaxb_test.xml"));
另外也可利用Validator類別來驗證此份xml文件格式正確與否
範例如下:
Validator validator = jaxbContext.createValidator();
validator.validate(collection));
若您還想知道更多關於JAXB使用上的細節,請上官方網站喔 ^_^
http://java.sun.com/xml/jaxb/
*********************無版權宣告*********************
版權沒有,歡迎轉載
轉載時請保留作者姓名及此份宣告
本文是為了方便新手入門學習
歡迎大家給小弟指正或補充更多詳盡的資料
my email: iampoya@pchome.com.tw
本文同步刊於
http://www.javaworld.com.tw
http://www.midicat.com/poya/ezjava

2010年11月10日 星期三

分析Java Dump (使用IBM Java)

首先,要產生Dump檔案。在執行Java.exe時,設定-Xdump即可設定所要產生的dump檔案,詳細設定如此連結

例如
-Xdump:heap:events=load,opts=PHD+CLASSIC

在eclipse環境中,要做此設定時,首先需把Project所需的JRE設為IBM的JRE

image 

image

之後,開啟Run Configuration

image

在Arguments tab下的VM arguments處,設定產生Dump之參數

image

2010年9月14日 星期二

如何Parse URL的Query String

資料來源:http://www.coderanch.com/t/383310/java/java/parse-url-query-string-parameter

Java的String有 split()這個類似 perl的分割字串的方法,使用它來Parse URL的sample程式碼如下

1、先寫好getQueryMap

  1. public static Map<String, String> getQueryMap(String query) 
  2.     String[] params = query.split("&"); 
  3.     Map<String, String> map = new HashMap<String, String>(); 
  4. for (String param : params) 
  5.     { 
  6.         String name = param.split("=")[0]; 
  7.         String value = param.split("=")[1]; 
  8.         map.put(name, value); 
  9.     } 
  10. return map; 

2、在需要的地方呼叫getQueryMap()這個方法

  1. String query = url.getQuery(); 
  2. Map<String, String> map = getQueryMap(query); 
  3. Set<String> keys = map.keySet(); 
  4. for (String key : keys) 
  5.    System.out.println("Name=" + key); 
  6.    System.out.println("Value=" + map.get(key)); 

2010年9月1日 星期三

Java Static Class的用處

資料來源:http://www.javaworld.com/javaworld/javaqa/1999-08/01-qa-static2.html?page=1

不錯的文章,原來java的class還有分top-level class、anonymous class、member class及nested top-level class這四種。其中只有member class可以被宣告成static。member class被宣告成static之前,只能為包覆他的class產生的物件所使用;而宣告成static之後,就可以和包覆它的外部class一樣,被其它的class產生的物件所使用。declare成 static的member class就變成了nested top-level class了

2010年8月28日 星期六

Java Persistence Framework比較

資料來源:http://www.javaworld.com/javaworld/jw-07-2008/jw-07-orm-comparison.html

目前Java關於persistence的Framework主要有iBATIS、JPA和Hibernate三種,這篇文章簡單地介紹了如何選擇這三種framework來做persistence的處理。

他們之間的主要差異在於,iBAITS並沒有提供完整的O/R mapping,它所做的是Object與 SQL return result之間的mapping。而且iBAITS運作時,是直接使用內嵌的SQL來查詢資料庫,所以Programmer必需直接撰寫SQL,且必需綁定在資料庫伺服器的提供商。不過這種設計,programmer可以直接掌控SQL,所以能不斷tune出效能最好的SQL

Hibernate及JPA都有完整的O/R mapping的功能,它們都不直接採用SQL,而是有自己的查詢語言(雖然長得很像SQL),在執行時期再動態產生SQL進行資料庫查詢。也因為如此,使用其所開發的程式,不會有綁定在某家資料庫系統的問題。相較於Hibernate,JPA提供的是一組標準,任何provider都可以去實作JPA標準(如Apache的 OpenJPA),因此實際執行的效能及一些特性就必需看各家JPA provider實作的程度如何;而Hibernate本身就是一個實作,算是目前滿活躍的一個framework,有許多人在使用及維護。

最後iBAITS支援.NET、及Ruby on Rails;Hibernate支援Java及.NET;而JPA(Java Persistence API)當然只支援Java

Features iBATIS Hibernate JPA
Simplicity Best Good Good
Complete ORM solution Average Best Best
Adaptability to data model changes Good Average Average
Complexity Best Average Average
Dependence on SQL Good Average Average
Performance Best Best N/A *
Portability across different relational databases Average Best N/A *
Portability to non-Java platforms Best Good Not Supported
Community support and documentation Average Good Good