java自己调用自己的模式_1.2.1 基于Java自身技术实现远程调用方式的系统间通信(2)...

本文详细介绍了基于Java的WebService远程调用机制,包括服务端如何使用@WebService标记接口实现并发布,客户端如何通过wsimport生成调用代码进行交互。讲解了WebService采用SOAP协议进行跨语言通信的过程,并指出其在处理复杂对象时的局限性。
摘要由CSDN通过智能技术生成

1.2.1  基于Java自身技术实现远程调用方式的系统间通信(2)

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所示:

096c72763fd948107be4fc31eb1c8032.png

(点击查看大图)图1.2  WebService调用过程

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的代码,基于这两个生成的代码编写客户端的关键代码如下:BusinessServicebusinessService=newBusinessService();

Businessbusiness=businessService.getBusinessPort();

business.echo(command);

WebService传输的数据协议采用SOAP,SOAP对于复杂的对象结构比较难支持,其好处是能够支持跨语言。

无论是采用RMI还是WebService,都封装了网络通信的细节,因此使用起来会较为简单,但如果想对通信细节做一些调优或控制,也会比较麻烦。

【责任编辑:云霞 TEL:(010)68476606】

点赞 0

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值