系列博文:

分布式.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工程

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

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

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

客户端

步骤:

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

实现:

1. 创建java工程

2. 生成本地代码

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

【说明】wsimport指令

1. 该指令是JDK下指令

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

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

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

再执行wsimport 指令

【生成的代码】

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的内容:

xsd文件解析

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

以下是XSD文件解析:

注解开发

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

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

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

@WebService

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

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

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

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

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

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

serviceName="abc"

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

name="xyz"

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

 targetNamespace=http://it.baidu.com

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

@WebMethod()

注解写的位置:

 operationName="show" 

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

 exclude=true

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

@WebParam(name="a")

注解位置:

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

@WebResult(name="r")

注解位置:

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


END

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

  1. WebService入门案例

    关于WebService的作用和好处,大家应该都了解.但如何在Asp.Net中添加Web Service等问题一直是新手朋友的一大难题.鉴于网上没有一个像样的实际案例,特将课程设计中运用到的WebSe ...

  2. Dva.js+umi入门案例(models层,services层,components层详细代码与解析)

    dva.js dva简化了我们使用redux管理数据的那些繁杂的步骤, 它把所有的步骤都整合到一个model文件里, 在这个文件里你可以管理你的state,处理你的同步&异步action, 还 ...

  3. WebService入门学习一

    参考:https://blog.csdn.net/c99463904/article/details/76018436 1.WebService简介? Web Service技术, 能使得运行在不同机 ...

  4. WebService入门一、Hello WebService

    2019独角兽企业重金招聘Python工程师标准>>> 准备工作 下载最新版本的JAX-WS RI(此处为2.2.8): http://repo.maven.apache.org/m ...

  5. 2021年大数据Flink(八):Flink入门案例

    目录 Flink入门案例 前置说明 API 编程模型 准备工程 pom文件 log4j.properties Flink初体验 需求 编码步骤 代码实现 Flink入门案例 前置说明 API API ...

  6. java axis2 教程_webservice的Axis2入门教程java版

    本文转自百度文库 Axis2是一套崭新的WebService引擎,该版本是对Axis1.x重新设计的产物.Axis2不仅支持SOAP1.1和SOAP1.2,还集成了非常流行的REST WebServi ...

  7. 【WebService】第五章、WSDL文件详解

    本章主要详细记录如何读懂一个WSDL描述文件. 在上一章里面我们已经成功部署了一个WebService服务,并且通过浏览器能够顺利的看到WSDL文件.那么该文件 表示什么含义呢?通过这个文件我们该如何 ...

  8. dubbo-快速入门-分布式RPC框架Apache Dubbo

    文章目录 分布式RPC框架Apache Dubbo 1. 软件架构的演进过程 1.1 单体架构 1.2 垂直架构 1.3 SOA架构 1.4 微服务架构 2. Apache Dubbo概述 2.1 D ...

  9. mybatis基于注解的入门案例

    mybatis基于注解的入门案例:             把IUserDao.xml移除,在dao接口的方法上使用@Select注解,并且指定SQL语句             同时需要在SqlMa ...

最新文章

  1. R语言使用dplyr包使用group_by函数、summarise函数和mutate函数计算分组下的均值、标准差、样本个数、以及分组均值的95%执行区间对应的下限值和上限值(Calculate CI)
  2. MicroPython实例之TPYBoardv102自动浇花系统
  3. Maven提高篇系列之(五)——处理依赖冲突
  4. 在gridview或datagrid中添加汇总行的三种实现方式
  5. linux服务器安装caffe(无root权限)
  6. C#语言-NPOI.dll导入Excel功能的实现
  7. C++11 随机数生成
  8. php 获取header auth,php CURL Auth请求头和响应头获取
  9. Hive精选高频面试题
  10. win7系统如何卸载漏洞补丁--win10专业版
  11. 网络词典[U~Z](转)
  12. VBA学习练习-将多个单元格内容合并
  13. 关于编译优化选项o3的问题
  14. PS如何修改gif动图 播放速度 - 本地方法篇
  15. 解决uniapp手机浏览器视频封面不显示问题
  16. 信息系统分析与设计-信息、管理与信息系统
  17. 阴阳师真八歧大蛇最低配置攻略,蛇黑切
  18. 励销云全流程智能销售解决方案,助力B2B企业高效增长
  19. 图片按钮+自定义形状
  20. 手机助手通过usb数据线连接

热门文章

  1. 从公务员转行网络安全工程师,铁饭碗也比不过“金饽饽”。
  2. Servlet实现用户注册
  3. Matlab代码:ADMM算法在考虑碳排放交易的电力系统最优潮流中的应用
  4. c语言485通讯源程序,51单片机485通信实验C语言源代码实现
  5. 计算机启动报警,我台式电脑开机报警四声什么問題?
  6. Java判断一个数字是否是素数
  7. 酒店企业私域流量运营方案来了
  8. MySQL数据库对象管理
  9. lazyLoadingEnabled和aggressiveLazyLoading作用
  10. Git ssh 下载设置