一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

JDK6的新特性之十一:更簡單,更強大的JAX-WS - Java天下社區(qū) - www.javatx.cn - J2SE綜合

 ShangShujie 2007-05-06
JDK6的新特性之十一:更簡單,更強大的JAX-WS  

JAX-WS2.0的來歷

--------------------------------------------------------------------------------
JAX-WS(JSR-224)  是Java  Architecture  for  XML  Web  Services的縮寫,簡單說就是一種用Java和XML開發(fā)Web  Services應用程序的框架,  目前版本是2.0,  它是JAX-RPC  1.1的后續(xù)版本,  J2EE  1.4帶的就是JAX-RPC1.1,  而Java  EE  5里面包括了JAX-WS  2.0,但為了向后兼容,仍然支持JAX-RPC.  現(xiàn)在,SUN又把JAX-WS直接放到了Java  SE  6里面,由于JAX-WS會用到Common  Annotation(JSR  250),Java  Web  Services  Metadata(JSR  181),  JAXB2(JSR  222),  StAX(JSR  173),  所以SUN也必須把后幾個原屬于Java  EE范疇的Components下放到Java  SE,  現(xiàn)在我們可以清楚地理解了為什么Sun要把這些看似跟Java  SE沒有關系的Components放進來,終極目的就是要在Java  SE里面支持Web  Services.

JAX-WS2.0的架構

--------------------------------------------------------------------------------
JAX-WS不是一個孤立的框架,它依賴于眾多其他的規(guī)范,本質上它由以下幾部分組成
1.用來開發(fā)Web  Services的Java  API
2. 用來處理Marshal/Unmarshal的XML  Binding機制,JAX-WS2.0用JAXB2來處理Java  Object與XML之間的映射,Marshalling就是把Java  Object映射到XML,Unmarshalling則是把XML映射到Java  Object.之所以要做Java  Object與XML的映射,是因為最終作為方法參數(shù)和返回值的Java  Object要通過網(wǎng)絡傳輸協(xié)議(一般是SOAP)傳送,這就要求必須對Java  Object做類似序列化和反序列化的工作,在SOAP中就是要用XML來表示Java  object的內部狀態(tài)
3.眾多元數(shù)據(jù)(Annotations)會被JAX-WS用來描述Web  Services的相關類,包括Common  Annotations,  Web  Services  Metadata,  JAXB2的元數(shù)據(jù)和JAX-WS2.0規(guī)范自己的元數(shù)據(jù).
4.Annotation  Processing  Tool(APT)是JAX-WS重要的組成部分,由于JAX-WS2.0規(guī)范用到很多元數(shù)據(jù),所以需要APT來處理眾多的Annotations.在 <JDK_HOME>/bin下有兩個命令wsgen和wsimport,就是用到APT和Compiler  API來處理碰到的Annotations,wsgen可以為Web  Services  Provider產生并編譯必要的幫助類和相關支持文件,wsimport以WSDL作為輸入為Web  Service  Consumer產生并編譯必要的幫助類和相關支持文件.
5.JAX-WS還包括JAX-WS  Runtime與應用服務器和工具之間的契約關系

JAX-WS2.0的編程模型

--------------------------------------------------------------------------------
現(xiàn) 在用JAX-WS2.0來編寫Web  Services非常簡單,不像JAX-RPC,JAX-WS可以把任意POJO暴露為Web  Services,服務類不需要實現(xiàn)接口,服務方法也沒有必要拋出RMI異常.下面介紹在JDK6環(huán)境下用JAX-WS2.0開發(fā)和測試Web  Services的步驟
1.編寫服務類,并用Web  Services  Metadata(JSR-181)標注這個服務類,我用我的另一篇BlogJDK6的新特性之十:Web服務元數(shù)據(jù)中的WSProvider類作為服務類的例子,在此我重復貼一下WSProvider類的源代碼:
/**
 *  @author  chinajash
 */
