毛片在线视频观看,一级日韩免费大片,在线网站黄色,澳门在线高清一级毛片

薈聚奇文、博采眾長(zhǎng)、見(jiàn)賢思齊
當(dāng)前位置:公文素材庫(kù) > 計(jì)劃總結(jié) > 工作總結(jié) > webservice開(kāi)發(fā)總結(jié)

webservice開(kāi)發(fā)總結(jié)

網(wǎng)站:公文素材庫(kù) | 時(shí)間:2019-05-29 07:17:55 | 移動(dòng)端:webservice開(kāi)發(fā)總結(jié)

webservice開(kāi)發(fā)總結(jié)

webservice開(kāi)發(fā)總結(jié)

一、環(huán)境說(shuō)明

服務(wù)器:tomcat5.0.28

jdk1.5

apachesoa:axis1.4eclipse3.3

二、axis安裝

1.將axis1.4/webapps/axis解壓到tomcat/webapps目錄下

2.將jdk中tools.jar包拷貝到axis/WEB-INF/lib目錄下3.然后啟動(dòng)tomcat

4.輸入:8080/axis回車(chē)出現(xiàn)如下畫(huà)面,證明成功

打開(kāi)validataion然后,頁(yè)面上的信息會(huì)告訴你已經(jīng)有的包和還要差的包,然后根據(jù)提示將必須的包下載全。復(fù)制到%tomcathome%/webapps/axis/WEB-INF/lib/目錄下。

三、創(chuàng)建webservice工程

1.在eclipse下創(chuàng)建一個(gè)普通的web工程

2.將剛才發(fā)布成功的axis工程替換新創(chuàng)建的工程3.編寫(xiě)服務(wù)端代碼,如下:

packagecom;

publicclassHelloService{

publicStringgetName(Stringname){}

}

return"hello---------------------"+name;

四、編寫(xiě)deplo.wsdd發(fā)布服務(wù)

className表示類名

allowedMethods表示要發(fā)布的方法,*表示所有方法

然后編寫(xiě)deploy.bat腳本發(fā)布服務(wù)

然后執(zhí)行腳本

deploy.wsdd和deploy.bat兩個(gè)文件都放在工程目錄下的/WEB-INF/目錄下

執(zhí)行bat之后會(huì)生成一個(gè)server-config.wsdd文件

需要注意的是,此bat文件需要在tomcat/webapps/axis/WEB-INF/目錄下執(zhí)行才會(huì)成功。也就是說(shuō)必須在服務(wù)器下執(zhí)行才會(huì)生成server-config.wsdd文件。

然后重啟tomcat

輸入:8080/axis/services便可以看到部署的服務(wù)了

五、編寫(xiě)動(dòng)態(tài)客戶端調(diào)用程序

importorg.apache.axis.client.Call;importorg.apache.axis.client.Service;

try{

Stringendpoint=

":8080/axis/services/HelloService";

}

Serviceservice=newService();Callcall=null;

call=(Call)service.createCall();call.setOperationName("getName");

