blog.Toby

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            130 隨筆 :: 2 文章 :: 150 評論 :: 0 Trackbacks

          使用Axis,要發布一個Web服務非常簡單,簡直不能再簡單了,盡管看起來過程和相關代碼有些長。我這個帖子里用到了這些軟件:Axis 1.1、Eclipse 2.1和Eclipse的Tomcat插件2.2(Sysdeo Tomcat plugin)。發布的方法如下:

          我要發布的服務是一個圖書商店,公布的方法有添加圖書addBook、列表圖書listBooks、刪除圖書deleteBook等等,為簡單起見這里就只發布一個添加圖書方法,因為其他方法的發布是類似的。

          1、首先在Eclipse里新建一個名為bookstore的Tomcat工程,注意要安裝了前面說的Tomcat插件才有這個選項的。如果沒有安裝可以建立一個java工程,然后手動建立必要的目錄結構(WEB-INF等),并在Tomcat的server.xml里手動增加與項目對應的<context>項。

          2、接下來建立圖書類(com.bookstore.model.Book),圖書有名稱、ISDN號和頁數三個屬性,這是一個Bean類,代碼如下:

          package?com.bookstore.model;

          public?class?Book?{
          ????private?String?name;
          ????private?String?ISDN;
          ????private?
          int ?page;

          ????public?String?getISDN()?{
          ????????
          return ?ISDN;
          ????}

          ????public?String?getName()?{
          ????????
          return ?name;
          ????}

          ????public?
          int ?getPage()?{
          ????????
          return ?page;
          ????}

          ????public?
          void ?setISDN(String?string)?{
          ????????ISDN?
          = ?string;
          ????}

          ????public?
          void ?setName(String?string)?{
          ????????name?
          = ?string;
          ????}

          ????public?
          void ?setPage( int ?i)?{
          ????????page?
          = ?i;
          ????}

          }

          3、接下來建立用來提供服務的類(com.bookstore.BookSvc),這個類就是實際的功能類了,它里面只有一個public的addBook()方法,而它的參數只有一個就是要添加的圖書。代碼如下:

          package?com.bookstore;

          import?com.bookstore.model.Book;

          public?class?BookSvc?{
          ????
          ????public?
          void ?addBook(Book?book){
          ????????
          // here?you?save?a?book?into?database
          ????????System.out.println( " Book?has?been?added. " );
          ????}
          }

          4、現在,把下載來的Axis解壓縮到一個文件夾,這里假設你解到C:\axis-1_1。把C:\axis-1_1\webapps\axis\WEB-INF\lib目錄下的所有.jar文件復制到你的這個web應用程序的WEB-INF\lib下,再把C:\axis-1_1\webapps\axis\WEB-INF目錄下的web.xml復制到你的web應用程序的WEB-INF下。這個步驟相當于在你的web應用程序中配置了Axis。

          5、為了讓Axis知道你要發布哪些服務,你得在WEB-INF下建立一個名為server-config.wsdd的文件,內容如下:

          <? xml?version="1.0"?encoding="UTF-8" ?>
          < deployment? xmlns ="http://xml.apache.org/axis/wsdd/" ?xmlns:java ="http://xml.apache.org/axis/wsdd/providers/java" >
          ?
          < globalConfiguration >
          ??
          < parameter? name ="adminPassword" ?value ="admin" />
          ??
          < parameter? name ="attachments.Directory" ?value ="C:\eclipse\workspace\bookstore\WEB-INF\attachments" />
          ??
          < parameter? name ="attachments.implementation" ?value ="org.apache.axis.attachments.AttachmentsImpl" />
          ??
          < parameter? name ="sendXsiTypes" ?value ="true" />
          ??
          < parameter? name ="sendMultiRefs" ?value ="true" />
          ??
          < parameter? name ="sendXMLDeclaration" ?value ="true" />
          ??
          < parameter? name ="axis.sendMinimizedElements" ?value ="true" />
          ??
          < requestFlow >
          ???
          < handler? type ="java:org.apache.axis.handlers.JWSHandler" >
          ????
          < parameter? name ="scope" ?value ="session" />
          ???
          </ handler >
          ???
          < handler? type ="java:org.apache.axis.handlers.JWSHandler" >
          ????
          < parameter? name ="scope" ?value ="request" />
          ????
          < parameter? name ="extension" ?value =".jwr" />
          ???
          </ handler >
          ??
          </ requestFlow >
          ?
          </ globalConfiguration >
          ?
          < handler? name ="LocalResponder" ?type ="java:org.apache.axis.transport.local.LocalResponder" />
          ?
          < handler? name ="Authenticate" ?type ="java:org.apache.axis.handlers.SimpleAuthenticationHandler" />
          ?
          < handler? name ="URLMapper" ?type ="java:org.apache.axis.handlers.http.URLMapper" />
          ?
          < service? name ="Version" ?provider ="java:RPC" >
          ??
          < parameter? name ="allowedMethods" ?value ="getVersion" />
          ??
          < parameter? name ="className" ?value ="org.apache.axis.Version" />
          ?
          </ service >
          ?
          < service? name ="BookSvc" ?provider ="java:RPC" >
          ??
          < parameter? name ="allowedMethods" ?value ="*" />
          ??
          < parameter? name ="className" ?value ="com.bookstore.BookSvc" />
          ?
          </ service >
          ?
          < service? name ="AdminService" ?provider ="java:MSG" >
          ??
          < parameter? name ="allowedMethods" ?value ="AdminService" />
          ??
          < parameter? name ="enableRemoteAdmin" ?value ="false" />
          ??
          < parameter? name ="className" ?value ="org.apache.axis.utils.Admin" />
          ??
          < namespace > http://xml.apache.org/axis/wsdd/ </ namespace >
          ?
          </ service >
          ?
          < transport? name ="local" >
          ??
          < responseFlow >
          ???
          < handler? type ="LocalResponder" />
          ??
          </ responseFlow >
          ?
          </ transport >
          ?
          < transport? name ="http" >
          ??
          < requestFlow >
          ???
          < handler? type ="URLMapper" />
          ???
          < handler? type ="java:org.apache.axis.handlers.http.HTTPAuthHandler" />
          ??
          </ requestFlow >
          ?
          </ transport >
          </ deployment >

          這個文件里發布了三個服務:Version、AdminService和我們的BookSvc。還有一個方法可以生成這個文件,好象Axis推薦使用這種生成的方法,就是在同樣目錄下寫一個deploy.wsdd文件(如果不想看可以直接跳到下一步),內容如下:

          < deployment? xmlns ="http://xml.apache.org/axis/wsdd/"
          ????????????xmlns:java
          ="http://xml.apache.org/axis/wsdd/providers/java" >
          ?
          < service? name ="BookSvc" ?provider ="java:RPC" >
          ??
          < parameter? name ="className" ?value ="com.bookstore.BookSvc" />
          ??
          < parameter? name ="allowedMethods" ?value ="*" />
          ?
          </ service >
          </ deployment >

          也就是說deploy.wsdd里只包含關于我們的服務的描述,確認Tomcat已經啟動,然后在同一目錄下用下面這個命令生成server-config.wsdd文件:

          java?org.apache.axis.client.AdminClient? - lhttp: // localhost:8080/bookstore/services/AdminService?deploy.wsdd

          其中bookstore是我這個web應用程序的虛擬路徑。

          6、重新啟動Tomcat,訪問路徑http://localhost:8080/bookstore/services,就可以看到現在發布了三個Web服務,如下圖。點擊每個服務后的wsdl鏈接可以看到對應的WSDL描述。

          posted on 2006-07-03 14:40 渠上月 閱讀(418) 評論(1)  編輯  收藏 所屬分類: java tips

          評論

          # re: 使用Axis發布簡單的Web服務 2006-07-03 14:41 渠上月
          這篇帖子是對《使用Axis發布簡單的Web服務》的補充。

          可以看出,在Axis里書寫deploy.wsdd并利用org.apache.axis.client.AdminClient發布,其主要工作就是把<service>標簽中的內容添加在server-config.wsdd里,所以一般直接編輯server-config.wsdd文件會更方便一些。不過當你還沒有server-config.wsdd文件時,使用deploy.wsdd的方法會更方便些,因為AdminClient會幫你生成一些額外的xml元素(<handler>等等),而這些元素是必要的。

          服務發布以后,就可以在IE瀏覽器里看到它的WSDL,一般是服務的URL后面加一個“?wsdl”,例如添加圖書的WSDL可以通過http://localhost:8080/bookstore/services/BookSvc?wsdl看到。至于Java類是以何種規則映射到WSDL的,請參考JAX-RPC規范;WSDL本身的說明見這里;為了搞清生成的WSDL中各種URL格式的名稱空間,最好對XML Schema有所了解,我覺得這篇文章還不錯。

          我們還可以通過IE瀏覽器直接調用服務,方法是在服務URL后加“method=xxx”,其中xxx是要調用的方法名稱。例如可以通過http://localhost:8080/bookstore/services/BookSvc?method=addBook調用添加圖書方法,按照我們的服務類,在Tomcat的控制臺上應該可以看到打出了“Book has been added.”的字樣。

          因為添加圖書方法的參數是一個自定義類型,所以在IE里調用時不能指定參數值(或者是可以以其他格式指定,但我還不知道);如果參數是簡單類型,就可以指定了。例如我們可以為BookSvc增加一個echo()方法,參數是一個java.lang.String類型的值,如下所示,然后重新編譯并啟動Tomcat(server-config.wsdd文件不必更改)。

          public void echo(String str){
          System.out.println("Hello "+str);
          }

          在IE里輸入http://localhost:8080/bookstore/services/BookSvc?method=echo&str=Mike,就會看到Tomcat的控制臺里打出了“Hello Mike”。如果有多個參數,只要把這些參數都列在URL里即可。

          來源:
          http://www.cnblogs.com/bjzhanghao/archive/2004/10/10/50530.html
            回復  更多評論
            

          主站蜘蛛池模板: 沈丘县| 芦溪县| 三亚市| 永顺县| 博野县| 武乡县| 友谊县| 南丰县| 连江县| 丹棱县| 嘉鱼县| 无为县| 海宁市| 汽车| 阿克| 长岛县| 鲜城| 云浮市| 左云县| 临泽县| 胶南市| 二手房| 焦作市| 澎湖县| 揭西县| 赤城县| 太和县| 新泰市| 马尔康县| 孟连| 长宁区| 兴业县| 渭源县| 白银市| 黄骅市| 特克斯县| 饶阳县| 那曲县| 田东县| 岱山县| 土默特左旗|