Bootstrap

(一)WebService之Soap服务

1.引言

      WebService顾名思义就是web服务,web服务主要有两种,一种是基于soap类型的服务,一种是基于rest类型的服务,其中soap类型的服务有两种版本,一种是soap1.1版本,一种是soap1.2版本,soap服务类型的数据是xml数据格式的,而rest服务的数据类型是json格式的,这里主要介绍soap类型的服务。

2.什么是WSDL?

      wsdl(网络服务描述语言)是Web Service的描述语言,也就是说wsdl文件是soap的使用说明书。在学习soap之前,认识WSDL是非常有必要的,只有能看懂WSDL文件,我们才可以去调用soap类型的Web服务,下面是一个非常简单的wsdl文件。

这里写图片描述

soap服务的描述文件 :从下面向上看

解释:首先我们可以看到服务的地址为:http://localhost:8080/hello,对应wsdl文件的地址为http://localhost:8080/hello,地址的前缀为soap,说明这个服务是基于soap1.1版本的,然后我们可以看到服务的名称为HelloServiceHelloService绑定的Port为HelloPortBinding,然后我们找到HelloPortBinding绑定的类型为Hello,从Hello中我们可以看到,支持一个方法叫做sayHello,关于sayHello的具体参数的信息我们可以从http://localhost:8080/hello?xsd=1中得到如下图所示:

这里写图片描述

3.在WSDL文件中我们可以获得什么信息?

  • soap服务的名称
  • soap服务的地址
  • soap服务暴露的方法
  • soap服务方法的参数
  • soap服务方法参数的类型和相应的返回值执行

4.利用Java发布soap服务

      接下来我们利用Java发布一个soap类型的服务,在Java JDK1.6版本以后,我们可以通过Endpoint来发布一个soap服务,代码如下:

package com.skd.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;

//必须要加注释
@WebService
public class Hello {
    public String sayHello(String name){
        return "hello " + name;
    }
    public static void main(String[] args) {
        //服务的地址
        String address = "http://localhost:8080/hello";
        Hello implementor = new Hello();
        //发布服务,第一个参数是服务的地址,第二个参数是发布出去服务的方法
        Endpoint.publish(address, implementor);
    }
}

4.使用myeclipse的插件来访问soap服务

  • 首先打开myeclipse,点击Launch SOAP Web Services Explorer

这里写图片描述

  • 点击WSDL Page

这里写图片描述

  • 点击WSDL Main

    这里写图片描述

  • 输入我们发布服务的wsdl路径

这里写图片描述

  • 输入服务的参数

这里写图片描述

  • 查看状态,查看源

这里写图片描述

  • 服务返回的数据

这里写图片描述

5.利用JDK注释控制WSDL文件

代码如下:

package com.skd.service;

import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;


@WebService(targetNamespace="http://com.wpx",serviceName="WPXService")
public class Hello {
    //提供一个合法的web方法
    @WebMethod(operationName="myMethod")
    @WebResult(name="myRet")
    public String sayHello(
            @WebParam(name="name")
            String name){
        return "hello " + name;
    }
    //排除当前方法
    @WebMethod(exclude=true)
    public String sayHi(String name){
        return "hi " + name;
    }
    public static void main(String[] args) {
        String address = "http://localhost:8080/hello";//服务的发布地址
        Hello implementor = new Hello();//提供服务的实例
        Endpoint.publish(address, implementor);//发布服务
    }
}

发布成功后,我们查看一下WSDL文件的变化:

这里写图片描述

这里写图片描述

;