call.setTargetEndpointAddress(newjava.net.URL(endpoint));Stringstr=(String)call.invoke(newObject[]{"你爸爸"});System.out.println(str);ex.printStackTrace();

}catch(Exceptionex){

六、stub客戶端調(diào)用

stub調(diào)用方式,是用服務(wù)生成的wsdl文件,通過(guò)axis的wsdl2java工具生成客戶端代碼

來(lái)調(diào)用服務(wù)的。以下是wsdl2java腳本,可生成客戶端代碼。

Axis_libaxis環(huán)境

Output_path生成的客戶端代碼的輸出路徑Package對(duì)輸出的代碼打包

:8080/axis/services/HelloService?wsdl是wsdl文件的位置,如果你已經(jīng)有了wsdl文件,可以直接指定為wsdl文件

wsdl文件的可以從服務(wù)中獲得,如下圖

單擊wsdl,便會(huì)生成wsdl文件

七、jws客戶端調(diào)用

此客戶端調(diào)用方式只適用java程序。

1.先將寫(xiě)好的服務(wù)端java類復(fù)制到webroot目錄下2.然后將java文件改為.jws例如:

xxx.java文件xxx..jws客戶端調(diào)用如下:

注意:此調(diào)用方式不要將類打包,直接放在根目錄下即可。(打包的問(wèn)題還沒(méi)有研究出來(lái))系統(tǒng)會(huì)在WEB-INF目錄下生成一個(gè)jwsClasses文件夾,jws生成的class文件會(huì)產(chǎn)生在此目錄下。

擴(kuò)展閱讀:WebService學(xué)習(xí),開(kāi)發(fā)總結(jié)--唐木之無(wú)線觀察

WebService學(xué)習(xí),開(kāi)發(fā)總結(jié)--唐木之無(wú)線觀察

發(fā)布時(shí)間:201*-7-16閱讀:123

原文地址:

基本概念:

1,什么是Web服務(wù)?

Web是使應(yīng)用程序可以以與平臺(tái)和編程語(yǔ)言無(wú)關(guān)的方式進(jìn)行相互通信的一項(xiàng)技術(shù)。Web服務(wù)是一個(gè)軟件接口,它描述了一組可以在網(wǎng)絡(luò)上通過(guò)標(biāo)準(zhǔn)化的XML消息傳遞訪問(wèn)的操作。它使用基于XML語(yǔ)言的協(xié)議來(lái)描述要執(zhí)行的操作或者要與另一個(gè)Web服務(wù)交換的數(shù)據(jù)。一組以這種方式交互的Web服務(wù)在面向服務(wù)的體系結(jié)構(gòu)(Service-OrientedArchitecture,SOA)中定義了特殊的Web服務(wù)應(yīng)用程序。2,什么是SOAP?

SOAP(SimpleObjectAccessProtocol)簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠(yuǎn)程過(guò)程調(diào)用的輕量級(jí)協(xié)議,是一個(gè)基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類型的對(duì)象或代碼,在任何平臺(tái)上,以任何一種語(yǔ)言相互通信。

SOAP包括四個(gè)部分:SOAP封裝(envelop),封裝定義了一個(gè)描述消息中的內(nèi)容是什么,是誰(shuí)發(fā)送的,誰(shuí)應(yīng)當(dāng)接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(encodingrules),用于表示應(yīng)用程序需要使用的數(shù)據(jù)類型的實(shí)例;SOAPRPC表示(RPCrepresentation),表示遠(yuǎn)程過(guò)程調(diào)用和應(yīng)答的協(xié)定;SOAP綁定(binding),使用底層協(xié)議交換信息。

應(yīng)用中比較關(guān)注的是envelop,由一個(gè)或多個(gè)Header和一個(gè)Body組成。SOAP在可互操作的基礎(chǔ)Web服務(wù)協(xié)議棧中的位置:

3,什么是Axis?

Axis本質(zhì)上就是一個(gè)SOAP引擎(ApacheAxisisanimplementationoftheSOAP),提供創(chuàng)建服務(wù)器端、客戶端和網(wǎng)關(guān)SOAP操作的基本框架。但Axis并不完全是一個(gè)SOAP引擎,它還包括:

是一個(gè)獨(dú)立的SOAP服務(wù)器。是一個(gè)嵌入Servlet引擎(例如Tomcat)的服務(wù)器。支持WSDL。

提供轉(zhuǎn)化WSDL為Java類的工具。提供例子程序。

提供TCP/IP數(shù)據(jù)包監(jiān)視工具。4,Axis相比Soapv2的優(yōu)點(diǎn):

Axis是第三代ApacheSOAP的實(shí)現(xiàn),從201*年起,SOAPv2開(kāi)發(fā)小組開(kāi)始討論如何讓Axis更加靈活、可配置,以及能夠處理SOAP和來(lái)自W3C的各種XML標(biāo)準(zhǔn)。通過(guò)不斷地討論和代碼編寫(xiě),Axis目前相比SOAPV2取得了如下成果:

速度提高。Axis通過(guò)基于事件的SAX對(duì)XML文檔進(jìn)行處理,從而在速度和效率上比ApacheSOAP有所提高。靈活性提高。穩(wěn)定性提高。

提供面向組件的部署。

提供一個(gè)簡(jiǎn)潔的傳輸抽象框架。其核心引擎完全于傳輸方式獨(dú)立。從而使基于何種協(xié)議傳輸?shù)倪x擇更加靈活。

支持WSDL。包括WSDL和客戶端代碼生成等。5,什么是WSDL?

WSDL(WebServiceDescriptionLanguage)Web服務(wù)器描述語(yǔ)言是用XML文檔來(lái)描述Web服務(wù)的標(biāo)準(zhǔn),是Web服務(wù)的接口定義語(yǔ)言,由Ariba、Intel、IBM、MS等共同提出,通過(guò)WSDL,可描述Web服務(wù)的三個(gè)基本屬性:

服務(wù)做些什么服務(wù)所提供的操作(方法)

如何訪問(wèn)服務(wù)和服務(wù)交互的數(shù)據(jù)格式以及必要協(xié)議服務(wù)位于何處協(xié)議相關(guān)的地址,如URLWSDL文檔以端口集合的形式來(lái)描述Web服務(wù),WSDL服務(wù)描述包含對(duì)一組操作和消息的一個(gè)抽象定義,綁定到這些操作和消息的一個(gè)具體協(xié)議,和這個(gè)綁定的一個(gè)網(wǎng)絡(luò)端點(diǎn)規(guī)范。WSDL在Web服務(wù)概念性協(xié)議棧中的位置:6,什么是WSDD?

WSDD就是WEB服務(wù)分布描述(WebServiceDeploymentDescriptor),它定義了WEB服務(wù)的接口,如服務(wù)名、提供的方法、方法的參數(shù)等信息。7,什么是UDDI?

UDDI就是統(tǒng)一描述、發(fā)現(xiàn)和集成(UniversalDescription,Discovery,andIntegration)。UDDI用于集中存放和查找WSDL描述文件,起著目錄服務(wù)器的作用。Web服務(wù)中的角色、操作和構(gòu)件:

服務(wù)提供者。從企業(yè)的角度看,這是服務(wù)的所有者。從體系結(jié)構(gòu)的角度看,這是托管訪問(wèn)服務(wù)的平臺(tái)。

服務(wù)請(qǐng)求者。從企業(yè)的角度看,這是要求滿足特定功能的企業(yè)。從體系結(jié)構(gòu)的角度看,這是尋找并調(diào)用服務(wù),或啟動(dòng)與服務(wù)的交互的應(yīng)用程序。服務(wù)請(qǐng)求者角色可以由瀏覽器來(lái)?yè)?dān)當(dāng),由人或無(wú)用戶界面的程序(例如,另外一個(gè)Web服務(wù))來(lái)控制它。

