我的漫漫程序之旅

          專注于JavaWeb開發
          隨筆 - 39, 文章 - 310, 評論 - 411, 引用 - 0
          數據加載中……

          MyEclipse開發WebServices(基于Annotations)

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

          15.4.1 XFire的標注服務開發

                 XFire支持JRS181方式的標注服務開發,這樣開發的時候只需要編寫一個普通的Java類,然后加上標注信息后,加入services.xml中即可。我們仍然在第2節所開發的HelloWorldService項目中進行修改。下面是創建的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 類之前,注明這個類的部分方法可以被發布為 Web 服務(還記得上一章提到的標注嘛?這個標注最終被XFire讀取后進行分析后會進一步處理成Web服務)。它的屬性用于設置 Web 服務被發布時的配置信息,常用的屬性包括:

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

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

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

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

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

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

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

          package echo;

          import javax.jws.WebService;

          @WebService

          publicclass Jsr181EchoService {

              public String echo(

              String input) {

                 return input;

              }

          }

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

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

                 最后一步,乃是在XFire中配置并發布此服務了,在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>

          ,此配置相當的簡單,需要注意的是serviceClass就是我們寫有Web服務標注的Java類,而serviceFactory則必須是AnnotationServiceFactory(標注服務工廠),否則此Web服務將無法正常發布。

          好了,現在按照15.2.4一節的內容發布項目并運行后,即可在瀏覽器中鍵入下面地址進行測試了:

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

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

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



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

          主站蜘蛛池模板: 伊宁市| 珠海市| 峡江县| 澄城县| 禄劝| 江川县| 亳州市| 华宁县| 太仆寺旗| 轮台县| 杭锦后旗| 夏邑县| 渭南市| 阿拉尔市| 西丰县| 洪泽县| 绥棱县| 上杭县| 连江县| 中阳县| 英吉沙县| 玛曲县| 奎屯市| 宁远县| 汉源县| 宣恩县| 宁津县| 洪泽县| 云阳县| 原阳县| 隆化县| 梁河县| 调兵山市| 中江县| 嘉荫县| 岳阳市| 资中县| 弥渡县| 嫩江县| 兰溪市| 南昌县|