您的位置:首页 > 其它

Axis 之 Dynamic Proxy方式(WSDD方式) (转)

2013-08-13 17:20 337 查看
http://hi.baidu.com/dreamsun2008/blog/item/f14c9bef1023092f2df53438.html

http://www.cnblogs.com/zuiyirenjian/archive/2010/03/15/1686109.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描述的服务。

补充客户端代理方式如下:

//方式一

String url = "http://10.4.2.84:81/server.php";

WeatherWebServiceLocator locator = new WeatherWebServiceLocator();

WeatherWebServiceSoap hw = new WeatherWebServiceSoap12Stub(new URL(url), locator);

System.out.println(hw.addUser(1, 2));





//方式二



WeatherWebServiceSoapProxy proxy = new WeatherWebServiceSoapProxy();

System.out.println(proxy.addUser(1, 3));

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: