分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)

 系列博文:

分布式.RPC调用-RMI & Hessian框架_闲猫的博客-CSDN博客

分布式.RPC-WebService三要素,三个规范, Soap协议_闲猫的博客-CSDN博客

分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_闲猫的博客-CSDN博客

分布式.RPC调用-RMI & Hessian框架_闲猫的博客-CSDN博客

分布式.RPC-WebService CXF框架_闲猫的博客-CSDN博客

分布式.RPC-WebService Restful风格实现_闲猫的博客-CSDN博客


目录

入门案例

服务端

客户端

WSDL文件解析

 xsd文件解析

注解开发

@WebService

 @WebMethod()

@WebParam(name="a")

@WebResult(name="r")


特点:跨平台、跨语言、但速度比较慢

场景:适用于异构系统之间的调用,比如:两个厂家实现的系统彼此调用

协议:基于SOAP协议(应用层

入门案例

服务端

步骤:

  1. 创建一个java工程
  2. 编写提供服务的类
  3. 发布服务的方法
  4. 测试

实现:

1. 创建一个java工程

      分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第1张图片

2. 编写提供服务的类(服务类)

模型类:

public class Member implements Serializable[ww1]  {

    private static final long serialVersionUID = -7197511997605564716L;

    private Integer uuid;

    private String name;

     // 有参/无参构造方法

    // setter/getter方法

     // toString方法

}


 [ww1]就是一个实现了Serializable [ww1]接口的JavaBean

业务实现类:

@WebService[ww1] 

public class MemberService {

    public String get(Integer i) {

       return "张三";

    }

    public Member getMember(String sn) {

       return new Member(11, "赵芸");

    }

    public String setMember(Member member) {

       return member.toString();

    }

}


 [ww1]必须写该主键否则报错

注意】(服务类使用@WebService注解)如没有注解将报错:

Exception in thread "main" java.lang.IllegalArgumentException: class cn.itcast.Service.MemberService has neither @WebService nor @WebServiceProvider annotation

3. 发布服务的方法

public static void main(String[] args) {

     //第一个参数:发布的地址

     //第二个参数:该地址对应的服务类

    Endpoint.publish("http://localhost:23456/member", new MemberService());

}

4. 测试

URL地址:http://localhost:23456/member

分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第2张图片

点击:http://localhost:23456/member?wsdl 

分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第3张图片

出来这个就标识服务发布成功。

客户端

步骤:

  1. 创建java工程
  2. 生成本地代码
  3. 调用远程服务

实现:

1. 创建java工程

2. 生成本地代码

         进入工程src目录下,使用指令:“wsimport –s . 发布地址?wsdl”,在CMD下执行。如下图:

         分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第4张图片

 【说明】wsimport指令

        1. 该指令是JDK下指令

        2.直接使用的前提是已经配置了JDK环境变量

        3.如果没有配置环境变量,还想直接使用,先执行

                Path D:\JavaConfig\Java\jdk1.7.0_72\bin (jdk路径,到bin一级)

                再执行wsimport 指令

【生成的代码】

        分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第5张图片

3. 调用远程服务

  • 第一种方式:

public static void main(String[] args) {

    MemberServiceService memberService = new  MemberServiceService();[ww1] 

    MemberService memberServicePor =

                memberService.getMemberServicePort()[ww2] ;

      

    Member mem = memberServicePor.getMember("");

    System.out.println(mem.getName() + " " + mem.getUuid());

}


 [ww1]用来产生接口

 [ww2]获取接口

内部实现:

MemberServiceService代码:

@WebServiceClient(name = "MemberServiceService", argetNamespace = "http://Service.itcast.cn/", wsdlLocation = "http://localhost:23456/member?wsdl")

public class MemberServiceService extends Service

{

   static {

        URL url = null;

        try {

            url = new URL("http://localhost:23456/member?wsdl");

        } catch (MalformedURLException ex) {

        }

    }

    @WebEndpoint(name = "MemberServicePort")

    public MemberService getMemberServicePort() {

        return super.getPort(new QName("http://Service.itcast.cn/",

                      "MemberServicePort"), MemberService.class);

    }

}

  • 第二种方式:

从第一种实现的源码中看第二种实现方式。

public static void main(String[] args) {

    try {

        URL url[ww1]  = new URL("http://localhost:23456/member?wsdl");

       QName qname [ww2] = new QName("http://Service.itcast.cn/",

              "MemberServiceService");

      

       Service service = Service.create[ww3] (url, qname);

       MemberService memberservice =       

                      service.getPort(MemberService.class)[ww4] ;

      

       Member mem = memberservice.getMember("");

       System.out.println(mem.getName() + " " + mem.getUuid());

    } catch (Exception e) {

       e.printStackTrace();

    }

}


 [ww1]在哪里找

 [ww2]找什么

 [ww3]创建服务对象

 [ww4]根据Service类获取接口对象,即:提供服务的对象

WSDL文件解析

       WSDL (Web Service Description Language) WebService描述语言,是WebService发布服务的描述,相当于WebService的使用说明书。通常一个WSDL文件描述的是一个服务类提供的服务的描述。

       描述的内容包括:

              该服务类提供接口需要的模型类(返回值、形参;在类中的模型不进行模式)

              对外提供的接口(方法描述:方法名、形参列表和返回值)

              绑定的服务对象以及服务对象是啥

       以下图示WSDL的内容:

        分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第6张图片

 xsd文件解析

       XSD文件是描述使用过程中的一些模型类,以及一些基本类的包装类(这个包装类不是Integer和Double等这种,而是将getEember、getMemberResponse这种类型)。

       以下是XSD文件解析:

        分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第7张图片

注解开发

       这里说的注解只是用来修改在客户端方法、变量的名称以及类的名称,可以和原始的方法名称、变量名、类名不同。这样就可以隐藏服务器内部的实现。

       注解包括四个:@WebService、@WebMethod、@WebParam、@WebResult。分别代表:服务类、方法、形参、返回值。

       以下是注解的位置,参考位置所在:

        分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第8张图片

@WebService

注解写的位置:(MemberService是服务类)

 

【说明】服务类和接口类不同

       在WebService服务端生成WSDL中有两种类对外提供服务,这两个类对应的是我们在服务端写的服务类,这两个类一个是服务类,各类就好似对外提供了一个服务,你可以根据调用不同的接口,来完成不同的功能。另一种是接口类,就是对外提供接口的类,用来实现具体的功能,其实这是一个接口,对外提供的接口就是定义服务类提供的接口。而服务类中提供的是获取各个接口的方法,比如:getMemberPoint用来获取接口。

       比如:现在一个学生管理系统,对外只提供一个服务器类,但学生管理系统下有不同的模块,那就是不同的接口类实现啦。

       服务类和接口类在调用中的关系如下:

       分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第9张图片

        一个服务类对应的是一个WSDL文件。

serviceName="abc"

         用来修改服务类的类名,下面是WSDL文件中的变化

        

 name="xyz"

         用来修改接口的类名,下面是WSDL文件中的变化

         

 targetNamespace=http://it.baidu.com

        用来修改一个服务类对应的WSDL的命名空间,下面是WSDL文件中的变化

        

 @WebMethod()

注解写的位置:

        

 operationName="show" 

        用来修改接口类中方法的名称,下面是WSDL文件中的变化

        分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第10张图片

 exclude=true

       隐藏此方法,不进行发布出去,虽然是共有方法也不发布出去,如果没有能发布的方法,在发布服务是(启动)时将报错。

@WebParam(name="a")

       注解位置:

        分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第11张图片

         用来修改形式参数名称,下面是XSD文件中的变化

        分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第12张图片

@WebResult(name="r")

        注解位置:

         分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第13张图片

        用来修改返回值名称,下面是XSD文件中的变化

        分布式.RPC-WebService入门案例(java实现,注解实现,xsd文件解析,wsdl文件解析)_第14张图片


END 

你可能感兴趣的:(分布式,分布式,webservice)