::  ::  ::  ::  :: 管理

          axis開發(fā)web service 實戰(zhàn)

          Posted on 2007-02-26 19:03 cory 閱讀(173) 評論(0)  編輯  收藏 所屬分類: java基礎(chǔ)
          一、axis安裝
          1.環(huán)境
          ??J2SE?SDK?1.3?or?1.4:??我使用?1.4.2
          ???Servlet?Container:?我使用Tomcat?5.0?
          2.到?http://ws.apache.org/axis/網(wǎng)站下載axis安裝包
          3.解壓縮安裝包,將AXIS_UNZIP_PATH\axis-version\webapps下的axis包拷貝到TOMCAT_HOME\webapps\下,
          ????以下約定AXIS_HOME為該TOMCAT_HOME\webapps\axis目錄
          4.啟動tomcat,訪問http://localhost:8080/axis?檢查安裝是否成功
          5.以上步驟執(zhí)行成功,可以開發(fā)webservice例子了

          axis支持三種web?service的部署和開發(fā),分別為:
          1。Dynamic?Invocation?Interface?(?DII)
          2。?Stubs方式
          3。Dynamic?Proxy方式

          以下逐一講述web?service在axis上的部署和開發(fā),設(shè)置classpath
          set?CLASSPATH=.;%AXIS_HOME%\lib\axis.jar;%AXIS_HOME%\lib\axis-ant.jar;%AXIS_HOME%\lib\commons-discovery-0.2.jar;%AXIS_HOME%\lib\commons-logging-1.0.4.jar;%AXIS_HOME%\lib\jaxrpc.jar;%AXIS_HOME%\lib\saaj.jar;%AXIS_HOME%\lib\wsdl4j-1.5.1.jar;%AXIS_HOME%\lib\log4j-1.2.8.jar;E:/thirdparty/activation/activation.jar;E:/thirdparty/activation/mail.jar



          二、編寫DII(Dynamic?Invocation?Interface?)方式web服務(wù)
          1.編寫服務(wù)端程序HelloClient
          public?class?HelloClient?{
          ????public?String?getName(String?name)
          ????{
          ????????return?"hello?"+name;
          ????}
          }

          2.將源碼拷貝到AXIS_HOME下,重命名為?HelloClient.jws
          3.訪問連接http://localhost:8080/axis/HelloClient.jws?wsdl,頁面顯示axis自動生成的wsdl
          4.編寫訪問服務(wù)的客戶端?TestHelloClient.java

          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();
          ????????}
          ????}
          }
          三、編寫Dynamic?Proxy方式訪問服務(wù)
          1.編寫部署服務(wù)端程序,同上邊DII方式,本次仍使用上邊部署的HelloClient
          2.編寫代理接口
          public?interface?HelloClientInterface?extends?java.rmi.Remote?{
          ????public?String?getName(String?name)?throws?java.rmi.RemoteException;
          }
          3.編寫并執(zhí)行客戶端程序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()?;
          ????????}
          ????}
          }

          四、編寫wsdd發(fā)布web服務(wù),編寫stub?client訪問web服務(wù)

          1.編寫服務(wù)端程序server,SayHello.java,編譯server.SayHello.java????
          package?server;
          public?class?SayHello?{
          ????public?String?getName(String?name)
          ????{
          ????????return?"hello?"+name;
          ????}
          }
          2.編寫LogHandler.java
          import?org.apache.axis.AxisFault;
          import?org.apache.axis.Handler;
          import?org.apache.axis.MessageContext;
          import?org.apache.axis.handlers.BasicHandler;

          import?java.util.Date;

          public?class?LogHandler?extends?BasicHandler?{
          ????public?void?invoke(MessageContext?msgContext)?throws?AxisFault
          ????{
          ????????/**?Log?an?access?each?time?we?get?invoked.
          ?????????*/
          ????????try?{
          ????????????Handler?serviceHandler?=?msgContext.getService();

          ????????????Integer?numAccesses?=
          ?????????????????????????????(Integer)serviceHandler.getOption("accesses");
          ????????????if?(numAccesses?==?null)
          ????????????????numAccesses?=?new?Integer(0);

          ????????????numAccesses?=?new?Integer(numAccesses.intValue()?+?1);

          ????????????Date?date?=?new?Date();
          ????????????String?result?=?date?+?":?service?"?+
          ????????????????????????????msgContext.getTargetService()?+
          ????????????????????????????"?accessed?"?+?numAccesses?+?"?time(s).";
          ????????????serviceHandler.setOption("accesses",?numAccesses);

          ????????????System.out.println(result);
          ????????}?catch?(Exception?e)?{
          ????????????throw?AxisFault.makeFault(e);
          ????????}
          ????}
          }
          3..編寫wsdd文件
          deploy.wsdd
          <deployment?xmlns="http://xml.apache.org/axis/wsdd/"
          ????????????xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">???????????
          ????????
          ?<handler?name="print"?type="java:LogHandler"/>?
          ?<service?name="sayhello"?provider="java:RPC">
          ???<requestFlow>
          ?????<handler?type="print"/>
          ???</requestFlow>
          ??<parameter?name="className"?value="/server.SayHello"/>
          ??<parameter?name="allowedMethods"?value="*"/>??
          ?</service>
          </deployment>

          3.將編譯后的文件拷貝到AXIS_HOME/WEB-INF/classes下,如:D:\tomcat\webapps\axis\WEB-INF\classes
          4.發(fā)布服務(wù):
          java?org.apache.axis.client.AdminClient?deploy.wsdd
          5.生成client?stub文件
          ???a:方式1
          ??????將SayHello.java拷貝到AXIS_HOME/下,重命名為SayHello.jws,執(zhí)行下面的命令生存client?stub
          ??????java?org.apache.axis.wsdl.WSDL2Java??-p?client??http://localhost:8080/axis/services/SayHello.jws?wsdl
          ????b:方式2
          ????執(zhí)行如下命令生成SayHello.wsdl
          ?????????java?org.apache.axis.wsdl.Java2WSDL?-oSayHello.wsdl?-lhttp://localhost:8080/axis/services/SayHello?-nsayhello?server.SayHello
          ??????????執(zhí)行如下命令生成client?stub
          ??????java?org.apache.axis.wsdl.WSDL2Java??SayHello.wsdl??-p?client
          ???生成的stub?client文件列表為:
          ???1。SayHello.java
          ???2。SayHelloService.java。
          ???3。SayHelloServiceLocator.java
          ???4。SayHelloSoapBindingStub.java
          6.編寫客戶端程序,編譯并執(zhí)行
          public?class?SayHelloClient?{
          ????public?static?void?main(String[]?args)?{
          ????????try?{
          ????????????
          ????????????SayHelloService?service?=?new?client.
          ???????????????????????????????????????????????SayHelloServiceLocator();
          ????????????client.SayHello_PortType?client?=?service.getSayHello();
          ????????????String?retvalue="/client.getName("zhangsan");
          ????????????System.out.println(retValue);

          ????????????
          ????????}?catch?(Exception?e)?{
          ????????????System.err.println("Execution?failed.?Exception:?""?+?e);
          ????????}
          ????}
          }

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 高邮市| 屯留县| 宿松县| 宁国市| 二连浩特市| 雷州市| 辽源市| 开鲁县| 安吉县| 增城市| 德庆县| 蕉岭县| 汉川市| 诸城市| 无锡市| 温宿县| 永平县| 佳木斯市| 扎兰屯市| 扶风县| 顺义区| 南阳市| 富顺县| 霸州市| 阳信县| 松滋市| 沅陵县| 西畴县| 新宾| 平安县| 乌什县| 张家川| 景泰县| 赣州市| 界首市| 翁牛特旗| 申扎县| 临澧县| 洮南市| 油尖旺区| 金沙县|