基于JAX-WS 設計開發(fā)WebService_第1頁
基于JAX-WS 設計開發(fā)WebService_第2頁
基于JAX-WS 設計開發(fā)WebService_第3頁
基于JAX-WS 設計開發(fā)WebService_第4頁
基于JAX-WS 設計開發(fā)WebService_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

基于JAX-WS開發(fā)

WebService2008-05-06基于JAX-WS設計開發(fā)WebServiceJAX-WS概述JAX-WS發(fā)展歷史(JAX-WS2.0與JAX-RPC1.1的比較)如何基于JAX-WSAPI開發(fā)WebService(ApacheCXF基礎)JAX-WS概述

什么是JAX-WS?為何使用JAX-WS?JAX-WS概述

JAX-WS(JavaAPIforXML-BasedWebServices)JAX-WS是Java社區(qū)(JCP)的工作成果(JSR224),它為客戶機端和服務器端的WebService實現提供通用的應用程序編程接口(API)。通過采用一個面向Web服務的標準API,旨在幫助服務用戶(客戶機)和服務實現者獲得最大程度的標準性和靈活性。JAX-WS發(fā)展歷史WebService出現以來。首先是SOAP,但SOAP僅描述消息的情況,然后是WSDL,WSDL并不會告訴您如何使用Java?編寫Web服務。在這種情況下,JAX-RPC1.0應運而生。經過數月使用之后,編寫此規(guī)范的JavaCommunityProcess(JCP)人員認識到需要對其進行一些調整,調整的結果就是JAX-RPC1.1。該規(guī)范使用大約一年之后,JCP人員希望構建一個更好的版本:JAX-RPC2.0。其主要目標是與行業(yè)方向保持一致,但行業(yè)中不僅只使用RPCWeb服務,還使用面向消息的Web服務。因此從名稱中去掉了“RPC”,取而代之的是“WS”(當然表示的是Web服務)。因此JAX-RPC1.1的后續(xù)版本是JAX-WS2.0——JavaAPIforXML-basedWebservices。JAX-WS2.0與JAX-RPC1.1的比較哪些內容保持不變?JAX-WS2.0仍然支持SOAP1.1overHTTP1.1,因此互操作性將不會受到影響。JAX-WS2.0仍然支持WSDL1.1,因此WSDL1.1的相關規(guī)范仍然適用。JAX-WS2.0與JAX-RPC1.1的比較區(qū)別和變化:SOAP1.2

JAX-RPC和JAX-WS都支持SOAP1.1。JAX-WS還支持SOAP1.2。XML/HTTP

WSDL1.1規(guī)范在HTTP綁定中定義,這意味著利用此規(guī)范可以在不使用SOAP的情況下通過HTTP發(fā)送XML消息。JAX-RPC忽略了HTTP綁定。而JAX-WS添加了對其的支持。WS-IBasicProfile

JAX-RPC支持WS-IBasicProfile(BP)V1.0,JAX-WS支持BP1.1。(WS-I即Web服務互操作性組織。)新Java功能JAX-RPC映射到Java1.4,JAX-WS映射到Java5.0。JAX-WS依賴于Java5.0中的很多新功能。JavaEE5是J2EE1.4的后續(xù)版本,添加了對JAX-WS的支持,但仍然支持JAX-RPC。JAX-WS2.0與JAX-RPC1.1的比較數據映射模型JAX-RPC具有自己的映射模型,此模型大約涵蓋了所有模式類型中的90%。JAX-WS的數據映射模型是JAXB。JAXB可保證所有XML模式的映射。接口映射模型

JAX-WS的基本接口映射模型與JAX-RPC的區(qū)別并不大,不過二者之間存在以下差異:JAX-WS的模型使用新的Java5.0特性Annotations

