当前位置: 首页 > ops >正文

【java】webservice服务

文章目录

  • 1. 介绍
    • 1.1 webservice介绍
    • 1.2 soap协议介绍
    • 1.3 wsdl
    • 1.4 UDDI
  • 1.5 ApacheCXF
  • 2. 开发
    • 2.1 JAX-WS
      • 2.1.1 cxf实现
        • 2.1.1.1 依赖
        • 2.1.1.2 服务端代码
        • 2.1.1.3 客户端代码
      • 2.1.2 cxf实现+整合spring
        • 2.1.2.1 依赖
        • 2.1.2.2 服务端代码和配置
        • 2.1.2.3 客户端代码和配置
    • 2.2 JAXM&SAAJ
    • 2.3 JAX-RS
      • 2.3.1 restful介绍
      • 2.3.1 cxf实现
        • 2.3.1.1 服务端代码+依赖
        • 2.3.1.2 客户端代码+依赖
      • 2.3.2 cxf实现+整合spring
        • 2.3.2.1 服务端代码+依赖
        • 2.3.2.2 客户端代码+依赖
    • 2.4 WS和RS区别

官方web服务地址
java进阶教程之webservice深入浅出【黑马程序员】视频地址

1. 介绍

1.1 webservice介绍

webservice即web服务,它是一种跨编程语言和跨操作系统平台的远程调用技术。
JAVA 中共有三种WebService规范,分别是JAXM&SAAJJAX-WS(JAX-RPC)JAX-RS
webservice三要素: soapwsdluddi

在这里插入图片描述

1.2 soap协议介绍

SOAP即简单对象访问协议(Simple Object Access Protocol),是用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议。它有三个主要方面:XML-envelope为描述信息内容和如何处理内容定义了框架,将程序对象编码成为XML对象的规则,执行远程过程调用(RPC)的约定。SOAP可以运行在任何其他传输协议上。
(2) SOAP作为一个基于XML语言的协议用于有网上传输数据。
(3) SOAP = 在HTTP的基础上+XML数据。
(4) SOAP是基于HTTP的。
(5) SOAP的组成如下:
a) Envelope - 必须的部分。以XML的根元素出现。
b) Headers - 可选的。
c) Body - 必须的。在body部分,包含要执行的服务器的方法和发送到服务器的数据。

1.3 wsdl

Web Service描述语言WSDL(SebService Definition Language)就是用机器能阅读的方式提供的一个正式描述文档而基于XML(标准通用标记语言下的一个子集)的语言,用于描述Web Service及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。

wsdl说明书,

  1. 通过wsdl说明书,就可以描述webservice服务端对外发布的服务;
  2. wsdl说明书是一个基于xml文件,通过xml语言描述整个服务;
  3. 在wsdl说明中,描述了:
    1. 对外发布的服务名称(类)
    2. 接口方法名称(方法)
    3. 接口参数(方法参数)
    4. 服务返回的数据类型(方法返回值)

1.4 UDDI

Web 服务提供商又如何将自己开发的 Web 服务公布到因特网上,这就需要使用到 UDDI 了,UDDI的话,是一个跨产业,跨平台的开放性架构,可以帮助 Web 服务提供商在互联网上发布 Web 服务的信息。UDDI 是一种目录服务,企业可以通过 UDDI 来注册和搜索 Web 服务。简单来时候话,UDDI 就是一个目录,只不过在这个目录中存放的是一些关于 Web 服务的信息而已。并且 UDDI 通过SOAP 进行通讯,构建于 . Net 之上。UDDI 即 Universal Description,Discovery andIntegration,也就是通用的描述,发现以及整合。UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为WebService提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。

1.5 ApacheCXF

Apache CXF = Celtix + XFire,ApacheCXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。目前它仍只是 Apache 的一个孵化项目。
Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTfulHTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成。
总结: 一种webservice实现框架

2. 开发

2.1 JAX-WS

全称: Java API For XML-WebService,JDK1.6 自带的版本为 JAX-WS2.1,其底层支持为 JAXB。JAX-WS(JSR 224)规范的 API 位于 javax.xml.ws.* 包,其中大部分都是注解,提供 API 操作 Web 服务(通常在客户端使用的较多,由于客户端可以借助 SDK 生成,因此这个包中的 API 我们较少会直接使用)。

2.1.1 cxf实现

