黄色网页视频 I 影音先锋日日狠狠久久 I 秋霞午夜毛片 I 秋霞一二三区 I 国产成人片无码视频 I 国产 精品 自在自线 I av免费观看网站 I 日本精品久久久久中文字幕5 I 91看视频 I 看全色黄大色黄女片18 I 精品不卡一区 I 亚洲最新精品 I 欧美 激情 在线 I 人妻少妇精品久久 I 国产99视频精品免费专区 I 欧美影院 I 欧美精品在欧美一区二区少妇 I av大片网站 I 国产精品黄色片 I 888久久 I 狠狠干最新 I 看看黄色一级片 I 黄色精品久久 I 三级av在线 I 69色综合 I 国产日韩欧美91 I 亚洲精品偷拍 I 激情小说亚洲图片 I 久久国产视频精品 I 国产综合精品一区二区三区 I 色婷婷国产 I 最新成人av在线 I 国产私拍精品 I 日韩成人影音 I 日日夜夜天天综合

Axis學(xué)習(xí)筆記

系統(tǒng) 2192 0

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

?

Axis到目前為止,最新版本為1.4版,阿帕奇官網(wǎng)上已經(jīng)有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 目錄結(jié)構(gòu)如下:

Axis學(xué)習(xí)筆記

目錄說明如下:

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文件中不允許帶有包名稱,故只能使用默認(rèn)包,這種發(fā)布方式顯得非常笨拙.

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

?

通過下面三個例子進(jìn)行說明。 在開始例子前,把

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 文件,內(nèi)容為 :

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

  

??

?

?

?

?

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

?

    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"; 
        // 創(chuàng)建一個服務(wù)(service)調(diào)用(call) 
        Service service = new Service(); 
        Call call = (Call) service.createCall();// 通過service創(chuàng)建call對象 
        // 設(shè)置service所在URL 
        call.setTargetEndpointAddress(new java.net.URL(endpoint)); 

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

        call.setOperationName("processService"); 
        // Object 數(shù)組封裝了參數(shù),參數(shù)為"This is Test!",調(diào)用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 方法進(jìn)行測試,可以看到屏幕打印出: "This is Test!" ,可以看到 axis_example/WEB-INF 目錄下生 jwsClasses /jws /MyService.class 文件—— axis 會根據(jù)你訪問時的 endpoint ,自動編譯其中的 *.jws 文件,并置于生成的 jwsClasses 相應(yīng)目錄下。

?

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

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

processService(String arg) 改寫為

processService(String arg,String arg2)

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

2 啟動 tomcat 后控制臺出現(xiàn)下面警告:

- 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 文件,內(nèi)容為 :

    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 方法,內(nèi)容為: ?

?

?

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

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

實例 3 Stubs )步驟 ? ?

1. axis_example/src 下新建一 MyServic.java 文件,內(nèi)容為 :

?

    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 )文件,內(nèi)容為:

    <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 目錄下執(zhí)行:

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

?

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

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

6. 更改 axis_example/src /Client.java 中的 main 方法,內(nèi)容為:

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

?

?

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

① 兩種不同的 endpoint ?

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

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

② 兩種不同的編譯方式 ?

DII :根據(jù) 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 的基礎(chǔ)上采用了代理機制 , 實際上和 DII 區(qū)別不大,。

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

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

axis 提供了 wsdl2java 工具, web service 服務(wù)器端提供了一個地址,可以訪問到 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

?

生成相應(yīng)的客戶端 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

?

生成相應(yīng)的客戶端 java 文件。

參數(shù)

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

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

如果不指定包名, axis 會根據(jù)命令參數(shù) WSDL-URI 生成相應(yīng)的包名,如 localhost\axis_example\jws\MyService_jws

?

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

MyServiceSoapBindingStub.java (相當(dāng)于上面的 MyService.java

MyService_PortType.java (相當(dāng)于上面的 MyServiceInterface.java

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

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

    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學(xué)習(xí)筆記


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

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

【本文對您有幫助就好】

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

發(fā)表我的評論
最新評論 總共0條評論