简单的webservice开发例子 - 两颗番茄

mingzi 2021-12-01 原文


简单的webservice开发例子


Axis支持三种web  service的部署和开发,分别为:  
 
1、Dynamic  Invocation  Interface  (  DII)  
 
2、Stubs方式  
 
3、Dynamic  Proxy方式  
 
二、编写DII(Dynamic  Invocation  Interface  )方式web服务  
 
1.编写服务端程序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、编写访问服务的客户端  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方式访问服务    
 
1、编写部署服务端程序,同上边DII方式,本次仍使用上边部署的HelloClient    
 
2、编写代理接口    
 
 
public  interface  HelloClientInterface  
extends  java.rmi.Remote  
{  
       public  String  getName(String  name)  
           throws  java.rmi.RemoteException;  
}  
   
 
 
 
3、编写并执行客户端程序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发布web服务,编写stub  client访问web服务    
 
1、编写服务端程序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、发布服务:    
 
java  org.apache.Axis.client.AdminClient  deploy.wsdd    
 
5、生成client  stub文件    
 
a:方式1    
 
将SayHello.java拷贝到Axis_HOME/下,重命名为SayHello.jws,    
 
执行下面的命令生存client  stub    
 
 
java  org.apache.Axis.wsdl.WSDL2Java    
-p  client    http://localhost:8080  
/Axis/services/SayHello.jws?wsdl  
   
 
 
 
b:方式2    
 
执行如下命令生成SayHello.wsdl    
 
 
java  org.apache.Axis.wsdl.Java2WSDL  
-oSayHello.wsdl  -lhttp://localhost:8080  
/Axis/services/SayHello  -nsayhello  server.SayHello  
   
 
 
 
执行如下命令生成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、编写客户端程序,编译并执行    
 
 
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);  
               }  
       }  

发表于
2009-03-19 14:44 
两颗番茄 
阅读(1759
评论(0
编辑 
收藏 
举报

 

版权声明:本文为mingzi原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/mingzi/archive/2009/03/19/1416792.html

简单的webservice开发例子 - 两颗番茄的更多相关文章

  1. 计算机的本质 —- 起源

    计算机的本质 —- 起源 目录 1、编码与电路——信号的转换 2、继电器——信号的传递 3、门电路 […]...

  2. 你必须学习的10项.NET技术. – 『小小菜鸟』

    你必须学习的10项.NET技术. 很多入门的朋友不知道下一步怎么学,这里是在论坛看到的一片文章,个人感觉说的有 […]...

  3. 大数据基础问答-之一 – 中道学友

    大数据基础问答-之一 What is Hadoop? ========== Hadoop is an open […]...

  4. web1.0, web2.0, web3.0 – Iris

    web1.0, web2.0, web3.0 Just got some interesting slieds […]...

  5. SharePoint2010安装错误信息描述 – 糖糖分你一半

      SharePoint2010安装不下20遍了,从win7到2008R2,从单机到域环境,把场模式,单机模式 […]...

  6. java 集合类源码分析–arrayList – duoyu

    java 集合类源码分析–arrayList  ArrayList就是传说中的动态数组,就是Arr […]...

  7. Java获得数据库查询结果的列数和行数,打印查询结果 – 每天1990

    Java获得数据库查询结果的列数和行数,打印查询结果 Java连接数据库及简单操作见我以前的一篇随笔:http […]...

  8. 有志于iPhone手机开发者入门扫盲 – HackerVirus

    有志于iPhone手机开发者入门扫盲 一、系统要求  推荐使用MacOS,现在推荐使用SnowLeopard系 […]...

随机推荐

  1. wireshark怎么抓包、wireshark抓包详细图文教程

    wireshark怎么抓包、wireshark抓包详细图文教程 wireshark是非常流行的网络封包分析软件 […]...

  2. DMZ

      DMZ是英文“demilitarized zone”的缩写,中文名称为“隔离区”,也称“非军事化区”。它是 […]...

  3. odoo ORM中的filed的关系映射的使用详解1

    前言 前面我们详细讲解了odoo ORM中fields中的常见属性的使用,根据不同的属性可以对字段进行不同的限 […]...

  4. 第10章 Arduino 程序结构说明

    第10章 Arduino 程序结构说明   一、结构   二、值(变量和常量)   三、函数 1. setup […]...

  5. 小橙书阅读指南(十二)——无向图、深度优先搜索和路径查找算法

    在计算机应用中,我们把一系列相连接的节点组成的数据结构,叫做图。今天我们将要介绍它的一种形式——无向图,以及针 […]...

  6. Chocolatey Window系统下的软件管理工具

    Chocolatey Window系统下的软件管理工具 2019-07-10 14:11 by _天枢, &# […]...

  7. python基础(十七)

    今日主要内容 正则表达式 logging模块 一、正则表达式 (一)什么是正则表达式 正则表达式的定义: 是对 […]...

  8. Python 读取txt文本文件

    Python的文本文件的内容读取中,有三类方法:read()、readline()、readlines(),这 […]...

展开目录

目录导航