Java關於xml的API

 簡單介紹一下Java關於xml的API,這樣大家看到了縮寫就知道是幹什麼的了。 
  1、JAXP(Java API for XML Parsing)

  2、JAXB(Java API for XML Binding)

  3、JAXM(Java API for XML Messaging)

  4、JAX-RPC(Java API for XML-RPC)

  1、JAXP定義了在Java中使用DOM, SAX,
XSLT的通用的接口。這樣在你的程序中你只要使用這些通用的接口,當你需要改變具體的實
現時候也不需要修改代碼。比如,你用的XSLT處理器太慢了,你想換一個,你不需要修改你
以前的代碼,只要修改一下JAXP的相關配置。(在後面我將詳細地介紹)作爲一個共同的接
口,JAXP也有所
謂的“最小公分母”效應,也就是說它支持的東西很有限。JAXP1.0支持XML1.0,XML
Namespace1.0,SAX1.0以及DOM level 1。而JAXP1.1增加了對SAX2.0,DOM level
2以及XSLT1.0的支持。很明顯如果你想使用Xalan的XPath相關的接口,JAXP就沒有支持,你
也只能將代碼綁定到特定的Xalan的API上了。

  這裏還要提一下JDOM,雖然它沒有實現JAXP,但是由於它使用的簡單性,還是很受歡迎
,並且成爲了JCP正式推薦的API。它也是一種樹狀的結構表現XML,在使用方法上要比w3c的
dom標準簡單易用的多。最新版本的JDOM在其內部已經開始使用JAXP的API,它會儘可能的去
調用JAXP的API?
綣恍芯褪褂米約旱哪蟈ML解析器Xerces,XSLT處理器Xalan。

  2、JAXB定義了Java數據對象和xml結構之間的一種雙向映射關係。這樣你就可以很方便
地將一個Java對象存儲爲一個xml文檔,也可以從一個xml文檔實例化一個Java對象。它的結
構是這樣子的:首先要有xml的dtd以及binding
schema(這個不是xml的schema,而是一個定義Java對象和xml結構之間映射關係xml文檔)
,通過這兩個文件JAXB就可以生成與xml文檔結構一致的Java源文件,編譯之後就可以很方
便地通過具體的xml文檔得到與xml結構一致的Java類(就是生成的那些類)unmarshalling
,反過來marshalli
ng也可以。

  它的缺點也很明顯,一旦xml的結構發生了改變,就要重新寫bindng schema以及重新生
成編譯Java類。

  sun的動作總是一如既往地慢,在JAXB出臺之前已經有了一些用於xml data binding的
框架,我們再來看看同樣也是做xml databinding但是並沒有實現JAXB的框架:

  一、Castor

  Castor不僅僅支持對XML的綁定,它還支持對LDAP對象,用OQL將SQL查詢映射爲對象,
以及對JDO的支持。與JAXB不同的是,它需要的僅僅是xml的Schema。通過xml的Schema來生
成相應的Java源代碼,編譯之後就可以marshalling和unmarshalling了。

  二、Zeus

  Zeus與Castor和JAXB相比,在class generation方面多做了些步驟,因此它可以支持多
種的約束關係,包括對DTD,XML Schema以及TREX等等的支持。不過目前該項目好像已經不
做了。

  三、Quick

  Quick也是一個非常靈活的框架,詳細的情況可以google一下。

  3、JAXM

  JAXM是爲SOAP通信提供訪問方法和傳輸機制的API。目前它支持SOAP1.1規範以及同步和
異步通信。JAXM定義了大量服務,JAXM的實現產品將會提供這些服務,使得開發者不用面對
複雜的通信系統。JAXM體系結構中包括兩個重要的組件:JAXM
Client和Provider。Client通常是作爲J2EE web或EJB容器的一部分,以提供你所寫的程序
訪問JAXM服務的能力。而Provider可以以不同的方式實現,主要負責發送和接收SOAP消息。
這樣你就可以直接地使用JAXM的API直接發送和接收SOAP消息。

  4、JAX-RPC

  JAX-RPC是通過xml進行遠程過程調用的Java API。它是基於SOAP技術的,使用SOAP作爲
