亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

Axis學習筆記

系統 1731 0

關于WEBSERVICE的架構有很多,本章著重記錄Axis框架的簡單應用。在其后的文章中將給出高級應用示例以及SUN公司GLASSFISH中集成的Metro框架的應用。

?

Axis到目前為止,最新版本為1.4版,阿帕奇官網上已經有2年沒有更新過此項目。

?

實例(參考了 axis-bin-1_4.zip \axis-1_4\samples\userguide 中的例子)使用版本為 Axis1.4.

axis-bin-1_4.zip 下載地址 http://www.apache.org/dist/ws/axis/1_4/

工程 axis_example 目錄結構如下:

Axis學習筆記

目錄說明如下:

jws: 存放 *.jws 文件

src : java 源碼 ? ?

WEB-INF/classes : java 編譯后的 class 文件

WEB-INF/lib : 需要用到的 jar

? Axis

1. Dynamic Invocation Interface ( DII)

2 . Dynamic Proxy 方式

3. Stubs 方式

JWS文件中不允許帶有包名稱,故只能使用默認包,這種發布方式顯得非常笨拙.

使用WSDD文件發布的WEBSERVICE服務,則相對而言,有更大的靈活性.當使用的使第三方提供的jar包時,無法得到對方提供的源代碼,此時JWS明顯無法勝任自己的工作.而且,使用WSDD文件發布WEB服務,還可以在其中使用如Handler.使用非常方便,故項目中大多使用第三種方式也就是使用WSDD文件發布服務.

?

通過下面三個例子進行說明。 在開始例子前,把

axis-bin-1_4.zip \axis-1_4\lib 下的所有包拷貝到 axis_example/WEB-INF/lib 目錄下,

axis-bin-1_4.zip \axis-1_4\webapps\axis\WEB-INF 下的 web.xml 文件拷貝到 axis_example/WEB-INF 目錄下。

實例 1 DII )步驟

?

1. axis_example /src 新建一 MyServic.java 文件,內容為 :

    public class MyService { 
    public String processService(String arg){ 
        return arg;
    }   
}

  

??

?

?

?

?

2. 無需編譯 (編譯由 axis 進行 ) ,拷貝 MyServic.java axis_example/jws 目錄下,更改文件名為 MyService.jws 3. axis_example/src 新建一 Client.java 文件,內容為 :

?

    import org.apache.axis.client.Call; 
import org.apache.axis.client.Service; 
import javax.xml.namespace.QName; 
import javax.xml.rpc.ServiceFactory; 
import java.net.URL; public class Client { 
    public static void main(String [] args) throws Exception { 
        // 指出service所在URL 
        String endpoint = "http://localhost:" + "8081" + "/axis_example/jws/MyService.jws"; 
        // 創建一個服務(service)調用(call) 
        Service service = new Service(); 
        Call call = (Call) service.createCall();// 通過service創建call對象 
        // 設置service所在URL 
        call.setTargetEndpointAddress(new java.net.URL(endpoint)); 

        // 方法名(processService)與MyService.java方法名保持一致 

        call.setOperationName("processService"); 
        // Object 數組封裝了參數,參數為"This is Test!",調用processService(String arg) 
        String ret = (String) call.invoke(new Object[]{"This is Test!"});

        System.out.println(ret); 
    }
} 
  

? 4. axis_example 工程放入 tomcat/webapps ,啟動 tomcat 5. 編譯 Client.java ,運行其中的 main 方法進行測試,可以看到屏幕打印出: "This is Test!" ,可以看到 axis_example/WEB-INF 目錄下生 jwsClasses /jws /MyService.class 文件—— axis 會根據你訪問時的 endpoint ,自動編譯其中的 *.jws 文件,并置于生成的 jwsClasses 相應目錄下。

?

(通過 http://localhost:8081/axis_example/jws/MyService.jws?wsdl 可以查看生成的 WSDL 文件—— SOAP 服務描述文件)

1 在上面的 new Object[]{"This is Test!"} 語句中,只傳遞了一個參數。如果 MyServic.java

processService(String arg) 改寫為

processService(String arg,String arg2)

你可以通過 new Object[]{"test","test2"} 傳遞多個參數。

2 啟動 tomcat 后控制臺出現下面警告:

- Unable to find required classes (javax.activation.DataHandler and javax.mail.i

?

nternet.MimeMultipart). Attachment support is disabled.

這是因為缺少 activation.jar mail.jar (本文中的實例可以忽略此警告)。

activation.jar (目前版本為 1.1 )下載地址

http://java.sun.com/products/javabeans/jaf/downloads/index.html

mail.jar (目前版本為 1.4 )下載地址

http ://java.sun.com/products/javamail/downloads/

實例 2 Dynamic Proxy )步驟

