<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    持之以恒

    記錄本
    posts - 4, comments - 32, trackbacks - 0, articles - 74
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理
     因為工作關系需要從事Webservice的開發工作,公司的webserivce是由Apache的AXIS來實現的,以前對這個了解不算多,不過經過幾天的研究,特奉上小小的心得一篇。

    先介紹下本人開發環境吧。 JDK 1.4.2 + Myeclipse 6.0(實在經不起誘惑,嘗嘗鮮) + Tomcat 5.0.28 + AXIS 1.4。 AXIS 1.4包可以在http://ws.apache.org/axis/ 找到。 假設所有的環境你已經搭好,并且AXIS包也已經下好了。OK, Here we go~

    解壓axis-bin-1_4.zip這個包可以看到webapps目錄,雙擊進入把里面的AXIS文件夾拷到 %TOMCAT_HOME%\webapps目錄下,之后拷貝activation.jar、mail.jar、tools.jar到%TOMCAT_HOME%\webapps\axis\WEB-INF\lib目錄下。啟動tomcat,訪問http://localhost:8080/axis/happyaxis.jsp 如果訪問成功,恭喜你!基本的配置你已經做完了。

    PS:此處的%TOMCAT_HOME%指的是Tomcat的安裝目錄,至于那另外的三個jar包,J2EE 1.4庫里就能找的到。

    現在來說一下最關鍵的Webservice的發布。AXIS提供了兩種發布方式,一種是即時發布(Instant Deployment),另外一種是定制發布(Custom Deployment)。即時發布提供了一種非常簡單的webservice的發布方式,但是其中限制太多,因此在實際的開發中定制發布才是首選。這里也將會以定制發布為重點來介紹。

    1.即時發布 JWS (Java Web Service) Files - Instant Deployment

    即時發布提供了一種非常簡單發布方式,發布者只要有Java源代碼(也就是.java文件),然后把其后綴名改成jws(也就是 java web service的縮寫)拷貝到%TOMCAT_HOME%\webapps\axis目錄下即完成了所有的發布工作。AXIS的編譯引擎會處理接下來的所有事情。下面是一段示例代碼:

    java 代碼
    1. public class HelloAXIS {
    2. public String Hello(String name){
    3. return "AXIS say hello to " + name;
    4. }
    5. }

    把 HelloAXIS.java 文件改成 HelloAXIS.jws 然后拷貝到%TOMCAT_HOME%\webapps\axis目錄下,啟動Tomcat之后訪問 http://localhost:8080/axis/HelloAXIS.jws 如果能看到 Click to see the WSDL這個超鏈接就說明已經發布成功了,點擊進去就可以看到這個Webservice的WSDL描述文件。server端的發布已經完成了,接下來就是編寫Client端測試代碼了。

    java 代碼
    1. package com.chnic.test;
    2. import java.net.URL;
    3. import javax.xml.namespace.QName;
    4. import org.apache.axis.client.Call;
    5. import org.apache.axis.client.Service;
    6. public class Test {
    7. public static void main(String[] args) throws Exception{
    8. String targetEendPoint = "http://localhost:8080/axis/HelloAXIS.jws" ;
    9. Service service = new Service();
    10. Call call = (Call) service.createCall();
    11. call.setOperationName( new QName(targetEendPoint, "Hello" ));
    12. call.setTargetEndpointAddress( new URL(targetEendPoint));
    13. String result = (String) call.invoke( new Object[]{ "Robert" });
    14. System.out.println(result);
    15. }
    16. }

    測試代碼很簡單,如果熟悉java反射機制的朋友不用兩分鐘就能看明白。運行后客戶端控制臺出現 AXIS say hello Robert。測試成功。果然很簡單吧。不過在這簡單背后卻是以犧牲靈活性為代價的。假如你現在手里只有.class 或者一個jar包,jws就不再能滿足你的需求了,最要命的就是即時發布不支持帶包的類,這點AXIS的用戶手冊上寫的也很明白。

    Important: JWS web services are intended for simple web services. You cannot use packages in the pages, and as the code is compiled at run time you can not find out about errors until after deployment. Production quality web services should use Java classes with custom deployment.

     

    2.定制發布 Custom Deployment - Introducing WSDD

    比起即時發布定制發布更加煩瑣也更復雜,但是換來的卻是更大的靈活性,因此在實際項目中定制發布還是不二的選擇。定制發布需要你自己編寫一個WSDD(Web Service Deployment Descriptor)文件,這個東東類似與XML稍后會做出介紹。廢話不多說,我們來看代碼:

    java 代碼
    1. package com.chnic.webservice;
    2. public class HelloWorld {
    3. public HelloWorld(){
    4. }
    5. public String hello(String str){
    6. return "Hello " + str;
    7. }
    8. public int add( int a, int b){
    9. return a + b;
    10. }
    11. }

    一個帶包的很簡單的類,在eclipse下編譯后按照包名拷到 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes 目錄下。以這個類為例,拷貝完之后這個HelloWorld.class的路徑就是 %TOMCAT_HOME%\webapps\axis\WEB-INF\classes\com\chnic\webservice。PS: 如果嫌這樣太麻煩,可以另外建一個Java Web工程用myeclipse的發布工具發布到Tomcat之后,整體一次性拷貝到websericve的工程中。

    接下來就需要編寫發布文件deploy.wsdd。到%TOMCAT_HOME%\webapps\axis\WEB-INF 目錄下建立這個文件并在其中添加如下內容:

    xml 代碼
    1. < deployment xmlns = http://xml.apache.org/axis/wsdd/
    2. xmlns:java = "http://xml.apache.org/axis/wsdd/providers/java" >
    3. < service name = "HelloWorld" provider = "java:RPC" >
    4. < parameter name = "className" value = "com.chnic.webservice.HelloWorld" />
    5. < parameter name = "allowedMethods" value = "*" />
    6. </ service >
    7. </ deployment >

    簡單的介紹下各個節點的含義,"HelloWorld"當然是這個webservice的名字,后面緊跟的java:RPC指的是服務類型。這里一共有有4種類型,分別是:RPC, Document, Wrapped 和 Message。有興趣可以看下 org.apache.axis.providers這個包和子包下面的類的API文檔。之后的parameter節點第一個當然是指出具體的類,第二個從字面上也很好理解:允許調用的方法。這里的配置告訴引擎可以調用所有的public方法,當然你也可以自己指定。

    編寫完配置發布文件之后,cmd打開windows的控制臺,進入%TOMCAT_HOME%\webapps\axis\WEB-INF目錄下鍵入如下命令

    1. java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient deploy.wsdd

    之后控制臺返回Processing file deploy.wsdd 和 Done processing 這兩段話即說明發布成功。(此時會在同級目錄生成一個server-config.wsdd文件 )在這里的AdminClient是AXIS提供的一個客戶端管理工具。至于java.ext.dirs的含義可以去了解一下classloader和JVM類裝載機制方面的知識,在這里就不多解釋。 還有一點要注意的是在發布的時候Tomcat服務必須處于啟動狀態,否則就會拋出一堆無法連接的異常信息。發布成功之后你可以通過訪問 http://localhost:8080/axis/servlet/AxisServlet 來查看你所有的定制發布的服務。

    客戶端測試代碼
    1. String targetEendPoint = "http://localhost:8080/axis/services/HelloWorld" ;
    2. Service service = new Service();
    3. Call call = (Call) service.createCall();
    4. call.setTargetEndpointAddress( new URL(targetEendPoint));
    5. call.setOperationName( new QName(targetEendPoint, "hello" ));
    6. String result = (String) call.invoke( new Object[]{ "Robert" });
    7. System.out.println(result);
    8. call.setOperationName( new QName(targetEendPoint, "add" ));
    9. Integer res = (Integer) call.invoke( new Object[]{ new Integer( 1 ), new Integer( 2 )});
    10. System.out.println( "The result is: " + res);

    運行測試代碼,控制臺顯示 Hello Robert 和 The result is: 3 這兩句話,說明發布成功。仔細觀察下發現其實除了那個targetEndpoint 之外,即時發布和定制發布的客戶端調用代碼基本上都是一樣的。定制發布的URL可以在WSDL文件里找到。 其實定制發布還有一些高級特性,這個就留到下一篇再說吧。



    小白

    評論

    # re: 轉---------利用AXIS開發Webservice(一) —— 如何發布自己的webservice (目的:學習)[未登錄]  回復  更多評論   

    2013-10-30 14:29 by 1
    1

    # re: 轉---------利用AXIS開發Webservice(一) —— 如何發布自己的webservice (目的:學習)[未登錄]  回復  更多評論   

    2013-10-30 14:30 by 1
    沒懂
    主站蜘蛛池模板: 亚洲日韩AV无码一区二区三区人 | 一区二区免费视频| 亚洲色偷偷狠狠综合网| 男女猛烈xx00免费视频试看| 四虎影视免费永久在线观看| 亚洲国产成人无码AV在线 | 久久99亚洲网美利坚合众国| 中出五十路免费视频| 亚洲熟妇av一区二区三区漫画 | 亚洲av一本岛在线播放| 成人免费在线看片| 亚洲另类激情专区小说图片| 一级毛片一级毛片免费毛片| 亚洲国产三级在线观看| 全部一级一级毛片免费看| 97在线视频免费| 亚洲综合色一区二区三区小说| 一区二区三区免费高清视频| 国产成人精品久久亚洲| 免费观看91视频| 亚洲女同成人AⅤ人片在线观看| 一级成人生活片免费看| 午夜影视日本亚洲欧洲精品一区| 97久久免费视频| 亚洲欧美第一成人网站7777| 免费中文字幕在线| 一个人看的www免费视频在线观看| 亚洲美女视频免费| 光棍天堂免费手机观看在线观看| 亚洲最大的成网4438| 最新仑乱免费视频| eeuss影院ss奇兵免费com| 91亚洲精品视频| 国产精品无码素人福利免费| 国产无遮挡又黄又爽免费网站 | 美女视频黄视大全视频免费的| 成人免费的性色视频| 亚洲aⅴ天堂av天堂无码麻豆| 国产亚洲精品成人AA片新蒲金| 三级片免费观看久久| 久久久久亚洲精品成人网小说 |