webservice学习

简介:
注:红色部分为我添加的。
axis 支持三种 web service 的部署和开发,分别为:
1.Dynamic Invocation Interface ( DII)
2.Stubs
方式

使用dii的方式

1. 编写服务端程序HelloService
public class HelloService{
public String getName(String name)
{
return "Welcome to Axis, "+name;
}
}

2.
将源码拷贝到AXIS_HOME 下,重命名为 HelloService.jws
3.
访问连接http://localhost:8080/axis/HelloService.jws?wsdl ,页面显示axis 自动生成的wsdl( 并且在axis\WEB-INF\jwsClasses  生成HelloService.class 类文件)
4.
编写访问服务的客户端 HelloClient.java, 编译, 执行, 在命令提示行下会看到 "return value is Welcome to Axis ,fengshan"
public  class HelloClient { 
   public  static  void main(String[] args) { 
     try { 
      String endpoint =  "http://localhost:8080/axis/HelloService.jws"; 
      Service service = new Service(); 
      Call call = null
      call = (Call) service.createCall(); 
      call.setOperationName(new QName( 
          "http://localhost:8080/axis/HelloService.jws", "getName")); 
      call.setTargetEndpointAddress(new java.net.URL(endpoint)); 
      String ret = (String) call.invoke(new Object[] { "fengshan" }); 
      System.out.println("return value is " + ret); 
    } catch (Exception ex) { 
      ex.printStackTrace(); 
    } 
  } 

总结:dii方式比较简单,服务器端暴露一个类,客户端通过固定的方式(套路来访问服务器提供的服务)
服务器:写一个类,里面有一个业务方法,然后将后缀名字从java改成jws
客户端:1.构造连接地址:http://localhost:8080/axis/HelloService.jws (ip+路径+类名.jws)
      2.构造vservice对象,掉用service对象的createCall()方法返回call对象
      3.调用call对象的etOperationName()方法设置访问webservice资源的参数
      4.调用call对象的invoke()方法,并且传递对象数组,字符串类型,(通过wsdl可以观察出requestresponse的参数,根据这些表述,来设置请求参数和接受返回数据)
 
 

使用Stubs方式

1.服务器端仍然使用HelloService.java,编译后将他放在axis\WEB-INF\classes
2.编写deploy.wsdd文件,声明服务器端需要发布的webservice的名字,和她的方法(放在web-inf目录下)
deploy.wsdd 内容 :
< deployment  xmlns ="http://xml.apache.org/axis/wsdd/" 
         xmlns:java ="http://xml.apache.org/axis/wsdd/providers/java" > 
< service  name ="HelloService"  provider ="java:RPC" > 
     < parameter  name ="className"    
             value ="HelloService" /> 
     < parameter  name ="allowedMethods"  value ="*" />    <!---这里也可以填写需要暴露的方法的名字-> 
</ service > 
</ deployment >    
 
3.切换到deploy.wsdd所在目录,运行java org.apache.axis.client.AdminClient deploy.wsdd,如果部署成功,会输出<Admin>Done processing</Admin>信息。可以点击http://localhost:8080/axis浏览器中List来查看所发布的服务。
4. 接下来客户端测试该服务。
首先,在环境变量中设置 CLASSPATH ,加入以下 jar %AXIS_LIB%\axis.jar;
%AXIS_LIB%\axis-ant.jar; 
%AXIS_LIB%\commons-discovery.jar;
%AXIS_LIB%\commons-logging.jar;
%AXIS_LIB%\jaxrpc.jar;
%AXIS_LIB%\saaj.jar;
%AXIS_LIB%\log4j-1.2.8.jar;
%AXIS_LIB%\wsdl4j.jar 
可以通过以下命令查看是否设置好了 CLASSPATH Echo %CLASSPATH%
Axis
提供了实现WSDL2Java 的命令行工具org.apache.axis.wsdl.WSDL2Java ,利用这个工具可以从WSDL 地址处生成Java 代码。命令如下:( axis 目录下)
java org.apache.axis.wsdl.WSDL2Java -Nhttp://localhost:8080/axis/services/HelloService=com http://localhost:8080/axis/services/HelloService?wsdl
会在com (由上述命令行中参数设定)包下生成HelloService.java HelloServiceService.java HelloServiceServiceLocator.java HelloServiceSoapBindingStub.java 四个文件。

5.
编写测试类( axis 目录下)
public  class HelloClient 

     public  static  void main(String[] args) 
    { 
      try 
     {    
        com.HelloServiceServiceLocator locator= new com.HelloServiceServiceLocator(); 
        com.HelloService service=locator.getHelloService(); 
        System.out.println(service.getName( "fengshan")); 
     } 
      catch(Exception e) 
     { 
         System.err.println( "Execution failed.Exception:"+e); 
     } 
    } 

总结:Stubs方式主要是服务器端使用deploy.wsdd 文件,写好需要暴露的webservice的名字和其中的方法,使用 java org.apache.axis.client.AdminClient deploy.wsdd 将她部署在服务器上供外界调用,而外界使用 java org.apache.axis.wsdl.WSDL2Java -Nhttp://localhost:8080/axis/services/HelloService=com http://localhost:8080/axis/services/HelloService?wsdl 将远端的webservice映射成本地类,供自己使用
 
使用步骤:
1.     在获得自动映射的4个类以后,new一个 loctor对象,这个对象实现了 一个接口(HelloServiceService ),调用接口种的方法getHelloService()获得一个service对象,然后用这个对象调用webservice暴露的方法会得到一个返回值(String).
我们自己也可以简单写一个客户端来调用:
public class HelloWorldClient1 {
       public static void main(String[] args) {
              try {
                     Service service = new Service();
                     String Url = "http://localhost:8080/axis/services/HelloService";
                     Call call = (Call) service.createCall();
                     call.setTargetEndpointAddress(Url); 
                     call.setOperationName(new QName(Url, "getName"));
                     String result = (String) call.invoke(new Object[] { "winwin" });
                     System.out.println(result); 
              catch (ServiceException e) {
                     e.printStackTrace();
              catch (RemoteException e) {
                     e.printStackTrace();
              }
       }
}
其实上面四个自动生成的java文件也就是像以上这个客户端这样来调用的。可以对照看看。









本文转自 yzzh9 51CTO博客,原文链接:http://blog.51cto.com/java999/187468,如需转载请自行联系原作者
目录
相关文章
|
测试技术 网络架构
|
JavaScript 数据格式 XML
webService学习之前奏
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.
842 0
|
Web App开发
【WebService学习】用思维导图和实例学习Web Service
作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.SOAP消息: 2.WSDL 3.Web Service 4.实例: 1)Eclipse 以及Ant建立一个简单的Web Service,以演示Web Service的基本开发过程:http://blog.csdn.net/gnuhpc/archive/2009/12/22/5047951.aspx 2)QT SOAP 的一个实例: 开始学习时,看到网上有朋友说这个库难用,我觉得还好吧,蛮好使的,下边写一个例子。
1176 0
|
Java C# 应用服务中间件
java学习:调用 java web service
先写一个java的class:AwbModel(相当于要在web service中传输的实体对象) package webservicesample; public class AwbModel { private String _a1 = "_a1"; publ...
951 0
|
Java Android开发
从零开始学习 webservice第一集,java webservice简单实例入门教程
现在从零开始学习webservice 概念自己百度搜,总之,webservice就相当于一个接口,就像你走进了一家售货店,你不需要知道这家店怎么卖给你东西,你拿着钱去,说我要一包玉溪,人家就会给你返回一包玉溪烟,这就是webservice。
1739 0