RCP與Document風(fēng)格
有兩種SOAP message風(fēng)格,document 和RPC,他們定義了SOAP message body的格式。使用document風(fēng)格時(shí)(包括wrapped和unwrapped),在wsdl中有一個(gè)非空的types部分,這個(gè)部分用XML Schema language定義了web service要用到的類型。wsgen工具從SIB(有SEI就足夠了)中生成與XSD對(duì)應(yīng)的java類。用java代碼生成WSDL文件的時(shí)候需要一些java類,wsgen工具可以生成這些Java類,生成的這些java類被稱為wsgen artifacts,底層的JWS類庫(kù)會(huì)用到這些類,特別是JAX-B系列的包,會(huì)用來(lái)轉(zhuǎn)換(marshal)java類實(shí)例(that is, Java in-memory objects)為XML類型的XML實(shí)例(滿足XML Schema document的XML文檔實(shí)例),
The inverse operation is used to convert (unmarshal) an XML document instance to an in-memory
object, an object of a Java type or a comparable type in some other language。因此wsgen工具生成的artifacts,支持了Java為基礎(chǔ)的web service的互操作性。JAX-B類庫(kù)提供了Java和XSD類型轉(zhuǎn)換的底層支持。
For the most part, the wsgen utility can be used without our bothering to inspect the artifacts that it produces. For the most part, JAX-B remains unseen infrastructure.
wsgen artifacts實(shí)際上是wsdl message的數(shù)據(jù)類型,他們和XML Schema type綁定,每個(gè)message的XML Schema types從這些java類型得來(lái)的。注:在當(dāng)前的jdk1.6.24中,已經(jīng)融入wsgen自動(dòng)生成的過(guò)程,不需手動(dòng)調(diào)用。
wsgen工具可用來(lái)生成wsdl文件,如:% wsgen -cp "." -wsdl ch01.ts.TimeServerImpl 。這為TimeServer服務(wù)生成了wsdl。用wsgen生成的wsdl和通過(guò)訪問(wèn)發(fā)布的服務(wù)生成的wsdl 有個(gè)很大的區(qū)別:wsgen生成的沒(méi)有endpoint,因?yàn)檫@個(gè)URL是在發(fā)布服務(wù)的時(shí)候決定的。其他地方兩個(gè)wsdl是相同的。
wsimport(以前叫wsdl2java和 java2wsdl更形象)工具可使用WSDL生成用來(lái)幫助寫客戶端的artifacts .
1 先契約再編碼方式
一個(gè)例子:得到一個(gè)tempConvert.wsdl文件,使用命令 wsimport -keep -p ch02.tc tempConvert.wsdl ,命令根據(jù)wsdl的portType生成一個(gè)SEI類,把SEI的interface換為class,再把方法改為實(shí)現(xiàn)就可變?yōu)镾IB。把該SIB發(fā)布,再使用命令wsimport -keep -p clientTC http://localhost:5599/tc?wsdl,來(lái)生成客戶端輔助類
2 編碼優(yōu)先
服務(wù)被發(fā)布之后,會(huì)自動(dòng)生成WSDL供客戶端使用。然而,使用annotations可以控制WSDL或WSDL-generated artifacts的生成。
posted on 2011-10-08 21:47 yuxh 閱讀(580) 評(píng)論(0) 編輯 收藏 所屬分類: web service