1. 程式人生 > >你真的瞭解JAVA中與Webservice相關的規範和實現嗎?

你真的瞭解JAVA中與Webservice相關的規範和實現嗎?

很多人在專案中使用Webservice,只是知道如何釋出Webservice,如何呼叫Webservice,但真要論其來龍去脈,還真不一定清楚。

一切一切還要從我們偉大的sun公司規範說起。

JAVA 中共有三種WebService 規範,分別是JAXM&SAAJ、JAX-WS(JAX-RPC)、JAX-RS。

下面來分別簡要的介紹一下這三個規範。針對JDK 1.6以下版本,新的還沒研究過


(1.)JAX-WS:


JAX-WS(Java API For XML-WebService),JDK1.6 自帶的版本為JAX-WS2.1,其底層支持為JAXB。早期的基於SOAP 的JAVA 的Web 服務規範JAX-RPC(Java API For 

XML-Remote Procedure Call)目前已經被JAX-WS 規範取代,JAX-WS 是JAX-RPC 的演進版本,但JAX-WS 並不完全向後相容JAX-RPC,二者最大的區別就是RPC/encoded 樣式的WSDL,JAX-WS 已經不提供這種支援。JAX-RPC 的API 從JAVA EE5 開始已經移除,如果你使用J2EE1.4,其API 位於javax.xml.rpc.*包。JAX-WS(JSR 224)規範的API 位於javax.xml.ws.*包,其中大部分都是註解,提供API 操作Web 服務(通常在客戶端使用的較多,由於客戶端可以藉助SDK 生成,因此這個包中的
API 我們較少會直接使用)。WS-MetaData(JSR 181)是JAX-WS 的依賴規範,其API 位於javax.jws.*包,使用註解配置公開的Web 服務的相關資訊和配置SOAP 訊息的相關資訊。

(2.)JAXM&SAAJ:


JAXM(JAVA API For XML Message)主要定義了包含了傳送和接收訊息所需的API,相當於Web 服務的伺服器端,其API 位於javax.messaging.*包,它是JAVA EE 的可選包,因此你需要單獨下載。
SAAJ(SOAP With Attachment API For Java,JSR 67)是與JAXM 搭配使用的API,為構建SOAP 包和解析SOAP 包提供了重要的支援,支援附件傳輸,它在伺服器端、客戶端都需要使用。這裡還要提到的是SAAJ 規範,其API 位於javax.xml.soap.*包。

JAXM&SAAJ 與JAX-WS 都是基於SOAP 的Web 服務,相比之下JAXM&SAAJ 暴漏了SOAP更多的底層細節,編碼比較麻煩,而JAX-WS 更加抽象,隱藏了更多的細節,更加面向物件,實現起來你基本上不需要關心SOAP 的任何細節。那麼如果你想控制SOAP 訊息的更多細節,可以使用JAXM&SAAJ。

(3.)JAX-RS:
JAX-RS 是JAVA 針對REST(Representation State Transfer)風格制定的一套Web 服務規範,由於推出的較晚,該規範(JSR)並未隨JDK1.6 一起發行,你需要到JCP (Java Community Process) 上單獨下載JAX-RS 規範的介面,其API 位於javax.ws.rs.*包。

瞭解了這些規範,終究要落實到這些規範的實現上,然後用到我們的專案中。 我們做專案,一般不直接面向這些規範,而是使用實現這些規範的框架,如Axis,CXF。我個人比較喜歡CXF,因為我的開發主要是面向JAVA的,而且希望和Spring整合,甚至要和Mule ESB整合,這些方面CXF做的非常好。AXIS2在多語言支援方面做得非常好(這裡的多語言是使用AXIS的語言)。

對AXIS沒有太大發言權,因為用得少,這裡還是說一點關於CXF的吧。(參考官方文件)

Apache CXF is an open source services framework.CXF helps you build and develop services using frontend programming APIs, likeJAX-WS and JAX-RS. These services can speak a variety of protocols such asSOAP, XML/HTTP, RESTful HTTP, or CORBA and work over a variety of transportssuch as HTTP, JMS or JBI.

如果你想在maven中使用cxf,那麼要在pom中宣告maven依賴。

<dependency>

                    <groupId>org.apache.cxf</groupId>

                    <artifactId>cxf-distribution-manifest</artifactId>

                    <version>2.5.9</version>

                    <scope>provided</scope>

</dependency>

經測試,呼叫Webservice,只需要引這一個就夠了,它會間接引入一些其他jar

最後說下,Cxf_home 2.5.9版本的lib下jar的作用:

The following jars are required for all CXFusage:

- cxf.jar

- commons-logging.jar

- geronimo-activation.jar (Or the Sunequivalent) [6]

- geronimo-annotation.jar (Or the Sunequivalent) [6]

