網路冷眼@BlogJava

          熙熙攘攘一閑人 以冷靜的眼光觀察技術
          posts - 88, comments - 193, trackbacks - 0, articles - 28
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          版本歷史:
          2006.12.17 發布
          2006.12.18 更正不加標準輸入流讀取字符,程序將立即退出,將不能提供服務。將程序列表的行號去掉,方便代碼粘貼。


          在前一篇文章中,講述了Java SE 6.0新特征的概觀。本文將介紹Web服務。


          當然,在進行本文之前,請首先下載Java SE 6.0,詳情請瀏覽野馬奔騰而出,Java SE 6 正式版發布

          Java Web 涉及到的JSR有 105,173,181,222,224,250。

          由于Web服務日趨流行,利用Web服務的功能性的API特征正從最新的Java EE版本中向Java SE 6平臺遷移。換言之,針對Web服務不需另外加入額外的工具,在Java EE和Java SE平臺擁有相同的API。野馬將大把不同的Web服務相關的API加到標準的工具柜中:以JSR 181針對Java 平臺的Web服務元數據,通過JSR 224的基于XML 的Web服務Java API(JAX-WS);針對Java的帶有附件的SOAP API(SAAJ)作為JSR 67

          與三個Web服務API相關的包新增到Java SE 6.0里JAX-WS API 放置到javax.xml.ws包; SAAJ類在javax.xml.soap 包; Web服務的元數據類放置在javax.jws包里。

          javax.jws

          JSR 181 及其針對Java 平臺Web服務元數據的規范提供一個在類中利用標注設計和開發Web服務的機制。標注從J2SE 5.0引入,在Java SE 6.0得到了進一步擴展。在第10章將會完整描述。但是,標注基本上允許將@tag加入到類,方法和特性來描述相關的元數據。一個解析器然后能定位標記并采取適當的行動;盡管行動什么時候發生完全依賴于標記自身。

          JAX-WS 2.0 很容易使用. 本文將介紹如何使用Java SE 6。以JAX-WS如何建立一個簡單的Web服務。首先建立一個建立一個將要作為Web服務發布的類,如表1所示:

          Java 代碼 列表1

          package  hello;

          public   class  CircleFunctions  {

             
          public   double  getArea( double  radius)  {
                 
          return  java.lang.Math.PI  *  (r  *  r);
              }


             
          public   double  getCircumference( double  radius)  {
                 
          return   2   *  java.lang.Math.PI  *  r;
             }

          }


          為了輸出這些方法,必需做兩件事情:引入javax.jws.WebService  包;在類的前面增加@WebService  標注以告訴Java編譯器將發布此類為Web服務。下面的代碼顯示了這種變化(以黑體顯示增加的代碼)。

          Java 代碼 列表2
          package hello;

          import javax.jws.WebService;

          @WebService

          public class CircleFunctions {
             
          public double getArea(double r) {
                 
          return java.lang.Math.PI * (r * r);
              }


             
          public double getCircumference(double r) {
                  
          return 2 * java.lang.Math.PI * r;
              }


          }



          在此,有兩個基本的標注@WebService@WebMethod。@WebService標注指明HelloService 類作為Web服務。如果沒有制定,標注的名稱就是類的名稱。也能制定命名空間,服務名,WSDL 位置和endpoint 接口等。在指定的上下文環境中,可以使用javax.xml.ws.Endpoint類publish()靜態方法發布上面的類作為Web服務代碼見列表3:

          Java 代碼 列表3

          import javax.xml.ws.Endpoint;

          public static void main(String[] args) {

                Endpoint.publish(
                   
          "http://localhost:8080/WebServiceExample/circlefunctions",
                   
          new CircleFunctions());
                  
          try {
                      System.in.read();
                  }
           catch (IOException ex) {
                      ex.printStackTrace();
                  }

          }



          現在,用javac編譯源代碼。但是源文件能做什么呢?通過對源文件運行 javac編譯器進行編譯只是產生了class文件。并沒有產生特殊的東西。但是在編譯類之后,也需要運行wsgen 命令行工具(wsgen 是Web service generator的縮寫)。編譯源代碼后還必需完成更多的步驟:像下面一樣調用wsgen工具。

          >  wsgen –cp . hello.CircleFunctions

          Wsgen工具將在一個叫做wsgen子目錄下產生大量的源代碼,然后將這些源代碼編譯成class文件。盡管從未編輯這些文件,但是可以瀏覽這些文件。注意在使用Wsgen工具時,原始的源代碼必需在相應的包里。否則將產生錯誤。

          就這么簡單。當運行應用程序時,Java SE 6平臺擁有一個小的Web應用服務器,它將在地址為http://localhost:8080/WebServiceExample/circlefunctions 發布Web服務。通過顯示CircleFunction的WSDL 來驗證Web服務。當JVM仍然運行時,在瀏覽器輸入:


          如果在瀏覽器里看見大量描述Web服務的功能的XML代碼,那么Web服務就成功發布了。

          評論

          # re: 感受野馬(Mustang)性情,體會Java SE 6.0的新特性之二--Web服務  回復  更多評論   

          2006-12-18 08:22 by 壞男孩
          真的方便多了,不用webservice的框架也可以寫webservices的程序真爽!

          樓主辛苦了

          # re: 感受野馬(Mustang)性情,體會Java SE 6.0的新特性之二--Web服務  回復  更多評論   

          2006-12-18 09:37 by 網路冷眼[匿名]
          要不說是新特性哪!

          # re: 感受野馬(Mustang)性情,體會Java SE 6.0的新特性之二--Web服務  回復  更多評論   

          2006-12-18 10:50 by 緋心
          樓主,我照你的方法做了。wsgen –cp . hello.CircleFunctions之后也產生的大量的代碼。但是http://localhost:8080/WebServiceExample/circlefunctions?WSDL卻出不來,why?

          # re: 感受野馬(Mustang)性情,體會Java SE 6.0的新特性之二--Web服務  回復  更多評論   

          2006-12-18 21:18 by 網路冷眼
          @緋心
          對不起,原來未加標準輸入流輸入等待字符輸入,程序執行完后立即退出。文章已更正。謝謝提出問題。

          # re: 感受野馬(Mustang)性情,體會Java SE 6.0的新特性之二--Web服務  回復  更多評論   

          2006-12-19 21:25 by 網路冷眼
          @壞男孩
          謝謝!其實還是有框架的,只不過Java SE 6.0里帶了個小的Web服務器,就不需要笨重的Web Service的容器。有道是“簡約不簡單,殺雞焉用牛刀!”

          # re: 感受野馬(Mustang)性情,體會Java SE 6.0的新特性之二--Web服務  回復  更多評論   

          2006-12-25 22:10 by ws
          樓主,我的程序如下:
          package hello;


          import java.io.IOException;

          import javax.jws.WebMethod;
          import javax.jws.WebService;
          import javax.xml.ws.Endpoint;

          @WebService
          public class CircleFunctions {
          @WebMethod
          public double getArea(double r){
          return java.lang.Math.PI*(r*r);
          }
          public static void main(String[] args) {
          // TODO Auto-generated method stub
          Endpoint.publish("http://localhost:8080/WebServiceExample/circlefunctions", new CircleFunctions());
          try{
          System.in.read();
          }catch(IOException ex){
          ex.printStackTrace();
          }
          }
          }


          wsgen –cp . hello.CircleFunctions之后也產生的大量的代碼。但是http://localhost:8080/WebServiceExample/circlefunctions?WSDL卻出不來,why?
          謝謝。

          # re: 感受野馬(Mustang)性情,體會Java SE 6.0的新特性之二--Web服務  回復  更多評論   

          2006-12-25 22:18 by 網路冷眼@BlogJava
          然后要執行:
          >java hello.CircleFunctions
          由于有標準輸入流等待輸入,程序不會退出。在后臺WS 會一直提供服務。然后在瀏覽器里面在輸入相應的地址就OK!

          # re: 感受野馬(Mustang)性情,體會Java SE 6.0的新特性之二--Web服務  回復  更多評論   

          2007-01-03 11:50 by 交口稱贊
          客戶端的寫法
          請看偶的主頁
          http://www.aygfsteel.com/vip01/
          主站蜘蛛池模板: 桃园市| 合作市| 青神县| 息烽县| 瑞昌市| 湟中县| 万荣县| 吉林省| 沐川县| 六安市| 定南县| 灵寿县| 古蔺县| 邹平县| 宜丰县| 临夏市| 高要市| 贵德县| 蓝山县| 论坛| 巴东县| 扎鲁特旗| 佳木斯市| 浪卡子县| 萍乡市| 武功县| 元氏县| 嘉善县| 县级市| 安徽省| 松滋市| 琼结县| 台中县| 吉木萨尔县| 恩施市| 唐河县| 宿松县| 大同县| 甘德县| 赤壁市| 大石桥市|