1. axis_example /src 新建一 MyServiceInterface.java 文件,內容為 :

    import java.rmi.Remote; 
import java.rmi.RemoteException; 

public interface MyServiceInterface extends Remote { 
    public String processService(String arg) throws RemoteException; 
} 
  

?? 編譯 MyServiceInterface.java 2. 修改 axis_example /src MyServic.java 文件,把類聲明

public class MyService 改為 public class MyService implements MyServiceInterface

3. 無需編譯,拷貝 MyServic.java axis_example/jws 目錄下,更改文件名為 MyService.jws 4. 更改 axis_example/src /Client.java 中的 main 方法,內容為: ?

?

?

5. axis_example 工程放入 tomcat/webapps ,啟動 tomcat ? ?

6. 編譯 Client.java ,運行其中的 main 方法進行測試,可以看到屏幕打印出: " This is Dynamic Proxy test!"

實例 3 Stubs )步驟 ? ?

1. axis_example/src 下新建一 MyServic.java 文件,內容為 :

?

    public class MyService { 
    public String processService(String arg){ 
        return arg; 
    } 

} 
  

?

編譯 MyServic.java

2. 在新建一 deploy.wsdd (可參考 axis-bin-1_4.zip \axis-1_4\samples 中的 deploy.wsdd )文件,內容為:

    <deployment xmlns="http://xml.apache.org/axis/wsdd/"          xmlns:java="http://xml.apache.org/axis/wsdd/providers/java"> 
 <service name="MyService" provider="java:RPC"> 
  <parameter name="className" value="MyService"/>
  <parameter name="allowedMethods" value="processService"/> 
 </service> 
</deployment> 

  

?

?

?

?

3. 啟動 tomcat

4. axis_example/WEB-INF 目錄下執行:

java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8081/axis_example/servlet/AxisServlet deploy.wsdd

?

執行后可看到在 axis_example/WEB-INF 目錄下生成 server-config.wsdd 文件。

5. 重新啟動 tomcat , 以便加載 server-config.wsdd 文件。

6. 更改 axis_example/src /Client.java 中的 main 方法,內容為:

    public static void main(String [] args) throws Exception { 
        // 指出service所在URL 
        String endpoint = "http://localhost:" + "8081" + "/axis_example/services/MyService"; 
        // 創建一個服務(service)調用(call) 
        Service service = new Service(); 
        Call call = (Call) service.createCall();// 通過service創建call對象 
        // 設置service所在URL 
        call.setTargetEndpointAddress(new java.net.URL(endpoint)); 
        // 方法名(processService)與MyService.java方法名保持一致 
        call.setOperationName("processService"); 
        // Object 數組封裝了參數,參數為"This is Test!",調用processService(String arg) 
        String ret = (String) call.invoke(new Object[]{"This is Test!"}); 
        System.out.println(ret); 
    } 
  

?

?

? 注: 在這里可以看出, DII 方式安全性不高( url MyService.jws axis 自動生成),且無法進行一些復雜的配置, Dynamic Invocation Interface(DII) Stubs 方式的區別主要有兩個地方:

① 兩種不同的 endpoint ?

DII http://localhost:8081/axis_example/jws/ MyService.jws

Stubs http://localhost:8081/axis_example/services/MyService

② 兩種不同的編譯方式 ?

DII :根據 endpoint 訪問 web service 時, axis 自動編譯 endpoint 指定的 *.jws 文件,并放在生成的 WEB-INF/ jwsClasses 目錄下。

Stubs :手工編譯 java 文件,手工編寫 server-config.wsdd 配置文件(這里可以編寫 deploy.wsdd ,用 axis 提供的 java -Djava.ext.dirs=lib org.apache.axis.client.AdminClient -lhttp://localhost:8081/axis_example/servlet/AxisServlet deploy.wsdd

?

命令生成 server-config.wsdd 文件中的其他通用部分)

Dynamic Proxy 方式僅僅在 DII 的基礎上采用了代理機制 , 實際上和 DII 區別不大,。