- geronimo-javamail.jar (Or the Sunequivalent) [6]

 (MAY be able to remove javamail if you don't use any MTOM/SAAJ typethings)

- geronimo-stax-api.jar (Or the Sunequivalent) [6]

- neethi.jar

- jaxb-api.jar  [6]

- jaxb-impl.jar (this is a [6] for normalruntime, but is required for

                 tooling and the dynamicclients)

- XmlSchema.jar

- woodstox-core-asl.jar  [6] or another StAX implementation

- stax2-api-3.0.1.jar [6] for woodstoxabove

- wsdl4j.jar

The following jars are required for XMLcatalog support:

- xml-resolver.jar

For Java2WSDL and WSDL2Java:

- The above jars

- jaxb-xjc.jar

- velocity.jar

- commons-collections.jar

- commons-lang.jar

- cxf-xjc*.jar (optional, these are xjcextensions for providing enhanced

       JAXB code generation)

For JAX-WS support:

- geronimo-ws-metadata.jar [6]

- geronimo-jaxws_2.2_spec-1.0.jar (Or theSun equivalent) [6]

- saaj-api.jar [6]

- saaj-impl.jar [6]

- asm.jar (semi-optional, helps withperformance of wrapper types and is

       required when adding JAXB annotations onto the SEI methods and

         parameters.)

For XML Configuration support:

- aopalliance.jar

- spring-beans.jar

- spring-context.jar

- spring-core.jar

- spring.web.jar

- FastInfoset.jar

For standalone HTTP support:

- geronimo-servlet.jar

- jetty-*.jar

- sl4j.jar & sl4j-jdk14.jar (optional -but improves logging)

For Aegis support:

- jdom.jar (optional, if you want to mapxsd:anyType to JDOM)

For XmlBeans databinding support:

- xmlbeans.jar

For WS-Security support:

- bcprov-jdk15.jar

- xalan.jar

- serializer.jar

- wss4j.jar

- xmlsec.jar

- ehcache-core.jar

For SAML support in WS-Security

- joda-time.jar

- opensaml.jar

- openws.jar

- xmltooling.jar

For HTTP Binding support:

- jra.jar

- jettison.jar (Needed for JSON servicesonly)

For JAX-RS support:

- abdera* (optional: for AtomPub support, but also needed for the

           Management log browser console)

- commons-codec.jar (Needed for Abdera)

- jaxen.jar (Needed for Abdera)

- axiom* (Needed for Abdera)

- jsr311-api.jar

- jettison.jar (Needed for JSON servicesonly)

- oauth*.jar (Needed for OAuth support)

For JMS transport

- geronimo-jms.jar (Or the Sun equivalent)

- spring-jms.jar

- spring-tx.jar

For CORBA support:

- antlr.jar

For JavaScript functionality:

- js.jar

For schema validation with the Aegis databinding.

 -msv-core.jar (version 2010.1)

 -xsdlib:jar (version 2010.1)

 -isorelax.jar (version 20030108)

 -relaxngDatatype.jar (version 20020414)

For the WS-Notification Service:

 -cxf-services-wsn-api.jar

 -cxf-services-wsn-core.jar 

For the CXF Security Token Service:

 - cxf-services-sts-core.jar

人家官方文件,寫得那麼好,我就不再嚼舌頭了,大家去官網看吧。

瞭解了java Webservice這塊的規範和實現,相信你再次在java中使用Webservice就不會那麼糊塗了,該怎麼做,出了問題怎麼辦,心中有數了吧。

相關推薦

真的瞭解JAVAWebservice相關規範實現

很多人在專案中使用Webservice,只是知道如何釋出Webservice,如何呼叫Webservice,但真要論其來龍去脈,還真不一定清楚。 一切一切還要從我們偉大的sun公司規範說起。 JAVA 中共有三種WebService 規範,分別是JAXM&

#Java乾貨分享:一篇文章讓深入瞭解Java的包介面

很多新手程式設計師對於Java中兩個具創新性的特徵————包與介面不是非常清楚,所以我特意發了這篇文章來闡述什麼是包,什麼是介面。 包(package)是多個類的容器,它們用於保持類的名稱空間相互隔離。 如果有想學習java的程式設計師,可來我們的java學習扣qun:79979,2590免

徹底明白JAVA棧的區別

java程序 運行 一點 動態 自動變 key 空間 類型 lin 原文地址:http://www.2cto.com/kf/201302/190704.html 簡單的說: Java把內存劃分成兩種:一種是棧內存,一種是堆內存。 在函數中定義的一些基本類型的變量和對象的引用

#圖文詳解:從實際理論出發,帶瞭解Java的多執行緒

這裡並沒有講什麼新東西,只是把多執行緒一些知識來個總結。大家懂得可以複習複習,還有些童鞋對多執行緒朦朧的可以拿這個做為入門~ 舉個栗子說明啥是多執行緒:玩遊戲,前面一堆怪,每個怪都是一個執行緒,你射了一槍,子彈飛出去了,這顆子彈也是一個執行緒。你開啟你的程序管理,看到你遊戲的後臺程序,這就是程序

#一分鐘讓瞭解Java的堆記憶體,棧記憶體

java堆疊 java面試過程中經常會被問到關於堆疊的問題,這裡我稍微總結一下,供大家參考一下。 java的記憶體分為堆記憶體和棧記憶體 棧記憶體是指程式進入一個方法時,會為這個方法單獨分配一塊私屬儲存空間,用於儲存這個方法內部的區域性變數,當這個方法結束時,分配給這個方法的棧會釋

Java:簡述Java.io.FileSeparator相關的方法

Java:簡述Java.io.File中與Separator相關的方法 1.separatorChar public static final char separatorChar 與系統有關的預設名稱分隔符。此欄位被初始化為包含系統屬性 file.se

真的瞭解HTTPGETPOST的區別

最直觀的區別就是GET把引數包含在URL中,POST通過request body傳遞引數。 當你在面試中被問到這個問題,你的內心充滿了自信和喜悅。你輕輕鬆鬆的給出了一個“標準答案”: GET在瀏覽器回退時是無害的,而POST會再次提交請求。 GET產生的URL地址可以被B

一文讓輕鬆瞭解JAVA開發的四種加密方法

文章目錄 一、工具類 md5加密工具類 base64加密工具類 Bcrypt工具類 二、加密測試 MD5加密測試 base6

java==equals

字符串 基本類型 true 變量 由於 als 不同 引用 str2 ==   ==可用於比較基本類型與引用類型,對於基本類型變量比較的是其存儲的值是否相等,對於引用類型則比較的是其是否指向同一個對象。 如: int a = 10; int b = 20; d

java數組相關的問題

通過 返回 必須 false 初始化 ray foreach 數組a 錯誤 1)  空數組中沒有獲得內存空間,所以無法使用,必須使用new關鍵字為數據分配內存空間。 2)  在初始化數組時不能靜態初始化和動態初始化同時定義,eg:int [3] [3] array2={{1

rediskey相關的命令

nbsp 由於 src type 也不能 bsp type命令 mage string類 1、簡單描述 redis本質上是一個key-value db,value可以有多種類型(string、hash、set、sorted set、list等),本章節不講這些類型的命令,這

那本叫編程珠璣的書數學相關的幾個問題

珠璣 其中 bsp ram 正整數 又是 問題 競賽題 Language 。。。又是一篇裝逼水文,先挖坑。。。 會寫一下證明,當然了都是小學生競賽題。。。到泰勒級數就封頂了。。。 1. 連續數組最大和的分治算法的時間復雜度為O(nlogn) 2. 證明72法則,科學炒

Java基礎 時間相關的類:System_Date_SimpleDateFormat_Calendar類

筆記總結: /**與時間相關的類:System_Date_SimpleDateFormat_Calendar類 * 1.system 類下的currentTimeMillis() * 輸出從1970年至今的時間的毫秒數, 執行兩次即可用於統計時間間隔! * 2.Dat

SpringSpring相關的註解

# 一、Spring的常用元件類註解 ## @Component     被該註解所修飾的類是一個普通的spring bean類,該註解可以替代@Controller、@Service、@Repository.在不確定具體的bean的時候,可以選擇使用@Componen

瞭解Java的記憶體洩漏

1. 簡介 Java的核心優勢之一是在內建垃圾收集器(簡稱GC)的幫助下實現自動記憶體管理。GC隱含地負責分配和釋放記憶體,因此能夠處理大多數記憶體洩漏問題。 雖然GC有效地處理了大部分記憶體,但它並不能成為保證記憶體洩漏的萬無一失的解決方案。GC很聰明,但並不完美。即使在盡職盡責的開發人員

VC 字串相關的巨集 _T、TEXT,_TEXT、L 的作用

 一、 在字串前加一個 L 作用:     如   L" 我的字串"    表示將 ANSI字串轉換成unicode 的字串,就是每個字元佔用兩個位元組。   str

Java泛型相關問題

泛型的概念          java 泛型是java SE 1.5的新特性,泛型的本質是引數化型別,也就是說所操作的資料型別被指定為一個引數。這種引數型別可以用在類、介面和方法的建立中,分別稱為泛型

Java基礎(三)Java‘==’euqal()contains整理

一.Java 中 == 比較 在java中,’=='運用在基本資料型別的時候,比較的是物件的記憶體地址,如下: public class Equals { public static void main(String[] args) { String s3= new String(

瞭解JAVA的POJO,Entity,PO,VO,DTO,DM包括程式碼舉例展示

首先是從概念上來說 POJO,全稱Plain Ordinary Java Object,我理解為極其單純的Java物件 一般只有屬性欄位,無參構造以及get和set方法,也是指那些沒有從任何類繼承、也沒有實現任何介面,更沒有被其它框架侵入的java物件。 因此它

curses鍵盤相關的互動功能(curses筆記四)

curses中與鍵盤相關的互動功能   與鍵盤相關的功能主要就是通過鍵盤進行輸入,關於鍵盤輸入的函式主要有如下幾個: 函式 描述 int getch(void) 類似與getchar,用