服務(wù)注冊(cè)中心。這是可搜索的服務(wù)描述注冊(cè)中心,服務(wù)提供者在此發(fā)布他們的服務(wù)描述。在靜態(tài)綁定開(kāi)發(fā)或動(dòng)態(tài)綁定執(zhí)行期間,服務(wù)請(qǐng)求者查找服務(wù)并獲得服務(wù)的綁定信息(在服務(wù)描述中)。對(duì)于靜態(tài)綁定的服務(wù)請(qǐng)求者,服務(wù)注冊(cè)中心是體系結(jié)構(gòu)中的可選角色,因?yàn)榉⻊?wù)提供者可以把描述直接發(fā)送給服務(wù)請(qǐng)求者。同樣,服務(wù)請(qǐng)求者可以從服務(wù)注冊(cè)中心以外的其它來(lái)源得到服務(wù)描述,例如本地文件、FTP站點(diǎn)、Web站點(diǎn)、廣告和服務(wù)發(fā)現(xiàn)(AdvertisementandDiscoveryofServices,ADS)或發(fā)現(xiàn)Web服務(wù)(DiscoveryofWebServices,DISCO)。

8,AXIS的幾種服務(wù)類型:

AXIS有四種servicestyles,分別是:RPC,Document,Wrapped,和Message。最常用的就是RPC和Message。

RPC:在AXIS中是一個(gè)默認(rèn)選項(xiàng)。當(dāng)你部署的時(shí)候使用下列兩種方式:或則,它遵循SOAPRPC和編碼規(guī)則。每個(gè)RPC都包括一個(gè)表示名稱的外部接點(diǎn)和一些表示參數(shù)的內(nèi)部接點(diǎn)。AXIS會(huì)根據(jù)規(guī)則將一個(gè)XML(WSDL文件)文件轉(zhuǎn)化成一個(gè)JAVA對(duì)象,并對(duì)對(duì)想賦上在文件中描述的值。也可以根據(jù)規(guī)則將一個(gè)JAVA對(duì)象轉(zhuǎn)化成XML文件。Document

適合于老的XMLschema。Wrapped

和DOCUMENT一樣,適合于老的XMLschema。

在大多書(shū)情況下,你不許要擔(dān)心是DOCUMENT服務(wù)還是WRAPPED服務(wù)。Message

以這種方式部署的話,會(huì)使AXIS失去意義,它使你的代碼真正的用XML形式,而不需要轉(zhuǎn)化成JAVA對(duì)象。以這種方式部署的有以下四種服務(wù)方法:

publicElement[]method(Element[]bodies);

publicSOAPBodyElement[]method(SOAPBodyElement[]bodies);publicDocumentmethod(Documentbody);

publicvoidmethod(SOAPEnvelopereq,SOAPEnveloperesp);幾種服務(wù)類型的主要區(qū)別:

基于RPC(遠(yuǎn)程過(guò)程調(diào)用)方式,這也是Web服務(wù)最常用的方式。面向消息/文檔的的類型跟RPC不同的是它提供了一個(gè)更底層的抽象,要求更多的編程工作。客戶端可以傳入任何的XML文檔,得到的響應(yīng)不一定是SOAPEnvelope,可以返回任何它所需要的東西,甚至不返回。雖然這對(duì)開(kāi)發(fā)者來(lái)說(shuō)非常的靈活,但是這種通訊類型在實(shí)際的應(yīng)用中并不常見(jiàn)。面向消息/文檔的Web服務(wù)主要適合于下面幾種情況,比如批量處理,基于表單的數(shù)據(jù)導(dǎo)入,有需要返回非XML數(shù)據(jù)時(shí),Web服務(wù)器實(shí)現(xiàn)中要求直接訪問(wèn)傳輸層等等

二,開(kāi)發(fā),部署Web服務(wù):

首先下載并安裝tomcat4.x.及以上版本

然后到Axis主頁(yè)下載,現(xiàn)在最新版本是1.3final,我們使用的是1.2.1final版,將解壓的axis中的webapps目錄下的axis拷貝到tomcat安裝路徑下的webapp下,將解壓的axis下lib下的jar文件拷貝到tomcat安裝目錄下commonlib下,并把他們加入到你的系統(tǒng)路徑中。然后啟動(dòng)tomcat,

打開(kāi)IE,輸入::8080/axis,如果出現(xiàn)axis主頁(yè),說(shuō)明安裝axis成功。部署web服務(wù)在axis下部署web服務(wù)有以下兩種方式:1.即時(shí)部署(InstanceDeployment)利用JWS文件

只需要將.java文件拷貝到axis目錄下,并將文件后綴改為.jws即可。

訪問(wèn)部署后的wsdl文件只需鍵入::8080/axis/filename.jws?wsdl以下是WSDL的一個(gè)例子:

//描述消息中復(fù)雜數(shù)據(jù)類型的使用

//定義復(fù)雜類型

......

......

//定義操作的輸出參數(shù)

//定義操作的輸入?yún)?shù)......

//WSDL:portType元素中定義了Web服務(wù)的操作。

//操作定義了輸入和輸出數(shù)據(jù)流中可以出現(xiàn)的XML消息

......

//描述特定服務(wù)接口(WSDL:portType)的協(xié)議、數(shù)據(jù)格式、安全性和其它屬性

