天天看點

Apress新書迎接JDK 6.0(1)--總述及XML的新标準

    作者:江南白衣 

   《Java.6.Platform.Revealed》  Apress 2006.Jul 出版,不得不佩服國外出版社的效率。在ROR步步進逼,風聲雨聲的時候,八卦一下Java 6有什麼新功能對Java程式員還是很好的。此書易讀,代碼清晰,239頁,大約幾個小時就能翻完。

       JDK6的更新大體可以分為幾大類:

       一、JavaEE 5中新XML,WebService标準的JavaSE固化,如StAX、JAXB2、JSR181等。

       二、JSR223 Script的引入,可在Java代碼中運作Javascript, Ruby, Php,對開發人員刺激較大。

       三、JDBC 4,開始直接支援輕度的ORM,對XML支援增強,但其實要等各jdbc driver廠商的實作。

       四、Compiler API及Pluggable Annocation,對IDE開發廠商幫助較大 ,比如即時編譯。

               而Common Annotations對普通開發人員意義更大一點。

       五、每次更新必有的Swing、Collections、 IO 的小更新。 

      JDK6 新特性很多文章都有提,還是實實在在的具體代碼更讓人放心。

一、XML新标準

JSR 105: XML Digital Signature

JSR 173: Streaming API for XML

JSR 222: JAXB 2.0

1.StAX--Streaming API,一種在Dom,Sax之外号稱完美的XML處理方式

大家都知道DOM雖好,但狂吃記憶體。

Sax并不把全部内容儲存在自己的記憶體裡,而是由Sax架構不斷調用處理程式實作的OnElementBegin()等函數,由架構推送内容,處理程式通過回調函數處理所有内容,Sax将XML内容全部推給處理程式後就下班休息。是以稱為推模式。

而StAX既然被稱為拉模式,通路資料的方法其實與Sax差不多,但與隻能被動實作回調函數的不能進行暫停和跳過等操控的Sax不同,StAX是主動用Iterator API循環去讀取XML的,控制權完全在處理程式手中。

XMLInputFactory xmlif  =  XMLInputFactory.newInstance();

XMLEventReader xmler  =  xmlif.createXMLEventReader( new  FileReader( " points.xml " ));

XMLEvent  event ;

while  (xmler.hasNext()) {

   event   =  xmler.nextEvent();

   if  ( event .isStartElement()) {

    console.printf( " %s " ,  event .asStartElement().getName());

  }  else   if  ( event .isCharacters()) {

    console.printf( " %s " ,  event .asCharacters().getData());

  }

}

2.JAXB2使用Annotation定義實作 Java->xml 的生成

  隻要在POJO裡聲明了@XmlRootElement,JAXB2就會自動進行綁定。其他标簽還有一堆,大家自己看書的138頁。看sample比其他的binding方案清爽了不少。

Pojo定義:

@XmlRootElement

private   static   class  Point ...{

int  x;

int  y;

// getter setter about x,y

}

生成XML的代碼:

Apress新書迎接JDK 6.0(1)--總述及XML的新标準

JAXBContext context  =  JAXBContext.newInstance(Point. class );

Apress新書迎接JDK 6.0(1)--總述及XML的新标準

Marshaller m  =  context.createMarshaller();

Apress新書迎接JDK 6.0(1)--總述及XML的新标準

Point p  =   new  Point( 3 ,  4 );

Apress新書迎接JDK 6.0(1)--總述及XML的新标準

m.marshal(p, System.out);

輸出結果:

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

< point >

< x > 3 </ x >

< y > 4 </ y >

</ point >

 XML Schema->Java Class

一個叫xjc的自帶工具負責編譯,如xjc course.xsd。

 3.xml加密簽名包

david.turing 會很關心,我一眼掃過去了,反正記得這功能已經由JDK的javax.xml.crypto package提供就行了。