博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
webservice学习
阅读量:5955 次
发布时间:2019-06-19

本文共 4074 字,大约阅读时间需要 13 分钟。

注:红色部分为我添加的。
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.
访问连接
,页面显示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
可以观察出request
response
的参数,
根据这些表述,
来设置请求参数和接受返回数据)
 
 

使用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>
信息。可以点击
浏览器中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 
会在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  
将远端的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,如需转载请自行联系原作者
你可能感兴趣的文章
PhoneGap极光推送 cordova消息推送
查看>>
Subarray Sum Equals K
查看>>
preventDefault, stopPropagation, stopImmediatePropagation 三者的区别
查看>>
算法题解:找出包含给定字符的最小窗口(枚举的一般方法)
查看>>
超级账本HyperLedger初体验
查看>>
完美解决html中select的option不能隐藏的问题。
查看>>
推荐5大开源工具,用于开发Kubernetes项目
查看>>
制定2015年的移动开发策略
查看>>
JPA 2.2改进了易用性
查看>>
从蚂蚁金服实践入手,带你深入了解 Service Mesh
查看>>
24周年,“常青树”Delphi发布新版本10.3.1
查看>>
7. 从数据库获取数据- 从零开始学Laravel
查看>>
阿里百川码力APP监控 来了!
查看>>
使用dotenv管理环境变量
查看>>
温故js系列(11)-BOM
查看>>
Vuex学习
查看>>
bootstrap - navbar
查看>>
切图崽的自我修养-[ES6] 编程风格规范
查看>>
[React Native Android 安利系列]样式与布局的书写
查看>>
利用dxflib读写cad文件
查看>>