? 7. 編譯 Client.java ,運行其中的 main 方法進行測試,可以看到屏幕打印出: " This is Dynamic Proxy test!"

(通過 http://localhost:8081/axis_example/services/MyService?wsdl 可以查看生成的 WSDL 文件—— SOAP 服務描述文件)

axis 提供了 wsdl2java 工具, web service 服務器端提供了一個地址,可以訪問到 WSDL 文件, wsdl2java 工具格式為: java org.apache.axis.wsdl.WSDL2Java [options] WSDL-URI

采用 DII 方式,可以使用

?

java -Djava.ext.dirs= E:\project\axis_example\WEB-INF\lib org.apache.axis.wsdl.WSDL2Java http://localhost:8081/axis_example/jws/MyService.jws?wsdl -p test.mytest -o E:\project\axis_example\src

?

生成相應的客戶端 java 文件。

采用 Stubs 方式,可以使用

java -Djava.ext.dirs= E:\project\axis_example\WEB-INF\lib org.apache.axis.wsdl.WSDL2Java http://localhost:8081/axis_example/services/MyService?wsdl -p test.mytest -o E:\project\axis_example\src

?

生成相應的客戶端 java 文件。

參數

- p ? 指定生成的 java 文件包名

-o ? 指定生成的 java 文件輸出目錄

如果不指定包名, axis 會根據命令參數 WSDL-URI 生成相應的包名,如 localhost\axis_example\jws\MyService_jws

?

上述命令會在 E:\project\axis_example\src\test\mytest 目錄下生成四個文件:

MyServiceSoapBindingStub.java (相當于上面的 MyService.java

MyService_PortType.java (相當于上面的 MyServiceInterface.java

MyServiceService.java/MyServiceServiceLocator.java Service Locator 模式,隱藏了具體的業務邏輯)

? 編寫 junit 單元測試,在 axis_example\src\test\mytest 下新建一 TestClient.java 文件(拷貝 junit.jar 包到 axis_example/WEB-INF 目錄下),內容為:

    package test.mytest; 

import junit.framework.TestSuite;  
import junit.framework.TestCase; 
import junit.framework.Test; 

public class TestClient extends TestCase { 

    public TestClient(String string) { 
        super(string); 
    } 

    public void MyServiceClient() throws Exception { 

        MyServiceService service = new MyServiceServiceLocator(); 

        MyService_PortType client = service.getMyService() ; 

        String ret = client.processService("This is Junit Test!"); 

        System.out.println(ret); 

    } 

    public static Test suite() { 

        TestSuite suite = new TestSuite(); 

        suite.addTest(new TestClient("MyServiceClient"));

        return suite; 
    } 

} 

  

?? 8. 編譯上面四個 service 文件,并編譯運行 TestClient.java ,看到屏幕打印出: " This is Junit Test!"

Axis學習筆記


更多文章、技術交流、商務合作、聯系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦!!!

發表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 国产一级精品视频 | 亚洲国产第一区 | 伊人精品视频一区二区三区 | 看免费的毛片 | 天天碰免费视频 | 日韩欧美国产精品第一页不卡 | 免费观看亚洲视频 | 国产臀控福利视频在线 | 成人在线免费视频播放 | 久久夜色tv网站免费影院 | 亚洲久久网 | 精品欧美一区二区三区在线观看 | 久久一日本道色综合久久 | 99热这里只有精品66 | 两性视频久久 | 99热99| 久久精品 | 成年女人免费看一级人体片 | 一 级做人爱全视频在线看 一a级毛片 | 精品欧美日韩一区二区三区 | 天天拍夜夜添久久精品中文 | 中文字幕亚洲一区 | 四虎免费久久影院 | 四虎影视www四虎免费 | 夜夜操夜夜骑 | 97久久久久国产精品嫩草影院 | 欧美日本一道免费一区三区 | 亚洲欧洲一区二区三区久久 | 日韩伦理一区二区三区 | 福利姬在线视频国产观看 | 四虎精品永久免费 | 亚洲aa| 福利在线看| 美女牲交视频一级毛片 | 亚洲国产小视频 | 国产美女精品在线 | 五月婷婷激情四射 | 亚洲精品亚洲人成在线播放 | a集毛片 | 成年ssswww中国女人 | 日日夜夜操操 |