//定義服務(wù):名字,訪問(wèn)點(diǎn),位置

2.定制部署(CustomDeployment)利用部署描述符wsdd

以下是部署描述符的一個(gè)例子:

//服務(wù)名字,服務(wù)類型及服務(wù)提供者

//實(shí)現(xiàn)該服務(wù)

的具體類

serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"http://指定序列化工廠deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"http://反序列化工廠

name="GameGradeRank"/>………

訪問(wèn)部署后的wsdl文件只需鍵入

:8080/axis/services/GameGradeService

三,在IDE下開(kāi)發(fā)Web服務(wù):

1,在Jubilder下開(kāi)發(fā)WebService:

使用Jbuilder集成開(kāi)發(fā)環(huán)境,能夠根據(jù)服務(wù)接口類生成web服務(wù)描述文件,web服務(wù)部署描述文件及客戶端代碼,這樣能夠節(jié)省我們大部分時(shí)間(開(kāi)發(fā),配置),且減少出錯(cuò)機(jī)率。Jbuilder在以前的版本,如jbuilder8(可能更低版本)就支持Axis,我用的是Jbuilder201*,不過(guò)大體步驟都是相同。

在開(kāi)始前,我們有個(gè)服務(wù)接口GameGradeService類,服務(wù)接口實(shí)現(xiàn)類ServiceImpl類及相關(guān)附屬類。我們要實(shí)現(xiàn)該服務(wù)接口。

2.1,打開(kāi)Jbuilder,新建一個(gè)工程,如testWebService

2.2,新建一個(gè)名為webService的WebServiceServer(file>new:WebServices:AxisWebServicesServerConfiguration)

2.3,在出現(xiàn)的WebServicesDesigners可視化界面,點(diǎn)擊“createService”,選擇“javaService”

2.4,配置新創(chuàng)建的javaService,點(diǎn)擊JavaService1,配置ServiceName為GameGradeService,

服務(wù)接口為我們有的那個(gè)服務(wù)接口GameGradeService,實(shí)現(xiàn)類為我們實(shí)現(xiàn)改接口的類ServiceImpl。

2.5,然后編譯該工程,能夠生成web服務(wù)部署文件,web服務(wù)描述文件,如果你選擇了生成客

戶端代碼的話,它也能生成相應(yīng)的客戶端代碼。2.6,啟動(dòng)該服務(wù),訪問(wèn):

:8080/webService/services/GameGradeService?wsdl,如果出現(xiàn)該服務(wù)的描述文檔,說(shuō)明發(fā)布成功。

2.7,執(zhí)行自動(dòng)生成的客戶端代碼進(jìn)行測(cè)試,發(fā)現(xiàn)測(cè)試成功。

2.8,你可以用webService的webServicesClient來(lái)根據(jù)wsdl只生成客戶端代碼。a,新建一個(gè)名為webServiceClient的WebServiceClient(file>new:WebServices:AxisWebServicesClientConfiguration)

b,在出現(xiàn)的WebServicesDesigners可視化界面,點(diǎn)擊“createService”,選擇“importfromurl”

c,配置新創(chuàng)建的javaService,點(diǎn)擊JavaService1,配置ServiceName為GameGradeService,InputWSDLfile為給定的wsdl。d,然后編譯該工程

2,在eclipse下開(kāi)發(fā)WebService:

Eclipse3.1及相關(guān)插件已經(jīng)能夠很好的支持webService開(kāi)發(fā)。

右鍵點(diǎn)擊wsdl文件,選擇webServices,有以下功能:發(fā)布wsdl文件,生成客戶

端代碼等。

右鍵點(diǎn)擊服務(wù)接口文件,選擇webServices,有以下功能:生成webService等。同時(shí)eclipse提供了友好的界面操作,如測(cè)試的時(shí)候,提供界面讓你輸入?yún)?shù),而不必該改程序。

四,開(kāi)發(fā)過(guò)程中的問(wèn)題:

在使用AXIS開(kāi)發(fā)WEB服務(wù)的時(shí)候,會(huì)遇到很多問(wèn)題。比如:XML解析器出現(xiàn)的異常、客戶端程序找不到可用的Web服務(wù)、序列化/反序列化等。

XML解析器出現(xiàn)的異常主要是由于類型映射的問(wèn)題導(dǎo)致的,用到那個(gè)Bean就把那個(gè)bean映射進(jìn)去就可以避免該問(wèn)題。客戶端程序找不到可用的Web服務(wù)主要是由于客戶端對(duì)服務(wù)提供者的url及服務(wù)名字輸入有錯(cuò),這一般是由于手寫(xiě)客戶端代碼造成的。

序列化/反序列化問(wèn)題,沒(méi)有對(duì)傳輸中的某個(gè)Bean類型映射相應(yīng)的序列化/反序列化工廠,或者是復(fù)雜類型中,沒(méi)有實(shí)現(xiàn)自定義的序列化/反序列化工廠。

以上是開(kāi)發(fā)過(guò)程中主要遇到的幾類問(wèn)題,在以后的開(kāi)發(fā)過(guò)程中,一定還會(huì)需要遇到更多的問(wèn)題。

五,其他相關(guān)知識(shí):

1,java類與wsdl相互生成工具:

Axis提供了”WSDL2Java”工具,可以利用wsdl描述來(lái)產(chǎn)生服務(wù)的Java代理和框架(proxyandskeletons)。

