WebService远程调用技术

一.WebService技术介绍

  1. 远程调用技术
    Web service是一个平台独立的,低耦合的,自包含的、基于可编程的web的应用程序,可使用开放的XML(标准通用标记语言下的一个子集)标准来描述、发布、发现、协调和配置这些应用程序,用于开发分布式的互操作的应用程序。

  2. 应用场景
    系统与系统之间的数据调用,从远程系统中获取业务数据。
    案例:OA协同办公系统与档案管理系统之间的对接。

二.WebService三大要素

  1. Soap:(Simple Object Access Protocol)
    简单对象存取协议。是XML Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他通过可以SOAP调用你建立的Web服务中的一个或多个操作。SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。

  2. WSDL:(Web Services Description Language)
    WSDL 文件是一个 XML 文档,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。
    元素说明:
    Service 用于聚合一组服务访问点构成一个Web Services的定义。
    Port 为Binding(绑定)制定一个地址,从而定义一个服务访问点。
    Binding 为特定PortType(端口类型)定义的操作和消息指派具体的传输协议和数据格式规范。
    PortType 一个或多个端点支持的操作的抽象集合。每个操作一般会引用一条输入消息和一条输出消息。
    Message 代表所传输数据的抽象定义。消息由一些逻辑片断构成,每个逻辑片断分别与某个类型系统中的定义相关联。
    Type 提供用于描述所交换消息的数据类型定义(string、int)。
    这里写图片描述

  3. UDDI (Universal Description, Discovery, and Integration)
    是一个主要针对Web服务供应商和使用者的新项目。在用户能够调用Web服务之前,必须确定这个服务内包含哪些商务方法,找到被调用的接口定义,还要在服务端来编制软件,UDDI是一种根据描述文档来引导系统查找相应服务的机制。UDDI利用SOAP消息机制(标准的XML/HTTP)来发布,编辑,浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。

三.案例说明(气象局—天气查询网站)

  1. 需求分析
    气象局(服务端)——天气查询网站(客户端)
    服务端:发布一个天气查询服务,接收客户端城市名,返回天气数据给客户端;
    客户端:发送城市名称给服务端,接收服务端的返回数据,打印。
    这里写图片描述

2.程序实现
a.服务端:

step1:创建SEI(Service Endpoint Interface)接口,本质上就是java接口;         
/**
 * step1:创建接口
 * @author Administrator
 *
 */
public interface WeatherInterface {
    public String queryWeather(String cityName);
}
step2:创建SEI实现类;
@WebService // 表示该类是一个服务类,需要发布其中的public方法
public class WeatherInterfaceImpl implements WeatherInterface{

    @Override
    public String queryWeather(String cityName) {
        // TODO Auto-generated method stub
        System.out.println("from client..." + cityName);
        String weather = "晴";
        return weather;
    }   
}
step3:发布服务,Endpoint发布服务,publish方法,
       两个参数:1.服务地址;2.服务实现类;
public class WeatherServer {
    public static void main(String[] args){
        /*
         *  Endpoint发布服务
         *  参数解释:
         *  1.address:服务地址
         *  2.implementor:实现类
         */
        Endpoint.publish("http://localhost:12345/weather",
            new WeatherInterfaceImpl());
    }
}
step4:测试服务是否发布成功,通过阅读使用说明书,
       确定客户端调用的接口、方法、参数和返回值存在,证明服务发布成功。
       url:http://localhost:12345/weather

这里写图片描述
注: WSDL地址:服务地址+“?wsdl”; WSDL阅读方式:从下往上(图片)。


b.客户端:

step1:wsimport命令生成客户端代码;
       wsimport -s . http://localhost:12345/weather?wsdl

这里写图片描述
项目目录结构:
这里写图片描述

step2:根据使用说明书,使用客户端代码调用服务端
       第一步:创建服务视图,视图是从service标签的那么属性获取;
       第二步:获取服务实现类,实现类从portType的name属性获取;
       第三步:获取查询方法,从portType的operation标签获取。
public class WeatherClient {
    public static void main(String[] args) {
        // 创建服务视图(加载接口信息、实现类等)
        WeatherInterfaceImplService weatherInterfaceImplService 
            = new WeatherInterfaceImplService();

        // 获取服务实现类
        WeatherInterfaceImpl weatherInterfaceImpl 
            = weatherInterfaceImplService
            .getPort(WeatherInterfaceImpl.class);

        // 调用查询方法,打印
        String weather = weatherInterfaceImpl.queryWeather("北京");
        System.out.println(weather);
    }
}

3.运行结果
这里写图片描述
这里写图片描述

猜你喜欢

转载自blog.csdn.net/clearfairy/article/details/80450067
今日推荐