通过Web Service实现Java与.net互联 (将.net程序封装成为Web Service,通过Java程序进行调用) Web Service概述什么是Web ServiceWeb Service是能够基于网络,尤其是基于万维网(World Wide Web)直接调用的能够处理离散任务或连续任务的软件模型。目前较为流行的应用是,由一家公司对其专有数据进行封装,提供Web Service,然后其它公司就可以通过Internet来动态使用这些在线服务。这为未来全球的电子商务发展提供了新的标准和架构。 Web Service架构Web Service是独立的、模块化的应用,能够通过因特网来描述、发布、定位以及调用。在Web Service的体系架构中包括三个角色:服务提供者(Service Provider)、服务请求者(Service Requestor)、服务注册器(Service Registry)。角色间主要有三个操作:发布(Publish)、查找(Find)、绑定(Bind)。 下图清楚的描述了三种角色,以及角色之间的作用关系。 Web Service协议标准简单对象访问协议(SOAP)SOAP是Simple Object Access Protocol的缩写,是一种基于XML的不依赖传输协议的表示层协议,用来在分散或分布式的应用程序之间方便地以对象的形式交换数据。在SOAP的下层,可以是HTTP/HTTP,也可以是SMTP/POP3,还可以是为一些应用而专门设计的特殊的通信协议。 SOAP包括三个主要部分: ² SOAP封装结构:定义了一个整体框架,以表示消息中包含什么内容,谁来处理这些内容以及这些内容是可选的或是必需的。 ² SOAP编码规则:定义了用以交换应用程序定义的数据类型的实例的一系列机制。 ² SOAP RPC表示:定义了一个用来表示远程过程调用和应答的协定。 Web Service描述语言(WSDL)WSDL是Web Service Description Language的缩写,该语言将网络服务定义成一个能交换消息的通信端点集,为分布式系统提供了帮助文档,同时也可作为自动实现应用间通信的解决方案。 统一描述、发现和集成协议(UDDI)UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。 通过Java调用Web Service在这里我们通过.net实现了一个Web Service,它提供了这样的功能,将输入的两个数相加,返回结果。 示例Web Service提供的功能 该示例Web Service提供了两个整数相加的功能,使用C#来实现Web Service,可以通过java/math.asmx?wsdl">http://10.16.92.29/java/math.asmx?wsdl访问Web Service描述文件,其对应的WSDL描述如下所示: 通过JBuilder9调用该Web Service建立一个新项目TestWebService 新建一项目,指定项目名称“TestWebService”,及所在目录,其它全部按缺省设置。 从URL中导入Web Service通过快捷方式“CTRL+N”,打开新建窗口,选择“Web Services”项,然后选择“Import a Web Service”,单击“OK”。 输入WSDL文件地址:java/math.asmx?wsdl">http://10.16.92.29/java/math.asmx?wsdl,然后单击“Next”。 这一步中,您可以随意指定包名,如果将“Package options”中的复选框选中的话。生成的所有类将使用同样的包名。然后还可以选择“SOAP”协议类型,在此我们选择SOAP1.2协议,其它的设置就按缺省设置就可以了,单击“Next”按钮。 在确认窗口中,单击“Finish”完成导入工作。 导入成功后,JBuilder9会自动生成如下文件,如下所示。 自动生成文件的作用Ø Service1.java 该类定义了所需要的接口 Ø Service1Locator.java 该类实现了Service1接口,主要用于定位WSDL文件 Ø Service1Soap.java 该类定义了Web Service提供的接口方法 Ø Service1SoapImpl.java 该类实现了Service1Soap接口 Ø Service1SoapStub.java 该类实现了Service1Soap接口,用于实现Web Service调用。 Ø Service1TestCase.java JBuilder自动生成的单元测试类 编写测试代码package org.tempuri; office:office" /> import java.util.*;
/** * 测试程序 * <p>Title: 通过客户端来测试Web Service</p> * <p>Description: 通过客户端来测试Web Service</p> * <p>Copyright: Copyright (c) 2004</p> * <p>Company: Tiger</p> * @author SucreTiger * @version 1.0 */ public class Test { public static void main(String[] agrs) { long startW = Calendar.getInstance().getTime().getTime(); for (int i = 0; i < 3; i++) { try { //定位WSDL文件的位置 Service1Locator sl = new Service1Locator(); //获得Web Service的引用 Service1Soap ss = (Service1Soap) sl.getService1Soap(); //通过记录开始和结束的时间,来测试Web服务调用所花费的时间 long start = Calendar.getInstance().getTime().getTime(); System.out.println("开始时间 : " + start); //调用Web Service提供的功能方法 int result = ss.add(100, 99); System.out.println("返回结果: " + result); long end = Calendar.getInstance().getTime().getTime(); System.out.println("结束时间: " + end); System.out.println("时间消费: " + (end - start)); } catch (Exception ex) { ex.printStackTrace(); } } } } 查看测试结果D:\JBuilder9\jdk1.4\bin\javaw -classpath "D:\Projects\TestWebService\classes;D:\JBuilder9\thirdparty\junit3.8\junit.jar;D:\JBuilder9\lib\unittest.jar;D:\JBuilder9\lib\saaj.jar;D:\JBuilder9\lib\jaxrpc.jar;D:\JBuilder9\lib\axis.jar;D:\JBuilder9\lib\wsdl4j.jar;D:\JBuilder9\lib\log4j-office:smarttags" /> |
|
来自: 小朋 > 《Java与Xml技术》