。JAX-WS的模型引入了異步功能。動態(tài)編程模型JAX-WS的動態(tài)客戶機模型與JAX-RPC的對應模型差別很大。很多更改都是為了認可行業(yè)需求:引入了面向消息的功能。引入了動態(tài)異步功能。JAX-WS還添加了動態(tài)服務器模型,而JAX-RPC則沒有此模型。消息傳輸優(yōu)化機制(MessageTransmissionOptimizationMechanism,MTOM)JAX-WS通過JAXB添加了對新附件規(guī)范MTOM的支持?;贘AX-WSAPI開發(fā)WebServiceJAX-WS兩種開發(fā)方式JAX-WS客戶端開發(fā)APIsJAX-WS服務端開發(fā)APIsJAX-WS兩種開發(fā)方式

契約優(yōu)先(WSDLFirst):從WSDL著手,生成Java類來實現服務。代碼優(yōu)先(JAVAFirst):從Java類著手,使用Annotation來生成WSDL文件和Java接口。契約優(yōu)先(WSDLFirst)基于ApacheCXF實現JAX-WS2.0WebService的WSDLFirst開發(fā)模式ApacheCXF基礎ApacheCXF基礎ApacheCXF簡介:

ApacheCXF:AnOpenSourceServiceFrameworkApacheCXF是一個Service框架,它簡化了Service的創(chuàng)建,

實現了JAX-WS2.0規(guī)范,并通過了JAX-WS2.0TCK;

CXF和Spring無縫集成;ApacheCXF基礎ApacheCXF功能特性支持多種標準支持

JAX-WS、

JAX-WSA、JSR-181和

SAAJ;支持

SOAP1.1、1.2、WS-IBasicProfile、WS-Security、WS-Addressing、WS-RM和

WS-Policy;支持

WSDL1.1、2.0;支持

MTOM;多種傳輸方式、Bindings、DataBindings和

FormatBindings:SOAP、REST/HTTP;DataBndings:目前支持

JAXB2.0、Aegis兩種,默認是

JAXB2.0。XMLBeans、Castor和

JiBX數據綁定方式將在

CXF2.1版本中得到支持;格式(Format):XML、JSON;傳輸方式:HTTP、Servlet、JMS和

Jabber;可擴展的

API允許為

CXF增加其它的

Bindings,以能夠支持其它的消息格式,比如:CSV和固定記錄長度。ApacheCXF基礎ApacheCXF功能特性靈活部署輕量級容器:可在

Tomcat或基于

Spring的容器中部署

Services;集成

JBI:可以在如

ServiceMix,OpenESBorPetals等等的

JBI容器中將它部署為一個服務引擎;集成

SCA:可以部署在如

Tuscany之類的

SCA容器中;集成

J2EE:可以在

J2EE應用服務器中部署

Services,比如:Geronimo、JOnAS、JBoss、WebSphereApplicationServer和

WebLogicApplicationServer,以及

Jetty和

Tomcat;獨立的

Java客戶端/服務器。支持多種編程語言全面支持

JAX-WS2.0客戶端/服務器編程模型;支持

JAX-WS2.0synchronous、asynchronous和

one-wayAPI's;支持

JAX-WS2.0DynamicInvocationInterface(DII)API;支持

wrappedandnon-wrapped風格;支持

XMLmessagingAPI;支持

JavaScript和

ECMAScript4XML(E4X),客戶端與服務端均支持;通過

Yoko支持

CORBA;通過

Tuscany支持

SCA;通過

ServiceMix支持

JBI;契約優(yōu)先(WSDLFirst)完成WSDL文件示例:AccountManagerService.wsdlWSDL文件WSDL文件WSDL文件WSDL文件契約優(yōu)先(WSDLFirst)利用ApacheCXF的WSDL2JAVA工具生成java類注意:環(huán)境變量path增加:%CXF_HOME%\bin輸入命令:D:\workspace\wsdl>wsdl2java-client-dSrcDirAccountManagerService.wsdl契約優(yōu)先(WSDLFirst)生成代碼列表:契約優(yōu)先(WSDLFirst)分析生成JAVA類根據生成PortType接口類編寫具體服務實現類(Server端)根據生成的客戶端binding測試類來測試具體服務契約優(yōu)先(WSDLFirst)分析生成JAVA類1、根據WSDL中不同Name的Message節(jié)點,生成對應類型的Schema的類:CheckBalance.java,CheckBalanceResponse.javaWithdraw.java,WithdrawResponse.java示例:分析生成JAVA類2、根據WSDL中PortType節(jié)點,生成對應類型的JAVA類:示例:分析生成JAVA類