@WebService(targetNamespace="http://blog.csdn.net/chinajash",serviceName="HelloService")
public  class  WSProvider  {
       @WebResult(name="Greetings")//自定義該方法返回值在WSDL中相關的描述        
       @WebMethod
       public  String  sayHi(@WebParam(name="MyName")  String  name){
               return  "Hi,"+name;  //@WebParam是自定義參數(shù)name在WSDL中相關的描述
       }        
       @Oneway  //表明該服務方法是單向的,既沒有返回值,也不應該聲明檢查異常
       @WebMethod(action="printSystemTime",operationName="printSystemTime")//自定義該方法在WSDL中相關的描述
       public  void  printTime(){
               System.out.println(System.currentTimeMillis());
       }
       public  static  void  main(String[]  args)  {
               Thread  wsPublisher  =  new  Thread(new  WSPublisher());
               wsPublisher.start();
       }        
       private  static  class  WSPublisher  implements  Runnable{
               public  void  run()  {
                       //發(fā)布WSProvider到http://localhost:8888/chinajash/WSProvider這個地址,之前必須調用wsgen命令
                       //生成服務類WSProvider的支持類,命令如下:
                       //wsgen  -cp  .  WebServices.WSProvider
                       Endpoint.publish("http://localhost:8888/chinajash/WSProvider",new  WSProvider());
               }                
       }
}
2. 用wsgen生成上面服務類的必要的幫助類,然后調用用EndPoint類的靜態(tài)方法publish發(fā)布服務類(步驟請參考我的另一篇Blog  JDK6的新特性之十:Web服務元數(shù)據(jù)),我在這里是將服務類發(fā)布到http://localhost: 8888/chinajash/WSProvider
3.用wsimport為服務消費者(也就是服務的客戶端)生成必要的幫助類,命令如下:
wsimport  http://localhost:8888/chinajash/WSProvider?wsdl
這會在<當前目錄>\net\csdn\blog\chinajash下生成客戶端的幫助類,在這個例子中會生成7個類
HelloService.class
ObjectFactory.class
package-info.class
PrintSystemTime.class
SayHi.class
SayHiResponse.class
WSProvider.class
4.在客戶端用下面代碼即可調用步驟1定義的Web  Service
HelloService  hs  =  new  HelloService();
WSProvider  ws  =  hs.getWSProviderPort();
System.out.println(ws.sayHi("chinajash"));
ws.printSystemTime();
調用上述代碼后客戶端控制臺輸出
hi,chinajash
服務端控制臺輸出服務器當前系統(tǒng)時間

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    欧美一区二区三区高潮菊竹| 欧美日韩在线第一页日韩| 爽到高潮嗷嗷叫之在现观看| 中文文精品字幕一区二区| 欧美国产极品一区二区| 风韵人妻丰满熟妇老熟女av| 美女被后入福利在线观看| 都市激情小说在线一区二区三区| 亚洲日本加勒比在线播放| 一二区不卡不卡在线观看| 国产综合香蕉五月婷在线| 伊人久久青草地婷婷综合| 欧美日韩精品一区免费| 午夜精品久久久99热连载| 日本理论片午夜在线观看| 欧美丰满大屁股一区二区三区| 中文字幕一二区在线观看| 日韩精品中文字幕在线视频| 亚洲欧美一二区日韩高清在线 | 亚洲熟妇av一区二区三区色堂| 国产一区二区三中文字幕| 护士又紧又深又湿又爽的视频| 夜色福利久久精品福利| 久久精品视频就在久久| 大尺度激情福利视频在线观看| 日韩午夜老司机免费视频| 国产亚洲精品香蕉视频播放| 国产亚洲精品香蕉视频播放| 亚洲熟妇熟女久久精品| 色婷婷久久五月中文字幕| 亚洲最新中文字幕一区| 欧美老太太性生活大片| 午夜午夜精品一区二区| 美女被啪的视频在线观看| 欧美老太太性生活大片| 午夜福利直播在线视频| 国产中文字幕一区二区| 麻豆果冻传媒一二三区| 日韩欧美一区二区久久婷婷| 欧美色婷婷综合狠狠爱| 亚洲一区二区三区中文久久|