Axis提供了”Java2WSDL”工具,可以由java類生成wsdl文件。

2,序列化與反序列化:

序列化/反序列化器在英文中的對(duì)應(yīng)翻譯是Serializer/Deserializer,一個(gè)序列化器的功能是遵循一定的映射規(guī)則和編碼風(fēng)格,將一種類型的JAVA對(duì)象通過(guò)某種特定的機(jī)制,轉(zhuǎn)換成為XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,兩者相輔相成,成對(duì)出現(xiàn)。Axis中的序列化/反序列化器采用設(shè)計(jì)范式中的工廠模式,每一個(gè)Serializer唯一對(duì)應(yīng)一個(gè)SerializerFactory;每一個(gè)Deserializer唯一對(duì)應(yīng)一個(gè)DeserializerFactory。

Axis已經(jīng)為開(kāi)發(fā)者提供了豐富的序列化/反序列化器,對(duì)于java的基本數(shù)據(jù)類型,絕大部分常用的容器類(比如數(shù)組類型,Vector類型等)都提供了實(shí)現(xiàn),特別是提供了對(duì)W3C的DOM對(duì)象(比如Document,Element等)和符合Bean規(guī)范的JAVA對(duì)象提供了功能完善的序列化/反序列化器,但對(duì)于一些特殊類型的對(duì)象,需要通過(guò)Web服務(wù)進(jìn)行傳遞,我們不得不開(kāi)發(fā)自己的序列化/反序列化器。

3,Axis與Spring的結(jié)合:

Axis與spring結(jié)合,需要提供一些額外工作,即將實(shí)現(xiàn)web服務(wù)接口的Bean與web服務(wù)部署中

服務(wù)類如何關(guān)聯(lián)。如下:

.......

參數(shù)handlerClass的值是處理Bean與wsdd文件中服務(wù)類的關(guān)聯(lián)。參數(shù)springBean的值表示實(shí)現(xiàn)接口GameService注冊(cè)的Bean的名字。參數(shù)springBeanClass的值表示接口GameService的類。

發(fā)布時(shí)間:201*-7-16閱讀:123

原文地址:

基本概念:

1,什么是Web服務(wù)?

Web是使應(yīng)用程序可以以與平臺(tái)和編程語(yǔ)言無(wú)關(guān)的方式進(jìn)行相互通信的一項(xiàng)技術(shù)。Web服務(wù)是一個(gè)軟件接口,它描述了一組可以在網(wǎng)絡(luò)上通過(guò)標(biāo)準(zhǔn)化的XML消息傳遞訪問(wèn)的操作。它使用基于XML語(yǔ)言的協(xié)議來(lái)描述要執(zhí)行的操作或者要與另一個(gè)Web服務(wù)交換的數(shù)據(jù)。一組以這種方式交互的Web服務(wù)在面向服務(wù)的體系結(jié)構(gòu)(Service-OrientedArchitecture,SOA)中定義了特殊的Web服務(wù)應(yīng)用程序。2,什么是SOAP?SOAP(SimpleObjectAccessProtocol)簡(jiǎn)單對(duì)象訪問(wèn)協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠(yuǎn)程過(guò)程調(diào)用的輕量級(jí)協(xié)議,是一個(gè)基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類型的對(duì)象或代碼,在任何平臺(tái)上,以任何一種語(yǔ)言相互通信。

SOAP包括四個(gè)部分:SOAP封裝(envelop),封裝定義了一個(gè)描述消息中的內(nèi)容是什么,是誰(shuí)發(fā)送的,誰(shuí)應(yīng)當(dāng)接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(encodingrules),用于表示應(yīng)用程序需要使用的數(shù)據(jù)類型的實(shí)例;SOAPRPC表示(RPCrepresentation),表示遠(yuǎn)程過(guò)程調(diào)用和應(yīng)答的協(xié)定;SOAP綁定(binding),使用底層協(xié)議交換信息。

應(yīng)用中比較關(guān)注的是envelop,由一個(gè)或多個(gè)Header和一個(gè)Body組成。SOAP在可互操作的基礎(chǔ)Web服務(wù)協(xié)議棧中的位置:

3,什么是Axis?

Axis本質(zhì)上就是一個(gè)SOAP引擎(ApacheAxisisanimplementationoftheSOAP),提供創(chuàng)建服務(wù)器端、客戶端和網(wǎng)關(guān)SOAP操作的基本框架。但Axis并不完全是一個(gè)SOAP引擎,它還包括:

是一個(gè)獨(dú)立的SOAP服務(wù)器。

是一個(gè)嵌入Servlet引擎(例如Tomcat)的服務(wù)器。支持WSDL。

提供轉(zhuǎn)化WSDL為Java類的工具。提供例子程序。

提供TCP/IP數(shù)據(jù)包監(jiān)視工具。4,Axis相比Soapv2的優(yōu)點(diǎn):

Axis是第三代ApacheSOAP的實(shí)現(xiàn),從201*年起,SOAPv2開(kāi)發(fā)小組開(kāi)始討論如何讓Axis更加靈活、可配置,以及能夠處理SOAP和來(lái)自W3C的各種XML標(biāo)準(zhǔn)。通過(guò)不斷地討論和代碼編寫(xiě),Axis目前相比SOAPV2取得了如下成果:

速度提高。Axis通過(guò)基于事件的SAX對(duì)XML文檔進(jìn)行處理,從而在速度和效率上比ApacheSOAP有所提高。靈活性提高。穩(wěn)定性提高。

