blog.Toby

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

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

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

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

          2、接下來建立圖書類(com.bookstore.model.Book),圖書有名稱、ISDN號和頁數(shù)三個屬性,這是一個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、接下來建立用來提供服務(wù)的類(com.bookstore.BookSvc),這個類就是實際的功能類了,它里面只有一個public的addBook()方法,而它的參數(shù)只有一個就是要添加的圖書。代碼如下:

          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、現(xiàn)在,把下載來的Axis解壓縮到一個文件夾,這里假設(shè)你解到C:\axis-1_1。把C:\axis-1_1\webapps\axis\WEB-INF\lib目錄下的所有.jar文件復(fù)制到你的這個web應(yīng)用程序的WEB-INF\lib下,再把C:\axis-1_1\webapps\axis\WEB-INF目錄下的web.xml復(fù)制到你的web應(yīng)用程序的WEB-INF下。這個步驟相當(dāng)于在你的web應(yīng)用程序中配置了Axis。

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

          <? 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 >

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

          < 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里只包含關(guān)于我們的服務(wù)的描述,確認(rèn)Tomcat已經(jīng)啟動,然后在同一目錄下用下面這個命令生成server-config.wsdd文件:

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

          其中bookstore是我這個web應(yīng)用程序的虛擬路徑。

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

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

          評論

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

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

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

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

          因為添加圖書方法的參數(shù)是一個自定義類型,所以在IE里調(diào)用時不能指定參數(shù)值(或者是可以以其他格式指定,但我還不知道);如果參數(shù)是簡單類型,就可以指定了。例如我們可以為BookSvc增加一個echo()方法,參數(shù)是一個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”。如果有多個參數(shù),只要把這些參數(shù)都列在URL里即可。

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

          主站蜘蛛池模板: 红安县| 崇信县| 玛纳斯县| 临江市| 绥江县| 印江| 石嘴山市| 太保市| 新津县| 德化县| 岱山县| 无极县| 县级市| 潜江市| 全椒县| 玛多县| 垦利县| 循化| 平罗县| 大冶市| 古蔺县| 白沙| 武强县| 焦作市| 德州市| 贵阳市| 贡嘎县| 库车县| 哈密市| 班玛县| 龙陵县| 年辖:市辖区| 宝丰县| 萝北县| 大新县| 丰县| 姜堰市| 延川县| 上栗县| 明星| 北海市|