3、生成對象工廠類ObjectFactory.java和包信息類package-info.java契約優(yōu)先(WSDLFirst)4、生成客戶端訪問服務的Service類AccountManagerService.java該類繼承:javax.xml.ws.Service契約優(yōu)先(WSDLFirst)5、根據WSDL中不同的binding生成客戶端訪問服務的測試類:AccountManagerServicePortType_AccountManagerServiceSOAP11PortHttp_Client.javaAccountManagerServicePortType_AccountManagerServiceSOAP12PortHttp_Client.javaAccountManagerServicePortType_AccountManagerServiceHttpport_Client.java示例:契約優(yōu)先(WSDLFirst)契約優(yōu)先(WSDLFirst)根據生成PortType接口類編寫具體服務實現類(Server端)1、編寫服務實現類:AccountManagerServiceImpl.java該類實現接口AccountManagerServicePortType.java契約優(yōu)先(WSDLFirst)根據生成PortType接口類編寫具體服務實現類(Server端)2、編寫服務啟動類Server.java,運行該類啟動發(fā)布服務;使用javax.xml.ws.Endpoint類的publish方法示例:契約優(yōu)先(WSDLFirst)根據生成的客戶端binding測試類來測試具體服務運行測試類對服務進行訪問:AccountManagerServicePortType_AccountManagerServiceSOAP11PortHttp_Client.java基于JAX-WSAPI開發(fā)WebServiceJAX-WS客戶端APIsJAX-WS服務端APIs基于JAX-WSAPI開發(fā)WebServiceJAX-WS客戶端APIsjavax.xml.ws.Servicejavax.xml.ws.BindingProviderjavax.xml.ws.Dispatch基于JAX-WSAPI開發(fā)WebServicejavax.xml.ws.ServiceService類提供對WebService的客戶端訪問方法主要方法:構造方法:Service(.URL

wsdlDocumentLocation,space.QName

serviceName)addPort(space.QName

portName,java.lang.String

bindingId,java.lang.String

endpointAddress)create(.URL

wsdlDocumentLocation,space.QName

serviceName)

getPort(java.lang.Class<T>

serviceEndpointInterface)createDispatch(EndpointReference

endpointReference,java.lang.Class<T>

type,Service.Mode

mode,WebServiceFeaturefeatures)setExecutor(java.util.concurrent.Executor

executor)setHandlerResolver(HandlerResolver

handlerResolver)javax.xml.ws.Service

示例1:privatestaticfinalQNameSERVICE_NAME=newQName("http://server.java_first_jaxws.hw.demo/","HelloWorld");privatestaticfinalQNamePORT_NAME=newQName("http://server.java_first_jaxws.hw.demo/","HelloWorldPort");

Serviceservice=Service.create(SERVICE_NAME);//EndpointAddressStringendpointAddress="http://localhost:9000/helloWorld";//AddaporttotheServiceservice.addPort(PORT_NAME,SOAPBinding.SOAP11HTTP_BINDING,endpointAddress);

HelloWorldhw=service.getPort(HelloWorld.class);System.out.println(hw.sayHi("World"));javax.xml.ws.Service示例2:

URLwsdlLocation=newURL("/my.wsdl");QNameserviceName=newQName("/sample","MyService");Services=Service.create(wsdlLocation,serviceName);HelloWorldhw=service.getPort(HelloWorld.class);System.out.println(hw.sayHi("World"));基于JAX-WSAPI開發(fā)WebServicejavax.xml.ws.BindingProviderTheBindingProviderinterfaceprovidesaccesstotheprotocolbindingandassociatedcontextobjectsforrequestandresponsemessageprocessing.javax.xml.ws.BindingProvider示例:javax.xml.ws.Serviceservice=...;com.example.StockQuoteProviderproxy=service.getPort(portName,com.example.StockQuoteProvider.class)javax.xml.ws.BindingProviderbp=(javax.xml.ws.BindingProvider)proxy;Map<String,Object>co

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論