提供面向組件的部署。

提供一個(gè)簡(jiǎn)潔的傳輸抽象框架。其核心引擎完全于傳輸方式獨(dú)立。從而使基于何種協(xié)議傳輸?shù)倪x擇更加靈活。

支持WSDL。包括WSDL和客戶端代碼生成等。5,什么是WSDL?

WSDL(WebServiceDescriptionLanguage)Web服務(wù)器描述語(yǔ)言是用XML文檔來(lái)描述Web服務(wù)的標(biāo)準(zhǔn),是Web服務(wù)的接口定義語(yǔ)言,由Ariba、Intel、IBM、MS等共同提出,通過(guò)WSDL,可描述Web服務(wù)的三個(gè)基本屬性:

服務(wù)做些什么服務(wù)所提供的操作(方法)

如何訪問(wèn)服務(wù)和服務(wù)交互的數(shù)據(jù)格式以及必要協(xié)議服務(wù)位于何處協(xié)議相關(guān)的地址,如URL

WSDL文檔以端口集合的形式來(lái)描述Web服務(wù),WSDL服務(wù)描述包含對(duì)一組操作和消息的一個(gè)抽象定義,綁定到這些操作和消息的一個(gè)具體協(xié)議,和這個(gè)綁定的一個(gè)網(wǎng)絡(luò)端點(diǎn)規(guī)范。WSDL在Web服務(wù)概念性協(xié)議棧中的位置:6,什么是WSDD?

WSDD就是WEB服務(wù)分布描述(WebServiceDeploymentDescriptor),它定義了WEB服務(wù)的接口,如服務(wù)名、提供的方法、方法的參數(shù)等信息。7,什么是UDDI?

UDDI就是統(tǒng)一描述、發(fā)現(xiàn)和集成(UniversalDescription,Discovery,andIntegration)。UDDI用于集中存放和查找WSDL描述文件,起著目錄服務(wù)器的作用。Web服務(wù)中的角色、操作和構(gòu)件:服務(wù)提供者。從企業(yè)的角度看,這是服務(wù)的所有者。從體系結(jié)構(gòu)的角度看,這是托管訪問(wèn)服務(wù)的平臺(tái)。

服務(wù)請(qǐng)求者。從企業(yè)的角度看,這是要求滿足特定功能的企業(yè)。從體系結(jié)構(gòu)的角度看,這是尋找并調(diào)用服務(wù),或啟動(dòng)與服務(wù)的交互的應(yīng)用程序。服務(wù)請(qǐng)求者角色可以由瀏覽器來(lái)?yè)?dān)當(dāng),由人或無(wú)用戶界面的程序(例如,另外一個(gè)Web服務(wù))來(lái)控制它。

服務(wù)注冊(cè)中心。這是可搜索的服務(wù)描述注冊(cè)中心,服務(wù)提供者在此發(fā)布他們的服務(wù)描述。在靜態(tài)綁定開(kāi)發(fā)或動(dòng)態(tài)綁定執(zhí)行期間,服務(wù)請(qǐng)求者查找服務(wù)并獲得服務(wù)的綁定信息(在服務(wù)描述中)。對(duì)于靜態(tài)綁定的服務(wù)請(qǐng)求者,服務(wù)注冊(cè)中心是體系結(jié)構(gòu)中的可選角色,因?yàn)榉⻊?wù)提供者可以把描述直接發(fā)送給服務(wù)請(qǐng)求者。同樣,服務(wù)請(qǐng)求者可以從服務(wù)注冊(cè)中心以外的其它來(lái)源得到服務(wù)描述,例如本地文件、FTP站點(diǎn)、Web站點(diǎn)、廣告和服務(wù)發(fā)現(xiàn)(AdvertisementandDiscoveryofServices,ADS)或發(fā)現(xiàn)Web服務(wù)(DiscoveryofWebServices,DISCO)。

8,AXIS的幾種服務(wù)類型:

AXIS有四種servicestyles,分別是:RPC,Document,Wrapped,和Message。最常用的就是RPC和Message。

RPC:在AXIS中是一個(gè)默認(rèn)選項(xiàng)。當(dāng)你部署的時(shí)候使用下列兩種方式:或則,它遵循SOAPRPC和編碼規(guī)則。每個(gè)RPC都包括一個(gè)表示名稱的外部接點(diǎn)和一些表示參數(shù)的內(nèi)部接點(diǎn)。AXIS會(huì)根據(jù)規(guī)則將一個(gè)XML(WSDL文件)文件轉(zhuǎn)化成一個(gè)JAVA對(duì)象,并對(duì)對(duì)想賦上在文件中描述的值。也可以根據(jù)規(guī)則將一個(gè)JAVA對(duì)象轉(zhuǎn)化成XML文件。

Document

適合于老的XMLschema。Wrapped

和DOCUMENT一樣,適合于老的XMLschema。

在大多書(shū)情況下,你不許要擔(dān)心是DOCUMENT服務(wù)還是WRAPPED服務(wù)。Message

以這種方式部署的話,會(huì)使AXIS失去意義,它使你的代碼真正的用XML形式,而不需要轉(zhuǎn)化成JAVA對(duì)象。以這種方式部署的有以下四種服務(wù)方法:

publicElement[]method(Element[]bodies);publicSOAPBodyElement[]method(SOAPBodyElement[]bodies);publicDocumentmethod(Documentbody);

