我的漫漫程序之旅

          專注于JavaWeb開發(fā)
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數(shù)據(jù)加載中……

          MyEclipse開發(fā)WebServices(基于Annotations)

          XFire支持JSR 181標注方式的Web服務開發(fā),另外,所有支持Java EE 5的應用服務器(Tomcat只是Web層的,本身不支持EJBWeb服務開發(fā)),都支持這種開發(fā)方式,例如:JBossGlassFishWebLogic10等等,本節(jié)就簡要討論使用XFire開發(fā)標注式Web服務和用JBoss開發(fā)的過程。

          15.4.1 XFire的標注服務開發(fā)

                 XFire支持JRS181方式的標注服務開發(fā),這樣開發(fā)的時候只需要編寫一個普通的Java類,然后加上標注信息后,加入services.xml中即可。我們?nèi)匀辉诘?/span>2節(jié)所開發(fā)的HelloWorldService項目中進行修改。下面是創(chuàng)建的Web服務類echo.Jsr181EchoService

          package echo;

          import javax.jws.WebMethod;

          import javax.jws.WebParam;

          import javax.jws.WebResult;

          import javax.jws.WebService;

          @WebService(name = "EchoService", serviceName="EchoServiceTest", targetNamespace = "http://www.openuri.org/2004/04/HelloWorld")

                  publicclass Jsr181EchoService

          {

              @WebMethod(operationName = "echoString", action = "urn:EchoString")

              @WebResult(name = "echoResult")

              publicString echo(@WebParam(name = "echoParam", header = true) String input)

              {

                  return input;

              }

          }

          這個代碼中有很多標注,絕大部分都可以在最后生成的WSDL文檔中找到對應值。

          @WebService這個標注放置在 Java 類之前,注明這個類的部分方法可以被發(fā)布為 Web 服務(還記得上一章提到的標注嘛?這個標注最終被XFire讀取后進行分析后會進一步處理成Web服務)。它的屬性用于設置 Web 服務被發(fā)布時的配置信息,常用的屬性包括:

          name(可選)Web 服務的名字,WSDL wsdl:portType元素的 name屬性和它保持一致,默認是 Java類或者接口的名字,也可以進行自定義,例如本例中的EchoService 

          serviceName(可選)Web 服務的服務名,WSDL wsdl:service元素的 name屬性和它保持一致,默認是Java類的名字(Jsr181EchoService),不過如果設置了name屬性,則名字改為name屬性的取值。

          targetNamespace(可選) WSDL文件所使用的 namespace,該 Web 服務中所產(chǎn)生的其他 XML文檔同樣采用這個作為namespace,一般取值為Web服務所在網(wǎng)站的名字,不過看起來任意取值并無出錯之處。

          @WebMethod(可選) 標注放在需要發(fā)布成 Web 服務的方法之前,有一些屬性可以設置。例如openrationName指明了SOAP調(diào)用時所看到的方法名為echoString,而不是類中的方法名echoaction則定義了操作的類型。一個類里面可以定義多個@WebMethod

          @WebResult(可選)標注定義了返回值(SOAP Response Envolope)中的name(名字)echoResult

          @WebParam(可選)則定義了哪些參數(shù)可以作為Web服務中的遠程可見的參數(shù)被調(diào)用,name設置了其屬性。

          乍看之下,這個Web服務中所用的標注有點多,實際上,這些標注可以不加任何屬性,例如只寫下@WebService@WebMethod即可,甚至于整個類只需要一個@WebService標注即可,此時代碼如下所示:

          package echo;

          import javax.jws.WebService;

          @WebService

          publicclass Jsr181EchoService {

              public String echo(

              String input) {

                 return input;

              }

          }

          。此時最后所生成的Web服務中,所有的操作名,方法名和參數(shù)名都和此通Java類中的名稱一致。在這種情況下,該Web服務的訪問地址應為:

          http://localhost:8080/HelloWorldService/services/Jsr181EchoService?wsdl

                 最后一步,乃是在XFire中配置并發(fā)布此服務了,在services.xml中加入的Web服務配置格式如下:

              <service>

                 <!-- 如果配置文件中配置了額外的name屬性,那么最終的Web Service 名字將會以此處為準,即:

                     ServiceName?wsdl;同樣的namespace的取值也會覆蓋Java類中的標注的值。

                     <name>ServiceName</name>

                     <namespace>http://www.un.gov/HelloEcho</namespace>

                 -->

                 <serviceClass>echo.Jsr181EchoService</serviceClass>

                 <serviceFactory>

                     org.codehaus.xfire.annotations.AnnotationServiceFactory

                 </serviceFactory>

              </service>

          ,此配置相當?shù)暮唵危枰⒁獾氖?/span>serviceClass就是我們寫有Web服務標注的Java類,而serviceFactory則必須是AnnotationServiceFactory(標注服務工廠),否則此Web服務將無法正常發(fā)布。

          好了,現(xiàn)在按照15.2.4一節(jié)的內(nèi)容發(fā)布項目并運行后,即可在瀏覽器中鍵入下面地址進行測試了:

          http://localhost:8080/HelloWorldService/services/EchoServiceTest?wsdl

          EchoServiceTest的名字是因為在類中標注了@WebServiceserviceName屬性。之后就可以在Web Service Explorer中對它進行測試,或者是生成客戶端代碼。

          從這里看到這種開發(fā)方式相對也簡單的多,而且您將在下一節(jié)看到如果是Java EE 5的容器,開發(fā)過程將更加的簡單,而且不需要XFire類庫及其配置文件。



          posted on 2008-04-23 15:02 々上善若水々 閱讀(2542) 評論(0)  編輯  收藏 所屬分類: WebService

          主站蜘蛛池模板: 杂多县| 甘德县| 三明市| 吉安县| 砀山县| 陆丰市| 朝阳市| 石嘴山市| 三门县| 株洲县| 达州市| 红原县| 班戈县| 西和县| 永登县| 小金县| 苍山县| 弋阳县| 长治市| 阜城县| 恩平市| 西安市| 德令哈市| 瑞丽市| 内黄县| 原平市| 保山市| 枞阳县| 当雄县| 白城市| 根河市| 通江县| 廊坊市| 鹤山市| 会宁县| 康保县| 桦甸市| 长子县| 东山县| 黄骅市| 江永县|