隨筆 - 251  文章 - 504  trackbacks - 0
          <2006年8月>
          303112345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          本博客系個人收集材料及學習記錄之用,各類“大俠”勿擾!

          留言簿(14)

          隨筆分類

          收藏夾

          My Favorite Web Sites

          名Bloger

          非著名Bloger

          搜索

          •  

          積分與排名

          • 積分 - 202933
          • 排名 - 284

          最新評論

          目前看到的有三種比較簡單的方法:
          1使用靜態(tài)的stub
          通過wsdl2java工具,處理相應ws的wsdl文件,我們可以得到遠程ws的stub?直接調(diào)用這
          個stub即可
          AXIS提供的wsdl2java工具,如下:
          java?org.apache.axis.wsdl.WSDL2Java?(WSDL-file-URL)
          我們直接調(diào)用stub即可
          eclipse也有相應的插件可以直接import?wsdl來產(chǎn)生stub,如果你安裝了EMF?all?in?one版本的eclipse?3.1,就可以在視圖里把Web?Service的相關(guān)視圖打開,接著就可以通過Web?Service的Wizard來創(chuàng)建出相關(guān)的Web?Service?Client或者Server

          2?Dynamic?Proxy
          根據(jù)遠程wsdl,利用javax.xml.rpc.Service的getPort函數(shù),可以得到遠程ws的一個?D
          ynamic?Proxy
          編寫代理接口

          public?interface?HelloClientInterface
          extends?Java.rmi.Remote
          {
          ????public?String?getName(String?name)
          ????????throws?Java.rmi.RemoteException;
          }
          ?

          客戶端程序TestHelloClient.Java?

          import?Javax.xml.rpc.Service;
          import?Javax.xml.rpc.ServiceFactory;
          import?Java.net.URL;
          import?Javax.xml.namespace.QName;

          public?class?TestHelloClient?
          {
          ????public?static?void?main(String[]?args)
          ????????{
          ????????try
          ????????{
          ???String?wsdlUrl?=?"http://localhost:8080/axis/HelloClient.jws?wsdl";
          ???String?nameSpaceUri?=?"http://localhost:8080/axis/HelloClient.jws";
          String?serviceName?=?"HelloClientService";
          String?portName?=?"HelloClient";
          ServiceFactory?serviceFactory?=?ServiceFactory.newInstance();
          Service?afService?=?serviceFactory.createService(new?URL(wsdlUrl),
          ???????????new?QName(nameSpaceUri,?serviceName));
          ?HelloClientInterface?proxy?=?(HelloClientInterface)afService.getPort(new?QName(
          ??????????????nameSpaceUri,?portName),?HelloClientInterface.class);
          ?System.out.println("return?value?is?"+proxy.getName("john")?)?;
          ????????}catch(Exception?ex)
          ????????{
          ????????????ex.printStackTrace()?;
          ????????}
          ????}
          }
          ?

          3?DII
          Dynamic?Invocation?Interface?這個最好理解,比如你動態(tài)獲得了一個類,只知道類的
          名字,你要調(diào)用他的一個方法,只好使用reflection得到你要調(diào)用的類,相應的參數(shù)信
          息,然后調(diào)用
          使用DII調(diào)用WS的時候,你知道的只是一個WSDL的地址,通過解析wsdl,你可以得到相應
          的ws?endpoint的信息,然后通過javax.xml.rpc.Call的setOperationName,?addParam
          eter等函數(shù)來指定要調(diào)用的函數(shù),指定參數(shù),然后調(diào)用
          提供DII調(diào)用的原因是,我們有可能使用程序自動的去動態(tài)調(diào)用網(wǎng)絡上的WS,而這個WS的
          一切信息都是來自其WSDL
          ,只有通過DII,我們才有可能動態(tài)的去調(diào)用這個ws
          例子:
          服務器端程序

          public?class?HelloClient
          {
          ????public?String?getName(String?name)
          ????{
          ????????return?"hello?"+name;
          ????}
          }
          把源碼拷貝到AXIS_HOME下,并改名為?HelloClient.jws

          客戶端程序
          import?org.apache.Axis.client.Call;
          import?org.apache.Axis.client.Service;
          import?Javax.xml.namespace.QName;
          import?Javax.xml.rpc.ServiceException;
          import?Java.net.MalformedURLException;
          import?Java.rmi.RemoteException;

          public?class?SayHelloClient2
          {
          ????public?static?void?main(String[]?args)
          ????????{
          ????????try
          ????????????????{
          ??String?endpoint?=??"http://localhost:8080/axis/HelloClient.jws";

          ????Service?service?=?new?Service();
          ????????????Call?call?=?null;

          ????????????call?=?(Call)?service.createCall();

          ????????????call.setOperationName
          ???(new?QName("http://localhost:8080/axis/HelloClient.jws",?"getName"));
          ????????????call.setTargetEndpointAddress(new?Java.net.URL(endpoint));

          ?String?ret?=?
          ?(String)?call.invoke(new?Object[]?
          ?????{"zhangsan"});
          ??System.out.println
          ??("return?value?is?"?+?ret);
          ????????}?
          ????????????????catch?(Exception?ex)
          ????????????????{
          ???????ex.printStackTrace();
          ????????}
          ????}
          }


          posted on 2006-08-11 09:21 matthew 閱讀(1072) 評論(0)  編輯  收藏 所屬分類: Web Services and SOA
          主站蜘蛛池模板: 慈利县| 灌阳县| 易门县| 巴东县| 马关县| 安新县| 左云县| 金乡县| 宁陵县| 固始县| 克山县| 乐亭县| 嘉义县| 郴州市| 柳河县| 黎平县| 虹口区| 瓮安县| 抚松县| 三亚市| 太白县| 沁阳市| 鲁甸县| 长阳| 西乌珠穆沁旗| 河西区| 苏尼特左旗| 明溪县| 柳江县| 日照市| 鲁山县| 古田县| 黎川县| 白城市| 铜鼓县| 敦化市| 乌鲁木齐县| 区。| 耒阳市| 义乌市| 略阳县|