你真的瞭解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
(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的吧。(參考官方文件)
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就不會那麼糊塗了,該怎麼做,出了問題怎麼辦,心中有數了吧。
相關推薦
你真的瞭解JAVA中與Webservice相關的規範和實現嗎?
很多人在專案中使用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.File中與Separator相關的方法
Java:簡述Java.io.File中與Separator相關的方法 1.separatorChar public static final char separatorChar 與系統有關的預設名稱分隔符。此欄位被初始化為包含系統屬性 file.se
你真的瞭解HTTP中GET與POST的區別嗎?
最直觀的區別就是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
redis中與key相關的命令
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
Spring中與Spring相關的註解
# 一、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,用