Axis 之 Dynamic Proxy方式(WSDD方式)

简介: http://hi.baidu.com/dreamsun2008/blog/item/f14c9bef1023092f2df53438.html Axis支持三种web service的部署和开发,分别为:  1、Dynamic Invocation Interface ( DII)  2...

http://hi.baidu.com/dreamsun2008/blog/item/f14c9bef1023092f2df53438.html

Axis支持三种web service的部署和开发,分别为:
  1、Dynamic Invocation Interface ( DII)
  2、Dynamic Proxy方式
  3、Stubs方式

 二、Dynamic Proxy方式(wsdd)
动态代理就是通过wsdd来描述Web服务,而不是直接访问jws,前面说过jws是不支持包的,而且运行也不稳定,有时候可以访问有时候就不可以,所以不推荐此种方法,wsdd和wsdl的区别在于前者只描述Web服务和操作方法以及传输方式,它相对于wsdl要简单的多,更易被人读懂。

1.将myService放入com.service包下,这就是WSDD的好处,它不像DII不能建包
package com.service;
public class MyService {

public String sayHello(String name){
   return "Welcome to you, " + name;
}
}

在WEB-INF下新建一个server-config.wsdd文件,代码如下:
<deployment xmlns="http://xml.apache.org/axis/wsdd/" xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
<handler type="java:org.apache.axis.handlers.http.URLMapper" name="URLMapper"/>    
   <service name="myService" provider="java:RPC">
        <parameter name="className" value="com.service.MyService"/>
        <parameter name="allowedMethods" value="sayHello"/> <!--*代表所有方法-->
    </service>
<transport name="http">
<requestFlow>
    <handler type="URLMapper"/>
</requestFlow>
</transport>
</deployment>
这就是WSDD的全部内容,它描述一个Web Service发布

2.测试发布的myService,重启Tomcat,在浏览器输入
http://localhost:8080/AxisTest/servlet/AxisServlet

3.客户端
package com.client;

import java.net.MalformedURLException;
import java.rmi.RemoteException;

import javax.xml.rpc.ParameterMode;
import javax.xml.rpc.ServiceException;

import org.apache.axis.client.Call;
import org.apache.axis.client.Service;
import org.apache.axis.encoding.XMLType;

public class MyServiceClient {

public static void main(String[] args) throws ServiceException, MalformedURLException, RemoteException {
  
   String endpoint="http://localhost:8080/AxisTest/services/myService";
        String name=" 张三";
        Service service = new Service();
        Call call = (Call) service.createCall();
        
        call.setTargetEndpointAddress(new java.net.URL(endpoint));                      
        call.addParameter("param1",XMLType.XSD_STRING,ParameterMode.IN);
        call.setOperationName( "sayHello" );
        call.setReturnType( XMLType.XSD_STRING );
        String ret = (String) call.invoke( new Object[] { name } );
        System.out.println("返回结果:" + ret);   
}

}

注意上述方法和jws方式唯一的不同就在于endpoint的引用方式不同,一个是直接引用jws文件,一个是引用一个wsdd描述的服务。

相关文章
|
9月前
|
存储 JSON UED
Flask框架之RESTful--参数验证--add_argument方法参数详解
参数验证的重要性,Flask-RESTful 参数验证方法,add_argument方法参数详解
|
JavaScript
ES6新特性(7)之Proxy代理/Model模块/import/export
ES6新特性(7)之Proxy代理/Model模块/import/export
|
XML Java 数据格式
web service axis2 参数为对象传递
web service axis2 参数为对象传递
jMeter parallel controller 无法使用 CSV Data config 提供的变量?
jMeter parallel controller 无法使用 CSV Data config 提供的变量?
112 0
jMeter parallel controller 无法使用 CSV Data config 提供的变量?
|
存储 测试技术 Apache
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
160 0
jMeter 里 CSV Data Set Config Sharing Mode 的含义详解
|
JavaScript
SAP Spartacus cost-center.config.ts里定义的路由常量,是如何被加载的
SAP Spartacus cost-center.config.ts里定义的路由常量,是如何被加载的
100 0
SAP Spartacus cost-center.config.ts里定义的路由常量,是如何被加载的
|
测试技术
一起谈.NET技术,三种属性操作性能比较:PropertyInfo + Expression Tree + Delegate.CreateDelegate
  在《上篇》中,我比较了三种属性操作的性能:直接操作,单纯通过PropertyInfo反射和IL Emit。本篇继续讨论这个话题,我们再引入另外两种额外的属性操作方式:Expression Tree(这和IL Emit基本一致)和通过Delegate的静态方法CreateDelegate创建相应的委托进行属性的赋值和取值。
856 0
|
Prometheus Cloud Native
详解Prometheus range query中的step参数
详细介绍了Prometheus查询参数step的作用
7885 0
|
JSON C# 数据格式
C# 使用dynamic类型来访问JObject对象
原文:C# 使用dynamic类型来访问JObject对象 dynamic是C#里面的动态类型,可在未知类型的情况访问对应的属性,非常灵活和方便。 使用Json.Net可以把一个Json字符串转换成一个JObject对象,如果有已知强类型,如果有已知对应的强类型,可以直接转成对应的类型。
1309 0
重构——45将查询函数和修改函数分离(Separate Query from Modifier)
将查询函数和修改函数分离(Separate Query from Modifier):某个函数即返回对象状态,又修改对象状态;建立两个不同的函数,其中一个负责查询,另一个负责修改
1803 0