webservice開發(fā)總結(jié)
webservice開發(fā)總結(jié)
一、環(huán)境說明
服務器: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.然后啟動tomcat
4.輸入:8080/axis回車出現(xiàn)如下畫面,證明成功
打開validataion然后,頁面上的信息會告訴你已經(jīng)有的包和還要差的包,然后根據(jù)提示將必須的包下載全。復制到%tomcathome%/webapps/axis/WEB-INF/lib/目錄下。
三、創(chuàng)建webservice工程
1.在eclipse下創(chuàng)建一個普通的web工程
2.將剛才發(fā)布成功的axis工程替換新創(chuàng)建的工程3.編寫服務端代碼,如下:
packagecom;
publicclassHelloService{
publicStringgetName(Stringname){}
}return"hello---------------------"+name;
四、編寫deplo.wsdd發(fā)布服務
className表示類名
allowedMethods表示要發(fā)布的方法,*表示所有方法
然后編寫deploy.bat腳本發(fā)布服務
然后執(zhí)行腳本
deploy.wsdd和deploy.bat兩個文件都放在工程目錄下的/WEB-INF/目錄下
執(zhí)行bat之后會生成一個server-config.wsdd文件
需要注意的是,此bat文件需要在tomcat/webapps/axis/WEB-INF/目錄下執(zhí)行才會成功。也就是說必須在服務器下執(zhí)行才會生成server-config.wsdd文件。
然后重啟tomcat
輸入:8080/axis/services便可以看到部署的服務了
五、編寫動態(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)用方式,是用服務生成的wsdl文件,通過axis的wsdl2java工具生成客戶端代碼
來調(diào)用服務的。以下是wsdl2java腳本,可生成客戶端代碼。
Axis_libaxis環(huán)境
Output_path生成的客戶端代碼的輸出路徑Package對輸出的代碼打包
:8080/axis/services/HelloService?wsdl是wsdl文件的位置,如果你已經(jīng)有了wsdl文件,可以直接指定為wsdl文件
wsdl文件的可以從服務中獲得,如下圖
單擊wsdl,便會生成wsdl文件
七、jws客戶端調(diào)用
此客戶端調(diào)用方式只適用java程序。
1.先將寫好的服務端java類復制到webroot目錄下2.然后將java文件改為.jws例如:
xxx.java文件xxx..jws客戶端調(diào)用如下:
注意:此調(diào)用方式不要將類打包,直接放在根目錄下即可。(打包的問題還沒有研究出來)系統(tǒng)會在WEB-INF目錄下生成一個jwsClasses文件夾,jws生成的class文件會產(chǎn)生在此目錄下。
擴展閱讀:WebService學習,開發(fā)總結(jié)--唐木之無線觀察
WebService學習,開發(fā)總結(jié)--唐木之無線觀察
發(fā)布時間:201*-7-16閱讀:123
原文地址:
基本概念:
1,什么是Web服務?
Web是使應用程序可以以與平臺和編程語言無關的方式進行相互通信的一項技術。Web服務是一個軟件接口,它描述了一組可以在網(wǎng)絡上通過標準化的XML消息傳遞訪問的操作。它使用基于XML語言的協(xié)議來描述要執(zhí)行的操作或者要與另一個Web服務交換的數(shù)據(jù)。一組以這種方式交互的Web服務在面向服務的體系結(jié)構(gòu)(Service-OrientedArchitecture,SOA)中定義了特殊的Web服務應用程序。2,什么是SOAP?
SOAP(SimpleObjectAccessProtocol)簡單對象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠程過程調(diào)用的輕量級協(xié)議,是一個基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類型的對象或代碼,在任何平臺上,以任何一種語言相互通信。
SOAP包括四個部分:SOAP封裝(envelop),封裝定義了一個描述消息中的內(nèi)容是什么,是誰發(fā)送的,誰應當接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(encodingrules),用于表示應用程序需要使用的數(shù)據(jù)類型的實例;SOAPRPC表示(RPCrepresentation),表示遠程過程調(diào)用和應答的協(xié)定;SOAP綁定(binding),使用底層協(xié)議交換信息。
應用中比較關注的是envelop,由一個或多個Header和一個Body組成。SOAP在可互操作的基礎Web服務協(xié)議棧中的位置:
3,什么是Axis?
Axis本質(zhì)上就是一個SOAP引擎(ApacheAxisisanimplementationoftheSOAP),提供創(chuàng)建服務器端、客戶端和網(wǎng)關SOAP操作的基本框架。但Axis并不完全是一個SOAP引擎,它還包括:
是一個獨立的SOAP服務器。是一個嵌入Servlet引擎(例如Tomcat)的服務器。支持WSDL。
提供轉(zhuǎn)化WSDL為Java類的工具。提供例子程序。
提供TCP/IP數(shù)據(jù)包監(jiān)視工具。4,Axis相比Soapv2的優(yōu)點:
Axis是第三代ApacheSOAP的實現(xiàn),從201*年起,SOAPv2開發(fā)小組開始討論如何讓Axis更加靈活、可配置,以及能夠處理SOAP和來自W3C的各種XML標準。通過不斷地討論和代碼編寫,Axis目前相比SOAPV2取得了如下成果:
速度提高。Axis通過基于事件的SAX對XML文檔進行處理,從而在速度和效率上比ApacheSOAP有所提高。靈活性提高。穩(wěn)定性提高。
提供面向組件的部署。
提供一個簡潔的傳輸抽象框架。其核心引擎完全于傳輸方式獨立。從而使基于何種協(xié)議傳輸?shù)倪x擇更加靈活。
支持WSDL。包括WSDL和客戶端代碼生成等。5,什么是WSDL?
WSDL(WebServiceDescriptionLanguage)Web服務器描述語言是用XML文檔來描述Web服務的標準,是Web服務的接口定義語言,由Ariba、Intel、IBM、MS等共同提出,通過WSDL,可描述Web服務的三個基本屬性:
服務做些什么服務所提供的操作(方法)
如何訪問服務和服務交互的數(shù)據(jù)格式以及必要協(xié)議服務位于何處協(xié)議相關的地址,如URLWSDL文檔以端口集合的形式來描述Web服務,WSDL服務描述包含對一組操作和消息的一個抽象定義,綁定到這些操作和消息的一個具體協(xié)議,和這個綁定的一個網(wǎng)絡端點規(guī)范。WSDL在Web服務概念性協(xié)議棧中的位置:6,什么是WSDD?
WSDD就是WEB服務分布描述(WebServiceDeploymentDescriptor),它定義了WEB服務的接口,如服務名、提供的方法、方法的參數(shù)等信息。7,什么是UDDI?
UDDI就是統(tǒng)一描述、發(fā)現(xiàn)和集成(UniversalDescription,Discovery,andIntegration)。UDDI用于集中存放和查找WSDL描述文件,起著目錄服務器的作用。Web服務中的角色、操作和構(gòu)件:
服務提供者。從企業(yè)的角度看,這是服務的所有者。從體系結(jié)構(gòu)的角度看,這是托管訪問服務的平臺。
服務請求者。從企業(yè)的角度看,這是要求滿足特定功能的企業(yè)。從體系結(jié)構(gòu)的角度看,這是尋找并調(diào)用服務,或啟動與服務的交互的應用程序。服務請求者角色可以由瀏覽器來擔當,由人或無用戶界面的程序(例如,另外一個Web服務)來控制它。
服務注冊中心。這是可搜索的服務描述注冊中心,服務提供者在此發(fā)布他們的服務描述。在靜態(tài)綁定開發(fā)或動態(tài)綁定執(zhí)行期間,服務請求者查找服務并獲得服務的綁定信息(在服務描述中)。對于靜態(tài)綁定的服務請求者,服務注冊中心是體系結(jié)構(gòu)中的可選角色,因為服務提供者可以把描述直接發(fā)送給服務請求者。同樣,服務請求者可以從服務注冊中心以外的其它來源得到服務描述,例如本地文件、FTP站點、Web站點、廣告和服務發(fā)現(xiàn)(AdvertisementandDiscoveryofServices,ADS)或發(fā)現(xiàn)Web服務(DiscoveryofWebServices,DISCO)。
8,AXIS的幾種服務類型:
AXIS有四種servicestyles,分別是:RPC,Document,Wrapped,和Message。最常用的就是RPC和Message。
RPC:在AXIS中是一個默認選項。當你部署的時候使用下列兩種方式:或則,它遵循SOAPRPC和編碼規(guī)則。每個RPC都包括一個表示名稱的外部接點和一些表示參數(shù)的內(nèi)部接點。AXIS會根據(jù)規(guī)則將一個XML(WSDL文件)文件轉(zhuǎn)化成一個JAVA對象,并對對想賦上在文件中描述的值。也可以根據(jù)規(guī)則將一個JAVA對象轉(zhuǎn)化成XML文件。Document
適合于老的XMLschema。Wrapped
和DOCUMENT一樣,適合于老的XMLschema。
在大多書情況下,你不許要擔心是DOCUMENT服務還是WRAPPED服務。Message
以這種方式部署的話,會使AXIS失去意義,它使你的代碼真正的用XML形式,而不需要轉(zhuǎn)化成JAVA對象。以這種方式部署的有以下四種服務方法:
publicElement[]method(Element[]bodies);
publicSOAPBodyElement[]method(SOAPBodyElement[]bodies);publicDocumentmethod(Documentbody);
publicvoidmethod(SOAPEnvelopereq,SOAPEnveloperesp);幾種服務類型的主要區(qū)別:
基于RPC(遠程過程調(diào)用)方式,這也是Web服務最常用的方式。面向消息/文檔的的類型跟RPC不同的是它提供了一個更底層的抽象,要求更多的編程工作。客戶端可以傳入任何的XML文檔,得到的響應不一定是SOAPEnvelope,可以返回任何它所需要的東西,甚至不返回。雖然這對開發(fā)者來說非常的靈活,但是這種通訊類型在實際的應用中并不常見。面向消息/文檔的Web服務主要適合于下面幾種情況,比如批量處理,基于表單的數(shù)據(jù)導入,有需要返回非XML數(shù)據(jù)時,Web服務器實現(xiàn)中要求直接訪問傳輸層等等
二,開發(fā),部署Web服務:
首先下載并安裝tomcat4.x.及以上版本
然后到Axis主頁下載,現(xiàn)在最新版本是1.3final,我們使用的是1.2.1final版,將解壓的axis中的webapps目錄下的axis拷貝到tomcat安裝路徑下的webapp下,將解壓的axis下lib下的jar文件拷貝到tomcat安裝目錄下commonlib下,并把他們加入到你的系統(tǒng)路徑中。然后啟動tomcat,
打開IE,輸入::8080/axis,如果出現(xiàn)axis主頁,說明安裝axis成功。部署web服務在axis下部署web服務有以下兩種方式:1.即時部署(InstanceDeployment)利用JWS文件
只需要將.java文件拷貝到axis目錄下,并將文件后綴改為.jws即可。
訪問部署后的wsdl文件只需鍵入::8080/axis/filename.jws?wsdl以下是WSDL的一個例子:
//描述消息中復雜數(shù)據(jù)類型的使用
//定義復雜類型
......
......
//定義操作的輸出參數(shù)
//定義操作的輸入?yún)?shù)......
//WSDL:portType元素中定義了Web服務的操作。
//操作定義了輸入和輸出數(shù)據(jù)流中可以出現(xiàn)的XML消息
......
//描述特定服務接口(WSDL:portType)的協(xié)議、數(shù)據(jù)格式、安全性和其它屬性
//定義服務:名字,訪問點,位置
2.定制部署(CustomDeployment)利用部署描述符wsdd
以下是部署描述符的一個例子:
//服務名字,服務類型及服務提供者
//實現(xiàn)該服務
的具體類
serializer="org.apache.axis.encoding.ser.BeanSerializerFactory"http://指定序列化工廠deserializer="org.apache.axis.encoding.ser.BeanDeserializerFactory"http://反序列化工廠
name="GameGradeRank"/>………
訪問部署后的wsdl文件只需鍵入
:8080/axis/services/GameGradeService
三,在IDE下開發(fā)Web服務:
1,在Jubilder下開發(fā)WebService:
使用Jbuilder集成開發(fā)環(huán)境,能夠根據(jù)服務接口類生成web服務描述文件,web服務部署描述文件及客戶端代碼,這樣能夠節(jié)省我們大部分時間(開發(fā),配置),且減少出錯機率。Jbuilder在以前的版本,如jbuilder8(可能更低版本)就支持Axis,我用的是Jbuilder201*,不過大體步驟都是相同。
在開始前,我們有個服務接口GameGradeService類,服務接口實現(xiàn)類ServiceImpl類及相關附屬類。我們要實現(xiàn)該服務接口。
2.1,打開Jbuilder,新建一個工程,如testWebService
2.2,新建一個名為webService的WebServiceServer(file>new:WebServices:AxisWebServicesServerConfiguration)
2.3,在出現(xiàn)的WebServicesDesigners可視化界面,點擊“createService”,選擇“javaService”
2.4,配置新創(chuàng)建的javaService,點擊JavaService1,配置ServiceName為GameGradeService,
服務接口為我們有的那個服務接口GameGradeService,實現(xiàn)類為我們實現(xiàn)改接口的類ServiceImpl。
2.5,然后編譯該工程,能夠生成web服務部署文件,web服務描述文件,如果你選擇了生成客
戶端代碼的話,它也能生成相應的客戶端代碼。2.6,啟動該服務,訪問:
:8080/webService/services/GameGradeService?wsdl,如果出現(xiàn)該服務的描述文檔,說明發(fā)布成功。
2.7,執(zhí)行自動生成的客戶端代碼進行測試,發(fā)現(xiàn)測試成功。
2.8,你可以用webService的webServicesClient來根據(jù)wsdl只生成客戶端代碼。a,新建一個名為webServiceClient的WebServiceClient(file>new:WebServices:AxisWebServicesClientConfiguration)
b,在出現(xiàn)的WebServicesDesigners可視化界面,點擊“createService”,選擇“importfromurl”
c,配置新創(chuàng)建的javaService,點擊JavaService1,配置ServiceName為GameGradeService,InputWSDLfile為給定的wsdl。d,然后編譯該工程
2,在eclipse下開發(fā)WebService:
Eclipse3.1及相關插件已經(jīng)能夠很好的支持webService開發(fā)。
右鍵點擊wsdl文件,選擇webServices,有以下功能:發(fā)布wsdl文件,生成客戶
端代碼等。
右鍵點擊服務接口文件,選擇webServices,有以下功能:生成webService等。同時eclipse提供了友好的界面操作,如測試的時候,提供界面讓你輸入?yún)?shù),而不必該改程序。
四,開發(fā)過程中的問題:
在使用AXIS開發(fā)WEB服務的時候,會遇到很多問題。比如:XML解析器出現(xiàn)的異常、客戶端程序找不到可用的Web服務、序列化/反序列化等。
XML解析器出現(xiàn)的異常主要是由于類型映射的問題導致的,用到那個Bean就把那個bean映射進去就可以避免該問題。客戶端程序找不到可用的Web服務主要是由于客戶端對服務提供者的url及服務名字輸入有錯,這一般是由于手寫客戶端代碼造成的。
序列化/反序列化問題,沒有對傳輸中的某個Bean類型映射相應的序列化/反序列化工廠,或者是復雜類型中,沒有實現(xiàn)自定義的序列化/反序列化工廠。
以上是開發(fā)過程中主要遇到的幾類問題,在以后的開發(fā)過程中,一定還會需要遇到更多的問題。
五,其他相關知識:
1,java類與wsdl相互生成工具:
Axis提供了”WSDL2Java”工具,可以利用wsdl描述來產(chǎn)生服務的Java代理和框架(proxyandskeletons)。
Axis提供了”Java2WSDL”工具,可以由java類生成wsdl文件。
2,序列化與反序列化:
序列化/反序列化器在英文中的對應翻譯是Serializer/Deserializer,一個序列化器的功能是遵循一定的映射規(guī)則和編碼風格,將一種類型的JAVA對象通過某種特定的機制,轉(zhuǎn)換成為XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,兩者相輔相成,成對出現(xiàn)。Axis中的序列化/反序列化器采用設計范式中的工廠模式,每一個Serializer唯一對應一個SerializerFactory;每一個Deserializer唯一對應一個DeserializerFactory。
Axis已經(jīng)為開發(fā)者提供了豐富的序列化/反序列化器,對于java的基本數(shù)據(jù)類型,絕大部分常用的容器類(比如數(shù)組類型,Vector類型等)都提供了實現(xiàn),特別是提供了對W3C的DOM對象(比如Document,Element等)和符合Bean規(guī)范的JAVA對象提供了功能完善的序列化/反序列化器,但對于一些特殊類型的對象,需要通過Web服務進行傳遞,我們不得不開發(fā)自己的序列化/反序列化器。
3,Axis與Spring的結(jié)合:
Axis與spring結(jié)合,需要提供一些額外工作,即將實現(xiàn)web服務接口的Bean與web服務部署中
服務類如何關聯(lián)。如下:
.......
參數(shù)handlerClass的值是處理Bean與wsdd文件中服務類的關聯(lián)。參數(shù)springBean的值表示實現(xiàn)接口GameService注冊的Bean的名字。參數(shù)springBeanClass的值表示接口GameService的類。
發(fā)布時間:201*-7-16閱讀:123
原文地址:
基本概念:
1,什么是Web服務?
Web是使應用程序可以以與平臺和編程語言無關的方式進行相互通信的一項技術。Web服務是一個軟件接口,它描述了一組可以在網(wǎng)絡上通過標準化的XML消息傳遞訪問的操作。它使用基于XML語言的協(xié)議來描述要執(zhí)行的操作或者要與另一個Web服務交換的數(shù)據(jù)。一組以這種方式交互的Web服務在面向服務的體系結(jié)構(gòu)(Service-OrientedArchitecture,SOA)中定義了特殊的Web服務應用程序。2,什么是SOAP?SOAP(SimpleObjectAccessProtocol)簡單對象訪問協(xié)議是在分散或分布式的環(huán)境中交換信息并執(zhí)行遠程過程調(diào)用的輕量級協(xié)議,是一個基于XML的協(xié)議。使用SOAP,不用考慮任何特定的傳輸協(xié)議(最常用的還是HTTP協(xié)議),可以允許任何類型的對象或代碼,在任何平臺上,以任何一種語言相互通信。
SOAP包括四個部分:SOAP封裝(envelop),封裝定義了一個描述消息中的內(nèi)容是什么,是誰發(fā)送的,誰應當接受并處理它以及如何處理它們的框架;SOAP編碼規(guī)則(encodingrules),用于表示應用程序需要使用的數(shù)據(jù)類型的實例;SOAPRPC表示(RPCrepresentation),表示遠程過程調(diào)用和應答的協(xié)定;SOAP綁定(binding),使用底層協(xié)議交換信息。
應用中比較關注的是envelop,由一個或多個Header和一個Body組成。SOAP在可互操作的基礎Web服務協(xié)議棧中的位置:
3,什么是Axis?
Axis本質(zhì)上就是一個SOAP引擎(ApacheAxisisanimplementationoftheSOAP),提供創(chuàng)建服務器端、客戶端和網(wǎng)關SOAP操作的基本框架。但Axis并不完全是一個SOAP引擎,它還包括:
是一個獨立的SOAP服務器。
是一個嵌入Servlet引擎(例如Tomcat)的服務器。支持WSDL。
提供轉(zhuǎn)化WSDL為Java類的工具。提供例子程序。
提供TCP/IP數(shù)據(jù)包監(jiān)視工具。4,Axis相比Soapv2的優(yōu)點:
Axis是第三代ApacheSOAP的實現(xiàn),從201*年起,SOAPv2開發(fā)小組開始討論如何讓Axis更加靈活、可配置,以及能夠處理SOAP和來自W3C的各種XML標準。通過不斷地討論和代碼編寫,Axis目前相比SOAPV2取得了如下成果:
速度提高。Axis通過基于事件的SAX對XML文檔進行處理,從而在速度和效率上比ApacheSOAP有所提高。靈活性提高。穩(wěn)定性提高。
提供面向組件的部署。
提供一個簡潔的傳輸抽象框架。其核心引擎完全于傳輸方式獨立。從而使基于何種協(xié)議傳輸?shù)倪x擇更加靈活。
支持WSDL。包括WSDL和客戶端代碼生成等。5,什么是WSDL?
WSDL(WebServiceDescriptionLanguage)Web服務器描述語言是用XML文檔來描述Web服務的標準,是Web服務的接口定義語言,由Ariba、Intel、IBM、MS等共同提出,通過WSDL,可描述Web服務的三個基本屬性:
服務做些什么服務所提供的操作(方法)
如何訪問服務和服務交互的數(shù)據(jù)格式以及必要協(xié)議服務位于何處協(xié)議相關的地址,如URL
WSDL文檔以端口集合的形式來描述Web服務,WSDL服務描述包含對一組操作和消息的一個抽象定義,綁定到這些操作和消息的一個具體協(xié)議,和這個綁定的一個網(wǎng)絡端點規(guī)范。WSDL在Web服務概念性協(xié)議棧中的位置:6,什么是WSDD?
WSDD就是WEB服務分布描述(WebServiceDeploymentDescriptor),它定義了WEB服務的接口,如服務名、提供的方法、方法的參數(shù)等信息。7,什么是UDDI?
UDDI就是統(tǒng)一描述、發(fā)現(xiàn)和集成(UniversalDescription,Discovery,andIntegration)。UDDI用于集中存放和查找WSDL描述文件,起著目錄服務器的作用。Web服務中的角色、操作和構(gòu)件:服務提供者。從企業(yè)的角度看,這是服務的所有者。從體系結(jié)構(gòu)的角度看,這是托管訪問服務的平臺。
服務請求者。從企業(yè)的角度看,這是要求滿足特定功能的企業(yè)。從體系結(jié)構(gòu)的角度看,這是尋找并調(diào)用服務,或啟動與服務的交互的應用程序。服務請求者角色可以由瀏覽器來擔當,由人或無用戶界面的程序(例如,另外一個Web服務)來控制它。
服務注冊中心。這是可搜索的服務描述注冊中心,服務提供者在此發(fā)布他們的服務描述。在靜態(tài)綁定開發(fā)或動態(tài)綁定執(zhí)行期間,服務請求者查找服務并獲得服務的綁定信息(在服務描述中)。對于靜態(tài)綁定的服務請求者,服務注冊中心是體系結(jié)構(gòu)中的可選角色,因為服務提供者可以把描述直接發(fā)送給服務請求者。同樣,服務請求者可以從服務注冊中心以外的其它來源得到服務描述,例如本地文件、FTP站點、Web站點、廣告和服務發(fā)現(xiàn)(AdvertisementandDiscoveryofServices,ADS)或發(fā)現(xiàn)Web服務(DiscoveryofWebServices,DISCO)。
8,AXIS的幾種服務類型:
AXIS有四種servicestyles,分別是:RPC,Document,Wrapped,和Message。最常用的就是RPC和Message。
RPC:在AXIS中是一個默認選項。當你部署的時候使用下列兩種方式:或則,它遵循SOAPRPC和編碼規(guī)則。每個RPC都包括一個表示名稱的外部接點和一些表示參數(shù)的內(nèi)部接點。AXIS會根據(jù)規(guī)則將一個XML(WSDL文件)文件轉(zhuǎn)化成一個JAVA對象,并對對想賦上在文件中描述的值。也可以根據(jù)規(guī)則將一個JAVA對象轉(zhuǎn)化成XML文件。
Document
適合于老的XMLschema。Wrapped
和DOCUMENT一樣,適合于老的XMLschema。
在大多書情況下,你不許要擔心是DOCUMENT服務還是WRAPPED服務。Message
以這種方式部署的話,會使AXIS失去意義,它使你的代碼真正的用XML形式,而不需要轉(zhuǎn)化成JAVA對象。以這種方式部署的有以下四種服務方法:
publicElement[]method(Element[]bodies);publicSOAPBodyElement[]method(SOAPBodyElement[]bodies);publicDocumentmethod(Documentbody);
publicvoidmethod(SOAPEnvelopereq,SOAPEnveloperesp);幾種服務類型的主要區(qū)別:
基于RPC(遠程過程調(diào)用)方式,這也是Web服務最常用的方式。面向消息/文檔的的類型跟RPC不同的是它提供了一個更底層的抽象,要求更多的編程工作。客戶端可以傳入任何的XML文檔,得到的響應不一定是SOAPEnvelope,可以返回任何它所需要的東西,甚至不返回。雖然這對開發(fā)者來說非常的靈活,但是這種通訊類型在實際的應用中并不常見。面向消息/文檔的Web服務主要適合于下面幾種情況,比如批量處理,基于表單的數(shù)據(jù)導入,有需要返回非XML數(shù)據(jù)時,Web服務器實現(xiàn)中要求直接訪問傳輸層等等
二,開發(fā),部署Web服務:
首先下載并安裝tomcat4.x.及以上版本
然后到Axis主頁下載,現(xiàn)在最新版本是1.3final,我們使用的是1.2.1final版,將解壓的axis中的webapps目錄下的axis拷貝到tomcat安裝路徑下的webapp下,將解壓的axis下lib下的jar文件拷貝到tomcat安裝目錄下commonlib下,并把他們加入到你的系統(tǒng)路徑中。
然后啟動tomcat,
打開IE,輸入::8080/axis,如果出現(xiàn)axis主頁,說明安裝axis成功。部署web服務在axis下部署web服務有以下兩種方式:1.即時部署(InstanceDeployment)利用JWS文件
只需要將.java文件拷貝到axis目錄下,并將文件后綴改為.jws即可。
訪問部署后的wsdl文件只需鍵入::8080/axis/filename.jws?wsdl以下是WSDL的一個例子:
//描述消息中復雜數(shù)據(jù)類型的使用
//定義復雜類型
......
......
//定義操作的輸出參數(shù)
//定義操作的輸入?yún)?shù)......
//WSDL:portType元素中定義了Web服務的操作。
//操作定義了輸入和輸出數(shù)據(jù)流中可以出現(xiàn)的XML消息
......
//描述特定服務接口(WSDL:portType)的協(xié)議、數(shù)據(jù)格式、安全性和其它屬性
//定義服務:名字,訪問點,位置
2.定制部署(CustomDeployment)利用部署描述符wsdd以下是部署描述符的一個例子:
//服務名字,服務類型及服務提供者
//實現(xiàn)該服務
的具體類
………
訪問部署后的wsdl文件只需鍵入
:8080/axis/services/GameGradeService
三,在IDE下開發(fā)Web服務:
1,在Jubilder下開發(fā)WebService:使用Jbuilder集成開發(fā)環(huán)境,能夠根據(jù)服務接口類生成web服務描述文件,web服務部署描述文件及客戶端代碼,這樣能夠節(jié)省我們大部分時間(開發(fā),配置),且減少出錯機率。Jbuilder在以前的版本,如jbuilder8(可能更低版本)就支持Axis,我用的是Jbuilder201*,不過大體步驟都是相同。
在開始前,我們有個服務接口GameGradeService類,服務接口實現(xiàn)類ServiceImpl類及相關附屬類。我們要實現(xiàn)該服務接口。
2.1,打開Jbuilder,新建一個工程,如testWebService
2.2,新建一個名為webService的WebServiceServer(file>new:WebServices:AxisWebServicesServerConfiguration)
2.3,在出現(xiàn)的WebServicesDesigners可視化界面,點擊“createService”,選擇“javaService”
2.4,配置新創(chuàng)建的javaService,點擊JavaService1,配置ServiceName為GameGradeService,
服務接口為我們有的那個服務接口GameGradeService,實現(xiàn)類為我們實現(xiàn)改接口的類ServiceImpl。
2.5,然后編譯該工程,能夠生成web服務部署文件,web服務描述文件,如果你選擇了生成客
戶端代碼的話,它也能生成相應的客戶端代碼。2.6,啟動該服務,訪問:
:8080/webService/services/GameGradeService?wsdl,如果出現(xiàn)該服務的描述文檔,說明發(fā)布成功。
2.7,執(zhí)行自動生成的客戶端代碼進行測試,發(fā)現(xiàn)測試成功。
2.8,你可以用webService的webServicesClient來根據(jù)wsdl只生成客戶端代碼。a,新建一個名為webServiceClient的WebServiceClient(file>new:WebServices:AxisWebServicesClientConfiguration)
b,在出現(xiàn)的WebServicesDesigners可視化界面,點擊“createService”,選擇“importfromurl”
c,配置新創(chuàng)建的javaService,點擊JavaService1,配置ServiceName為GameGradeService,InputWSDLfile為給定的wsdl。d,然后編譯該工程
2,在eclipse下開發(fā)WebService:
Eclipse3.1及相關插件已經(jīng)能夠很好的支持webService開發(fā)。
右鍵點擊wsdl文件,選擇webServices,有以下功能:發(fā)布wsdl文件,生成客戶
端代碼等。
右鍵點擊服務接口文件,選擇webServices,有以下功能:生成webService等。同時eclipse提供了友好的界面操作,如測試的時候,提供界面讓你輸入?yún)?shù),而不必該改程序。
四,開發(fā)過程中的問題:
在使用AXIS開發(fā)WEB服務的時候,會遇到很多問題。比如:XML解析器出現(xiàn)的異常、客戶端程序找不到可用的Web服務、序列化/反序列化等。
XML解析器出現(xiàn)的異常主要是由于類型映射的問題導致的,用到那個Bean就把那個bean映射進去就可以避免該問題。
客戶端程序找不到可用的Web服務主要是由于客戶端對服務提供者的url及服務名字輸入有錯,這一般是由于手寫客戶端代碼造成的。
序列化/反序列化問題,沒有對傳輸中的某個Bean類型映射相應的序列化/反序列化工廠,或者是復雜類型中,沒有實現(xiàn)自定義的序列化/反序列化工廠。
以上是開發(fā)過程中主要遇到的幾類問題,在以后的開發(fā)過程中,一定還會需要遇到更多的問題。
五,其他相關知識:
1,java類與wsdl相互生成工具:
Axis提供了”WSDL2Java”工具,可以利用wsdl描述來產(chǎn)生服務的Java代理和框架(proxyandskeletons)。
Axis提供了”Java2WSDL”工具,可以由java類生成wsdl文件。2,序列化與反序列化:
序列化/反序列化器在英文中的對應翻譯是Serializer/Deserializer,一個序列化器的功能是遵循一定的映射規(guī)則和編碼風格,將一種類型的JAVA對象通過某種特定的機制,轉(zhuǎn)換成為XML描述的形式;反序列化器的功能是序列化器所做工作的逆操作,兩者相輔相成,成對出現(xiàn)。Axis中的序列化/反序列化器采用設計范式中的工廠模式,每一個Serializer唯一對應一個SerializerFactory;每一個Deserializer唯一對應一個DeserializerFactory。
Axis已經(jīng)為開發(fā)者提供了豐富的序列化/反序列化器,對于java的基本數(shù)據(jù)類型,絕大部分常用的容器類(比如數(shù)組類型,Vector類型等)都提供了實現(xiàn),特別是提供了對W3C的DOM對象(比如Document,Element等)和符合Bean規(guī)范的JAVA對象提供了功能完善的序列化/反序列化器,但對于一些特殊類型的對象,需要通過Web服務進行傳遞,我們不得不開發(fā)自己的序列化/反序列化器。
3,Axis與Spring的結(jié)合:
Axis與spring結(jié)合,需要提供一些額外工作,即將實現(xiàn)web服務接口的Bean與web服務部署中
服務類如何關聯(lián)。如下:
.......
參數(shù)handlerClass的值是處理Bean與wsdd文件中服務類的關聯(lián)。參數(shù)springBean的值表示實現(xiàn)接口GameService注冊的Bean的名字。參數(shù)springBeanClass的值表示接口GameService的類。
友情提示:本文中關于《webservice開發(fā)總結(jié)》給出的范例僅供您參考拓展思維使用,webservice開發(fā)總結(jié):該篇文章建議您自主創(chuàng)作。
來源:網(wǎng)絡整理 免責聲明:本文僅限學習分享,如產(chǎn)生版權(quán)問題,請聯(lián)系我們及時刪除。