基于WebService实现远程调用方式的系统间通信
2013-08-14 23:25
609 查看
在Java中实现远程调用方式的技术主要有RMI和WebService两种,下面分别来看看基于WebService技术如何实现远程调用方式的系统间通信。
WebService
WebService是一种跨语言的系统间交互标准。在这个标准中,对外提供功能的一方以HTTP的方式提供服务,该服务采用WSDL(Web Service Description Language)描述,在这个文件中描述服务所使用的协议、所期望的参数、返回的参数格式等。调用端和服务端通过SOAP(Simple Object Access Protocol)方式来进行交互。
在Java中使用WebService须首先将服务器端的服务根据描述生成相应的WSDL文件,并将应用及此WSDL文件放入HTTP服务器中,借助Java辅助工具根据WSDL文件生成客户端stub代码。此代码的作用是将产生的对象请求信息封装为标准的SOAP格式数据,并发送请求到服务器端,服务器端在接收到SOAP格式数据时进行转化,反射调用相应的Java类,过程如图1.2所示:
Java SE6中集成了WebService,因此可以直接实现该方式的远程调用,服务器端通过@WebService来标记对外暴露的WebService实现类,通过调用Endpoint.publish将此WebService实现发布到指定的HTTP地址上。客户端通过wsimport来访问相应地址的 wsdl文件,从而生成调用服务器端的辅助类,应用即可通过调用此类来实现远程调用了。基于WebService实现示例中的服务器端代码如下:
对外暴露的接口:
public interface Business {
/**
* 显示客户端提供的信息,并返回
*/
public String echo(String message);
}
服务器端的实现类,通过@WebService来指定对外提供的WebService的名称和客户端生成的类名及包名:
@WebService(name="Business",serviceName="
BusinessService",targetNamespace="http://WebService.
chapter1.book/client")
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class BusinessImpl implements Business {
public String echo(String message) {
if("quit".equalsIgnoreCase(message.toString())){
System.out.println("Server will be shutdown!");
System.exit(0);
}
System.out.println("Message from client: "+message);
return "Server response:"+message;
}
}
发布WebService的类:
public static void main(String[] args) {
Endpoint.publish("http://localhost:9527/
BusinessService", new BusinessImpl());
System.out.println("Server has beed started");
}
客户端通过JDK bin目录下的wsimport命令来生成辅助调用代码,执行如下命令生成辅助代码:
wsimport -keep http://localhost:9527/BusinessService?wsdl
执行后,在当前目录下会生成book/chapter1/WebService/client/Business.java和book /chapter1/ WebService/client/BusinessService.java的代码,基于这两个生成的代码编写客户端的关键代码如下:
BusinessService businessService=new BusinessService();
Business business=businessService.getBusinessPort();
business.echo(command);
WebService传输的数据协议采用SOAP,SOAP对于复杂的对象结构比较难支持,其好处是能够支持跨语言。
无论是采用RMI还是WebService,都封装了网络通信的细节,因此使用起来会较为简单,但如果想对通信细节做一些调优或控制,也会比较麻烦。
WebService
WebService是一种跨语言的系统间交互标准。在这个标准中,对外提供功能的一方以HTTP的方式提供服务,该服务采用WSDL(Web Service Description Language)描述,在这个文件中描述服务所使用的协议、所期望的参数、返回的参数格式等。调用端和服务端通过SOAP(Simple Object Access Protocol)方式来进行交互。
在Java中使用WebService须首先将服务器端的服务根据描述生成相应的WSDL文件,并将应用及此WSDL文件放入HTTP服务器中,借助Java辅助工具根据WSDL文件生成客户端stub代码。此代码的作用是将产生的对象请求信息封装为标准的SOAP格式数据,并发送请求到服务器端,服务器端在接收到SOAP格式数据时进行转化,反射调用相应的Java类,过程如图1.2所示:
(点击查看大图)图1.2 WebService调用过程 |
对外暴露的接口:
public interface Business {
/**
* 显示客户端提供的信息,并返回
*/
public String echo(String message);
}
服务器端的实现类,通过@WebService来指定对外提供的WebService的名称和客户端生成的类名及包名:
@WebService(name="Business",serviceName="
BusinessService",targetNamespace="http://WebService.
chapter1.book/client")
@SOAPBinding(style=SOAPBinding.Style.RPC)
public class BusinessImpl implements Business {
public String echo(String message) {
if("quit".equalsIgnoreCase(message.toString())){
System.out.println("Server will be shutdown!");
System.exit(0);
}
System.out.println("Message from client: "+message);
return "Server response:"+message;
}
}
发布WebService的类:
public static void main(String[] args) {
Endpoint.publish("http://localhost:9527/
BusinessService", new BusinessImpl());
System.out.println("Server has beed started");
}
客户端通过JDK bin目录下的wsimport命令来生成辅助调用代码,执行如下命令生成辅助代码:
wsimport -keep http://localhost:9527/BusinessService?wsdl
执行后,在当前目录下会生成book/chapter1/WebService/client/Business.java和book /chapter1/ WebService/client/BusinessService.java的代码,基于这两个生成的代码编写客户端的关键代码如下:
BusinessService businessService=new BusinessService();
Business business=businessService.getBusinessPort();
business.echo(command);
WebService传输的数据协议采用SOAP,SOAP对于复杂的对象结构比较难支持,其好处是能够支持跨语言。
无论是采用RMI还是WebService,都封装了网络通信的细节,因此使用起来会较为简单,但如果想对通信细节做一些调优或控制,也会比较麻烦。
相关文章推荐
- 基于WebService实现远程调用方式的系统间通信
- 基于RMI实现远程调用的系统间通信
- 基于RMI实现远程调用的系统间通信
- 分布式Java--基于远程调用实现系统间通信
- [分布式java]基于JavaAPI实现消息方式的系统间通信:UDP/IP+NIO
- 分布式Java--基于消息方式实现系统间通信
- [分布式java]基于JavaAPI实现消息方式的系统间通信:TCP/IP+BIO
- [分布式java]基于JavaAPI实现消息方式的系统间通信:UDP/IP+BIO
- 分布式Java应用之基于消息方式实现系统间的通信(2)
- C# 小规模网络远程调用的基类(基于Socket方式)实现
- 基于java自身技术实现消息方式的系统间通信
- 远程通信的几种选择(RPC,Webservice, JMS的区别,其实都是SOA的一种实现方式)
- 基于java自身技术实现消息方式的系统间通信
- [分布式java]基于JavaAPI实现消息方式的系统间通信:TCP/IP+NIO
- 分布式架构从零开始========》【基于Java自身技术实现消息方式的系统间通信】
- Webservice实现与调用(基于Spring的多种方式)
- C# 小规模网络远程调用的基类(基于Socket方式)实现
- java分布式开发TCP/IP NIO无阻塞 Socket((基于消息方式实现系统间的通信) )(转)
- Android - 绑定服务调用服务里面的方法,start/bind开启服务的比较,混合方式开启服务,本地服务,远程服务,系统服务,录音API
- Spring + Hessian 实现轻量级分布式远程调用【包含rmi方式重构】