2.1.1.1 依赖
 <!--要进行jax-ws服务开发--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.0.1</version></dependency><!--内置jetty web服务器:用tomcat运行,不需要,此处测试类启动依然需要--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http-jetty</artifactId><version>3.0.1</version></dependency><!--日志实现--><dependency><groupId>org.slf4j</groupId><artifactId>slf4j-log4j12</artifactId><version>1.7.12</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><!--httpclietn--><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.5.13</version></dependency><dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpmime</artifactId><version>4.5.13</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.73</version></dependency>
2.1.1.2 服务端代码
--接口
@WebService//客户端调用,也需要加入该注解
public interface UserService {public String sayHi(String name);
}
--实现
public class UserServiceImpl implements UserService {@Overridepublic String sayHi(String name) {return "Hello,Welcom to the impl";}}--发布public static void main(String[] args) {//服务工厂JaxWsServerFactoryBean jaxWsServerFactoryBean = new JaxWsServerFactoryBean();//设置服务地址jaxWsServerFactoryBean.setAddress("http://localhost:8081/user");//访问wsdl地址:http://localhost:8081/user?wsdl//设置服务类jaxWsServerFactoryBean.setServiceBean(new UserServiceImpl());//设置服务接口jaxWsServerFactoryBean.setServiceClass(UserService.class);//不是必须的//  添加日志输入、输出拦截器,观察soap请求、soap响应内容
//        jaxWsServerFactoryBean.getInInterceptors().add(new LoggingInInterceptor());
//        jaxWsServerFactoryBean.getOutInterceptors().add(new LoggingOutInterceptor());//发布服务jaxWsServerFactoryBean.create();System.out.println(logger);logger.info("服务端启动");}
2.1.1.3 客户端代码
    @Testpublic void fun3() {//  服务接口访问地址:http://localhost:8000/ws/hello// 创建cxf代理工厂JaxWsProxyFactoryBean jaxWsProxyFactoryBean = new  JaxWsProxyFactoryBean();//  设置远程访问服务端地址jaxWsProxyFactoryBean.setAddress("http://localhost:8081/user");//  设置接口类型jaxWsProxyFactoryBean.setServiceClass(UserService.class);//  对接口生成代理对象UserService helloService = jaxWsProxyFactoryBean.create(UserService.class);// 远程访问服务端方法String content = helloService.sayHi("Jet");System.out.println(content);}

2.1.2 cxf实现+整合spring

2.1.2.1 依赖
<dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.3.22</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>5.3.22</version></dependency><dependency><groupId>javax.servlet</groupId><artifactId>servlet-api</artifactId><version>3.0-alpha-1</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.13.2</version></dependency><!--要进行jax-ws服务开发--><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.0.1</version></dependency><!--内置jetty web服务器--><dependency><groupId>org.apache.cxf</groupId><artifactId
http://www.xdnf.cn/news/14872.html

相关文章:

  • 基于Excel的数据分析思维与分析方法
  • 【Vibe Coding 实战】我如何用 AI 把一张草图变成了能跑的应用
  • Hadoop高可用集群搭建
  • 【排坑记录】Cursor 出现 “Connection failed” 报错?试试修改 HTTP Compatibility Mode!
  • HTTPS 协议原理
  • 数据驱动实时市场动态监测:让商业决策跑赢时间
  • 操作系统王道考研习题
  • CICD[构建镜像]:构建django使用的docker镜像
  • Linux proxy设置
  • 2048小游戏实现
  • PADS交互式布局
  • 查看linux中steam游戏的兼容性
  • Python练习Day1
  • 【Elasticsearch】检索排序 分页
  • vue router 里push方法重写为什么要重绑定this
  • FLUX.1-Kontext 高效训练 LoRA:释放大语言模型定制化潜能的完整指南
  • 相机位姿估计
  • 一文讲清楚React中Refs的应用
  • 成为git砖家(12): 看懂git合并分支时冲突提示符
  • Python 机器学习核心入门与实战进阶 Day 3 - 决策树 随机森林模型实战
  • vue 条件渲染(v-if v-else-if v-else v-show)
  • 时域与频域信号特性分析——DFT归一化与双边谱合并分析
  • Kali Linux Wifi 伪造热点
  • SpringBoot:整合quartz实现定时任务-集群化配置
  • 温湿度变送器与电脑进行485通讯连接并显示在触摸屏中(mcgs)
  • Visual Studio 2022 MFC Dialog 添加Toolbar及Tips提示
  • 【算法刷题记录(简单题)002】字符串字符匹配(java代码实现)
  • 补充:问题:CORS ,前后端访问跨域问题
  • Java Go SDK 管理工具与最佳实践
  • 《Java修仙传:从凡胎到码帝》第四章:设计模式破万法