publicvoidmethod(SOAPEnvelopereq,SOAPEnveloperesp);幾種服務(wù)類型的主要區(qū)別:

基于RPC(遠(yuǎn)程過(guò)程調(diào)用)方式,這也是Web服務(wù)最常用的方式。面向消息/文檔的的類型跟RPC不同的是它提供了一個(gè)更底層的抽象,要求更多的編程工作?蛻舳丝梢詡魅肴魏蔚腦ML文檔,得到的響應(yīng)不一定是SOAPEnvelope,可以返回任何它所需要的東西,甚至不返回。雖然這對(duì)開(kāi)發(fā)者來(lái)說(shuō)非常的靈活,但是這種通訊類型在實(shí)際的應(yīng)用中并不常見(jiàn)。面向消息/文檔的Web服務(wù)主要適合于下面幾種情況,比如批量處理,基于表單的數(shù)據(jù)導(dǎo)入,有需要返回非XML數(shù)據(jù)時(shí),Web服務(wù)器實(shí)現(xiàn)中要求直接訪問(wèn)傳輸層等等

二,開(kāi)發(fā),部署Web服務(wù):

首先下載并安裝tomcat4.x.及以上版本

然后到Axis主頁(yè)下載,現(xiàn)在最新版本是1.3final,我們使用的是1.2.1final版,將解壓的axis中的webapps目錄下的axis拷貝到tomcat安裝路徑下的webapp下,將解壓的axis下lib下的jar文件拷貝到tomcat安裝目錄下commonlib下,并把他們加入到你的系統(tǒng)路徑中。

然后啟動(dòng)tomcat,

打開(kāi)IE,輸入::8080/axis,如果出現(xiàn)axis主頁(yè),說(shuō)明安裝axis成功。部署web服務(wù)在axis下部署web服務(wù)有以下兩種方式:1.即時(shí)部署(InstanceDeployment)利用JWS文件

只需要將.java文件拷貝到axis目錄下,并將文件后綴改為.jws即可。

訪問(wèn)部署后的wsdl文件只需鍵入::8080/axis/filename.jws?wsdl以下是WSDL的一個(gè)例子:

//描述消息中復(fù)雜數(shù)據(jù)類型的使用

//定義復(fù)雜類型

......

......

//定義操作的輸出參數(shù)

//定義操作的輸入?yún)?shù)......

//WSDL:portType元素中定義了Web服務(wù)的操作。

//操作定義了輸入和輸出數(shù)據(jù)流中可以出現(xiàn)的XML消息

......

//描述特定服務(wù)接口(WSDL:portType)的協(xié)議、數(shù)據(jù)格式、安全性和其它屬性

//定義服務(wù):名字,訪問(wèn)點(diǎn),位置

2.定制部署(CustomDeployment)利用部署描述符wsdd以下是部署描述符的一個(gè)例子:

//服務(wù)名字,服務(wù)類型及服務(wù)提供者

//實(shí)現(xiàn)該服務(wù)

的具體類

………

訪問(wèn)部署后的wsdl文件只需鍵入

:8080/axis/services/GameGradeService

三,在IDE下開(kāi)發(fā)Web服務(wù):

1,在Jubilder下開(kāi)發(fā)WebService:使用Jbuilder集成開(kāi)發(fā)環(huán)境,能夠根據(jù)服務(wù)接口類生成web服務(wù)描述文件,web服務(wù)部署描述文件及客戶端代碼,這樣能夠節(jié)省我們大部分時(shí)間(開(kāi)發(fā),配置),且減少出錯(cuò)機(jī)率。Jbuilder在以前的版本,如jbuilder8(可能更低版本)就支持Axis,我用的是Jbuilder201*,不過(guò)大體步驟都是相同。

在開(kāi)始前,我們有個(gè)服務(wù)接口GameGradeService類,服務(wù)接口實(shí)現(xiàn)類ServiceImpl類及相關(guān)附屬類。我們要實(shí)現(xiàn)該服務(wù)接口。

2.1,打開(kāi)Jbuilder,新建一個(gè)工程,如testWebService

2.2,新建一個(gè)名為webService的WebServiceServer(file>new:WebServices:AxisWebServicesServerConfiguration)

2.3,在出現(xiàn)的WebServicesDesigners可視化界面,點(diǎn)擊“createService”,選擇“javaService”

2.4,配置新創(chuàng)建的javaService,點(diǎn)擊JavaService1,配置ServiceName為GameGradeService,

服務(wù)接口為我們有的那個(gè)服務(wù)接口GameGradeService,實(shí)現(xiàn)類為我們實(shí)現(xiàn)改接口的類ServiceImpl。

2.5,然后編譯該工程,能夠生成web服務(wù)部署文件,web服務(wù)描述文件,如果你選擇了生成客

戶端代碼的話,它也能生成相應(yīng)的客戶端代碼。2.6,啟動(dòng)該服務(wù),訪問(wèn):

:8080/webService/services/GameGradeService?wsdl,如果出現(xiàn)該服務(wù)的描述文檔,說(shuō)明發(fā)布成功。

2.7,執(zhí)行自動(dòng)生成的客戶端代碼進(jìn)行測(cè)試,發(fā)現(xiàn)測(cè)試成功。

