当前位置: 代码迷 >> Web前端 >> 简略的webservice开发例子
  详细解决方案

简略的webservice开发例子

热度:584   发布时间:2012-08-27 21:21:57.0
简单的webservice开发例子

?

转自:http://fengyouhua.iteye.com/blog/49383? 并做一些修改

从安装 Axis 开始,

? ? 1、编写DII方式web服务,

? ? 2、Dynamic Proxy 方式访问服务,

? ? 3、wsdd 发布web服务

? ? 4、stub client 访问web服务

上面四个步骤,详解如何使用Axis开发 Web Service 的一个实例。

?

一、Axis安装
? ? ? ?1、环境JDK,Tomcat?

  2、到 http://ws.Apache.org/Axis/网站下载Axis安装包,也可以 ? ? ? ? ? ? 从http://download.csdn.net/download/fangmingrui/643150下载。

  3、解压缩安装包,将Axis_ZIP_PATH\Axis-version\webapps下的Axis包拷贝到TOMCAT_HOME\webapps\下,以下约定Axis_HOME为该TOMCAT_HOME\webapps\Axis目录

  4、启动tomcat,访问http://localhost:8080/Axis 检查安装是否成功

  5、以上步骤执行成功,可以开发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;
??? }
? ? ?}

? ? ?注意:这个类在改写为?HelloClient.jws的时候上面的package路径要删掉

? ? ?2、将源码拷贝到Axis_HOME下,重命名为 HelloClient.jws

  ?3、访问连接http://localhost:8080/Axis/HelloClient.jws?wsdl,页面显示Axis自动生成的wsdl

?

? ? 4、编写访问服务的客户端 TestHelloClient.java

import javax.xml.namespace.QName;

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

public class HelloClient {
	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();
		}
	}
}
?

 四Stubs方式:编写wsdd发布web服务,编写stub client访问web服务?


  1、编写服务端程序server,SayHello.java,编译

Java代码?
  1. package?server;??
  2. ??
  3. public?class?SayHello?{??
  4. ????public?String?getName(String?name)?{??
  5. ????????return?"hello?"?+?name;??
  6. ????}??
  7. }??



 2、编写wsdd文件?

  deploy.wsdd文件内容如下:?

Java代码?
  1. <deployment?xmlns="http://xml.apache.org/axis/wsdd/"?xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">??????
  2. <service?name="SayHello"?provider="java:RPC">??????
  3. <parameter?name="className"?value="server.SayHello"/>??????
  4. <parameter?name="allowedMethods"?value="*"/>??????
  5. </service>??????
  6. </deployment>???



  3、发布服务:?

  编辑一个deploy.bat,Axis_Lib为axis.jar路径。内容如下:?

Java代码?
  1. set?Axis_Lib=D:\workspace\test\WEB-INF\lib??????
  2. set?Java_Cmd=java?-Djava.ext.dirs=%Axis_Lib%??????
  3. set?Axis_Servlet=http://localhost:8080/test/servlet/AxisServlet??????
  4. %Java_Cmd%?org.apache.axis.client.AdminClient?-l%Axis_Servlet%?deploy.wsdd???



执行这个批处理文件,这时候,如果提示成功的话,访问http://localhost:8080/test/services 就会显示服务列表。?

  4、生成客户端client stub文件?

  在浏览器上访问服务器端的服务,可以下载到WSDL文件,通过Axis的相关工具,可以自动从WSDL文件中生成Web Service的客户端代码。?

  编写一个WSDL2Java.bat文件,其内容如下:?

Java代码?
  1. set?Axis_Lib=D:\workspace\test\WEB-INF\lib??????
  2. set?Java_Cmd=java?-Djava.ext.dirs=%Axis_Lib%??????
  3. set?Output_Path=D:\workspace\test\src??????
  4. set?Package=server.SayHello??????
  5. %Java_Cmd%?org.apache.axis.wsdl.WSDL2Java?-o%Output_Path%?-p%Package%?SayHello.wsdl???



执行这个批处理文件就可以生成client stub.?

  生成的stub client文件列表为:

? SayHello.java,

SayHelloService.java,

SayHelloServiceLocator.java,

SayHelloSoapBindingStub.java .?

  5、编写客户端程序,编译并执行?

  下面是一段junit测试客户端代码。?

Java代码?
  1. import?java.net.URL;??
  2. import?junit.framework.Test;??
  3. import?junit.framework.TestCase;??
  4. import?junit.framework.TestSuite;??
  5. ??
  6. public?class?TestWSClient?extends?TestCase?{??
  7. ??
  8. ????public?TestWSClient(String?string)?{??
  9. ????????super(string);??
  10. ????}??
  11. ??
  12. ????public?void?SayHelloClient()?throws?Exception?{??
  13. ??
  14. ????????SayHelloService?service?=?new?SayHelloServiceLocator();??
  15. ????????SayHello_PortType?client?=?service.getSayHello();??
  16. ????????String?retValue?=?client.getName("clientname");??
  17. ????????System.out.println(retValue);??
  18. ??
  19. ????}??
  20. ??
  21. ????public?static?Test?suite()?{??
  22. ????????TestSuite?suite?=?new?TestSuite();??
  23. ????????suite.addTest(new?TestWSClient("SayHelloClient"));??
  24. ????????return?suite;??
  25. ????}??
  26. } ?

?

  相关解决方案