欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

Axis學習筆記

系統 1806 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條評論
主站蜘蛛池模板: 久久精品免费人成人A片 | 九九99久久| 精品96久久久久久中文字幕无 | 两性免费视频 | 中国美女撒尿txxxxx视频 | 草草影院浮力 | 国产精品视频免费观看 | 中文字幕在线免费观看 | 在线观看国产视频 | 久色乳综合思思在线视频 | 亚洲一区久久久 | a天堂资源在线观看 | 成人深夜视频在线观看 | 97精品伊人久久久大香线蕉 | 国产成人综合日韩精品婷婷九月 | 天天做天天添天天谢 | 三级黄色片在线观看 | 国产第一页浮力 | 精品免费久久久久久成人影院 | 久久华人 | 久草精品在线 | 97在线观看视频 | 五月综合激情婷婷六月色窝 | 特一级毛片 | 免费精品久久 | 天天干夜夜夜 | 亚洲精品午夜国产va久久成人 | 国产a区 | 日韩一区二区三区四区五区 | 奇米88| 久久视屏这里只有精品6国产 | 精品欧美一区二区在线看片 | 天天摸天天操免费播放小视频 | 色老头综合网 | 四虎伊人 | 二级黄绝大片中国免费视频 | 婷婷色综合 | 久久综合久久久久 | 亚洲 欧美 校园 | 精品国产福利在线 | 99久久精品国产导航 |