2.8,你可以用webService的webServicesClient來(lái)根據(jù)wsdl只生成客戶端代碼。a,新建一個(gè)名為webServiceClient的WebServiceClient(file>new:WebServices:AxisWebServicesClientConfiguration)

b,在出現(xiàn)的WebServicesDesigners可視化界面,點(diǎn)擊“createService”,選擇“importfromurl”

c,配置新創(chuàng)建的javaService,點(diǎn)擊JavaService1,配置ServiceName為GameGradeService,InputWSDLfile為給定的wsdl。d,然后編譯該工程

2,在eclipse下開(kāi)發(fā)WebService:

Eclipse3.1及相關(guān)插件已經(jīng)能夠很好的支持webService開(kāi)發(fā)。

右鍵點(diǎn)擊wsdl文件,選擇webServices,有以下功能:發(fā)布wsdl文件,生成客戶

端代碼等。

右鍵點(diǎn)擊服務(wù)接口文件,選擇webServices,有以下功能:生成webService等。同時(shí)eclipse提供了友好的界面操作,如測(cè)試的時(shí)候,提供界面讓你輸入?yún)?shù),而不必該改程序。

四,開(kāi)發(fā)過(guò)程中的問(wèn)題:

在使用AXIS開(kāi)發(fā)WEB服務(wù)的時(shí)候,會(huì)遇到很多問(wèn)題。比如:XML解析器出現(xiàn)的異常、客戶端程序找不到可用的Web服務(wù)、序列化/反序列化等。

XML解析器出現(xiàn)的異常主要是由于類型映射的問(wèn)題導(dǎo)致的,用到那個(gè)Bean就把那個(gè)bean映射進(jìn)去就可以避免該問(wèn)題。

客戶端程序找不到可用的Web服務(wù)主要是由于客戶端對(duì)服務(wù)提供者的url及服務(wù)名字輸入有錯(cuò),這一般是由于手寫(xiě)客戶端代碼造成的。

序列化/反序列化問(wèn)題,沒(méi)有對(duì)傳輸中的某個(gè)Bean類型映射相應(yīng)的序列化/反序列化工廠,或者是復(fù)雜類型中,沒(méi)有實(shí)現(xiàn)自定義的序列化/反序列化工廠。

以上是開(kāi)發(fā)過(guò)程中主要遇到的幾類問(wèn)題,在以后的開(kāi)發(fā)過(guò)程中,一定還會(huì)需要遇到更多的問(wèn)題。

五,其他相關(guān)知識(shí):

1,java類與wsdl相互生成工具:

Axis提供了”WSDL2Java”工具,可以利用wsdl描述來(lái)產(chǎn)生服務(wù)的Java代理和框架(proxyandskeletons)。

Axis提供了”Java2WSDL”工具,可以由java類生成wsdl文件。2,序列化與反序列化:

序列化/反序列化器在英文中的對(duì)應(yīng)翻譯是Serializer/Deserializer,一個(gè)序列化器的功能是遵循一定的映射規(guī)則和編碼風(fēng)格,將一種類型的JAVA對(duì)象通過(guò)某種特定的機(jī)制,轉(zhuǎn)換成為XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,兩者相輔相成,成對(duì)出現(xiàn)。Axis中的序列化/反序列化器采用設(shè)計(jì)范式中的工廠模式,每一個(gè)Serializer唯一對(duì)應(yīng)一個(gè)SerializerFactory;每一個(gè)Deserializer唯一對(duì)應(yīng)一個(gè)DeserializerFactory。

Axis已經(jīng)為開(kāi)發(fā)者提供了豐富的序列化/反序列化器,對(duì)于java的基本數(shù)據(jù)類型,絕大部分常用的容器類(比如數(shù)組類型,Vector類型等)都提供了實(shí)現(xiàn),特別是提供了對(duì)W3C的DOM對(duì)象(比如Document,Element等)和符合Bean規(guī)范的JAVA對(duì)象提供了功能完善的序列化/反序列化器,但對(duì)于一些特殊類型的對(duì)象,需要通過(guò)Web服務(wù)進(jìn)行傳遞,我們不得不開(kāi)發(fā)自己的序列化/反序列化器。

3,Axis與Spring的結(jié)合:

Axis與spring結(jié)合,需要提供一些額外工作,即將實(shí)現(xiàn)web服務(wù)接口的Bean與web服務(wù)部署中

服務(wù)類如何關(guān)聯(lián)。如下:

.......

參數(shù)handlerClass的值是處理Bean與wsdd文件中服務(wù)類的關(guān)聯(lián)。參數(shù)springBean的值表示實(shí)現(xiàn)接口GameService注冊(cè)的Bean的名字。參數(shù)springBeanClass的值表示接口GameService的類。

友情提示:本文中關(guān)于《webservice開(kāi)發(fā)總結(jié)》給出的范例僅供您參考拓展思維使用,webservice開(kāi)發(fā)總結(jié):該篇文章建議您自主創(chuàng)作。

來(lái)源:網(wǎng)絡(luò)整理 免責(zé)聲明:本文僅限學(xué)習(xí)分享,如產(chǎn)生版權(quán)問(wèn)題,請(qǐng)聯(lián)系我們及時(shí)刪除。


webservice開(kāi)發(fā)總結(jié)》由互聯(lián)網(wǎng)用戶整理提供,轉(zhuǎn)載分享請(qǐng)保留原作者信息,謝謝!
鏈接地址:http://www.seogis.com/gongwen/673082.html
相關(guān)文章