底層的協議。這樣對於開發者來說,只有方法,參數,返回值是可見的,而底層的soap通信
都被隱藏起來了,開發人員不需要與之直接打交道。

  JAXM和JAX-RPC在Web Services方面有很重要的作用。

  補充: JAXP框架查找具體實現的步驟

  JDK1.4自帶的是JAXP的參考實現:Crimson的DOM, SAX解析器,Xalan的XSLT處理器。

  如果你想用其他的實現替代它們,那就必須瞭解JAXP框架查找實現的具體步驟:

  1、首先,算法會通過諸如javax.xml.transform.TranformerFactory這樣的系統屬性來
定位具體實現的類。你可以在命令行中直接指定:

java -Djavax.xml.transform.TransformerFactory=com.foo.ConcreteTransformer
YourApp

  ConcreteTransformer是實現了TransformerFactory的子類,如果你用的是ant,也可以
在build file中指定。

  同樣地有,javax.xml.parsers.document.uilderFactory和
javax.xml.parsers.SAXBuilderFactory屬性。

  2、接着,如果系統屬性中沒有指定,JAXP將會在JRE的目錄中查找
lib/jaxp.properties屬性文件,它像一般的properties文件一樣是由name=value組成的,
假設有如下的一行:

javax.xml.transform.TransformerFactory=com.foo.ConcreteTransformer

  那麼JAXP就會使用相應的TransformerFactory實現。

  在Java程序中,你可以通過如下的代碼獲得JRE所在的目錄:

String javaHomeDir = System.getProperty("java.home");

  不過要注意,如果是在一些IDE中使用,IDE會改變這個java.home的值,比如JBuilder

  3、如果jaxp.properties不存在或者沒有相應的值,那麼JAXP將會使用JAR文件的服務
提供體制來定位正確的子類。簡單地說,你可以在jar文件的META-INF/services目錄下新建
一個名爲javax.xml.transform.TransformerFactory的文件,這個文件中只有一行:
com.foo.ConcreteTrans
former就可以了。

  4、最後,如果上面3步都沒有找到任何具體的實現,JAXP就會使用缺省的實現:
Crimson和Xalan。
補充兩個(DW摘錄):

SAAJ (SOAP API with Attachments for Java)
SAAJ從JAXM1.0劃分出來,原JAXM1.0被劃分爲JAXM1.1和SAAJ1.1。SAAJ包含了創建和
讀取遵循SOAP1.1規範的以及帶附件的SOAP消息的API,也包含了發送和接收請求/響
應模型的SOAP消息。
SAAJ不僅可以被JAX-RPC使用,也可以被JAXM等Web服務技術使用。它是一組通用的、
處理SOAP消息的API。

JAXR (Java API for XML Registries)
JAXR是和服務註冊、發佈相關的標準API。由於當前Web服務註冊提供者比較多,要想
在J2EE平臺中使用這些註冊服務,爲每個註冊服務都開發一個單獨的API,顯然是不
現實的,JAXR爲註冊服務進行了多層抽象,使得在J2EE平臺中操作當今的或者將來的
Web服務註冊中心成爲可能。JAXR支持三種註冊服務類型:JAXR Pluggable Provider
、Registry-specific JAXR Provider、JAXR Bridge Provider(支持UDDI Registry
和ebXML Registry/Repository等)。
JAXR規範爲JAXR的實現定義了有兩種級別的支持,分別是:
Level0:用於支持UDDI註冊;
Level1:用於支持ebXML註冊。

這些API可以在JAVA(TM) WEB SERVICES DEVELOPER PACK中得到。
它們也是J2EE1.4 Web服務構架的基礎。

Reference:
http://www-900.ibm.com/developerworks/cn/webservices/ws-j2ee14/



 

發佈了12 篇原創文章 · 獲贊 0 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章