WebService学习,wsdl文件详解

news2024/11/25 10:13:12

目录

  • 第一章、起因
    • 1.1)学习原因
    • 1.2)提问的过程(逐步提出问题)
          • 1、?wsdl链接的含义,有什么作用?
          • 2、什么是wsdl文档?
          • 3、如何阅读wsdl文件?
          • 4、wsdl文件有什么作用?
          • 5、什么是Web服务?Web Service是什么
          • 6、如何使用wsdl文件生成Java代码
          • 7、生成Java代码包含哪些内容?有什么作用
          • 8、如何将生成的Java类集成到项目中,实现与Web服务的通信
          • 9、如何调用生成的Java类中的方法?
  • 第二章、学习过程(逐步解决问题过程)
    • 2.1)什么是WSDL
      • 2.1.1)WSDL链接的含义,有什么作用?
      • 2.1.2)什么是wsdl文档?
      • 2.1.3)如何阅读WSDL文档?
    • 2.2)Web Service技术
      • 2.2.1)Web Service技术介绍
      • 2.2.2)通过wsdl文件生成客户端代码(Java代码)
      • 2.2.3)生成Java代码包含哪些内容?有什么作用
      • 2.2.4)生成的Java类集成到项目中并访问Web服务
    • 2.3)如何调用生成的Java类中的方法?
  • 第三章、
    • 3.1)发送soap请求
    • 3.2)
    • 3.3)
  • 第四章、
    • 4.1)
    • 4.2)
    • 4.3)备注Axis 1.4依赖的jar包

友情提醒:

先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。

第一章、起因

1.1)学习原因

起因
领导啥也没说,直接给了个wsdl地址,类似于下面这种后面拼个?wsdl:

http://127.0.0.1:8080/xxxx/hello?wsdl

1.2)提问的过程(逐步提出问题)

每个问题的详细答案都在后面的文章中

1、?wsdl链接的含义,有什么作用?

简单回答:返回WSDL描述文档

2、什么是wsdl文档?

简单回答:一个xml格式的描述文档,可以被用来生成客户端代码(Java代码),以便与Web服务进行通信。

3、如何阅读wsdl文件?

简单回答:从下往上阅读

4、wsdl文件有什么作用?

简单回答:描述web服务,生产Java代码

5、什么是Web服务?Web Service是什么

简单回答:Web Service部署完后可以通过URL访问Web服务

6、如何使用wsdl文件生成Java代码

简单回答:使用wsim命令

7、生成Java代码包含哪些内容?有什么作用

简单回答:在本地通过这些Java代码(客户端代码)访问调用远程Web服务中的方法

8、如何将生成的Java类集成到项目中,实现与Web服务的通信

简单回答:将生成的客户端代码复制到项目中,添加客户端代码需要的依赖包,编写代码调用服务。

9、如何调用生成的Java类中的方法?

第二章、学习过程(逐步解决问题过程)

2.1)什么是WSDL

2.1.1)WSDL链接的含义,有什么作用?

刚看到的时候比较懵,先尝试访问了一下这个链接http://127.0.0.1:8080/xxxx/hello?wsdl,返回了一个WSDL文件,文件内容为XML格式:
在这里插入图片描述

2.1.2)什么是wsdl文档?

WSDL是XML格式的文档,有以下作用:

①标准化描述web服务
WSDL是用XML的语言来标准化描述Web服务的描述语言(Web Services Description Language的缩写),文件内容为xml格式,以.wsdl结尾。用于描述如何访问特定的Web服务以及如何与其进行交互。包括web服务的具体功能接口(调用方式、输入参数、输出参数以及相关的消息格式)。

②发现可用的Web服务
描述Web服务的端点(endpoint)即客户端可以访问的服务位置,以及使用的通信协议和绑定信息。(可以将端口视为Web服务的端点)。

③定义通信协议和消息格式
描述客户端和服务端之间交换的消息的结构和格式,以便双方能够理解和解析这些消息。对于分布式系统和跨平台集成非常重要。

④生成客户端代码(Java代码)
WSDL文档可以用来生成客户端代码(Java代码),以便与Web服务进行通信。

2.1.3)如何阅读WSDL文档?

WSDL文档元素阅读顺序如下:从文档最下放找到service节点然后按如下的顺序往上看

元素介绍:

	1、服务(service)节点:定义了Web服务的具体网络地址(Endpoint),也就是服务的URL。
	service标签包含了服务端端口(port)属性对应
	
	2、服务端口(port)节点:通常包含Binding属性:将抽象操作映射到具体的通信协议和消息格式,例如SOAP协议。通过Binding属性找到binding节点
	
	3、绑定(Binding):binding节点中包含具体的绑定信息,含有type属性。
	通过type属性找到相关联的端口节点(portType)
	
	4、端口类型(PortType)节点:可以理解为一个类,一个接口。
	PortType里定义包含了多个操作(operation )节点
	
	5、操作(operation)节点: 相当于该类里有一个方法,name就是方法名称。
	operation 包含了input节点,output节点,和fault节点(不常用)
	
	6、输入输出(Input和output)节点:input节点对应了Web服务的输入消息即参数的定义。
	output节点对应了Web服务输出消息即返回值的定义。
	他们有个属性叫做message,通过message属性找到对应message节点。
	
	7、消息(message)节点:描述了消息的组成部分,即消息的参数和类型。
	一个消息包含多个part节点可以传递一个或者多个参数。

	8、消息组成(part)节点:part是消息的组成部分,多个part组成一个消息。
	part包含属性element对应(element)节点。

	9、元素(element)节点:定义了数据的类型。通过name属性定义参数的名称,通过type属性定义参数的类型。

2.2)Web Service技术

2.2.1)Web Service技术介绍

Web Service是什么
是一项技术,能使得运行在不同机器上的不同应用无须借助第三方软件或硬件, 就可相互交换数据或集成。依据Web Service规范实施的应用之间, 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。
Web Service如何部署:
Web Service的部署通常需要遵循以下步骤:

①构建Web Service:编写符合标准和规范的Web Service代码,比如Java代码

②打包Web Service:将Web Service打包成WAR文件或EAR文件。

③部署到Web容器:将打包好的Web Service部署到目标Web容器中(比如tomcat服务器,用于托管和运行Web应用程序的服务器环境,处理HTTP请求、执行Servlet和JSP等Web组件)

④验证部署:通过相应的URL进行访问Web服务,确保Web Service已经成功部署到Web容器。

2.2.2)通过wsdl文件生成客户端代码(Java代码)

只要安装了JDK1.6以上版本就可以通过wsimport命令使WSDL文件生成Java代码(客户端代码)以便客户端可以访问已发布的Web服务。wsimport命令是来自JAX-WS,它是JDK 1.6及以上版本的一部分。
示例:

wsimport -s D:\workspace\src -p main.java.com.tools -keep http://localhost:8080/HelloWorld?wsdl

-s选项:指定生成的Java源文件的绝对路径,一般都是src结尾
-p选项:指定生成的Java代码文件的目录(生成代码所在包名,也就是项目中src后面的目录)
-keep选项:表示保留生成的Java源文件在指定的输出目录中,而不会将其删除。
URL地址:是WSDL文件的地址。

2.2.3)生成Java代码包含哪些内容?有什么作用

这些Java代码包括用于调用服务的框架和类。这些生成的类将充当客户端与服务端进行通信的接口。可以用于创建客户端,在Java应用程序中调用远程Web服务的方法,并处理返回的数据。
生成的Java代码通常包括以下内容:

Service接口文件:包含了Web服务的方法定义和参数信息。通常以Service结尾,比如HelloWorldService.java。

代表Web服务接口的Java接口
代表Web服务数据类型的Java类
代表Web服务方法的Java方法

如图:
在这里插入图片描述

这些类和方法是根据wsdl文件中定义的服务、端点、操作和消息结构生成的,生成的Java代码中包含了与SOAP协议相关的类和方法,可以帮助你构建符合SOAP协议要求的消息,并将这些消息发送到远程服务端点。因此可以直接与远程服务进行交互,调用远程服务提供的操作,并获取相应的响应数据。

2.2.4)生成的Java类集成到项目中并访问Web服务

①将生成的Java类文件复制到项目的源代码目录中,通常是src/main/java/xxx/xx

②如果生成的Java类使用了其他依赖项。需要通过构建工具(如Maven或Gradle)的配置文件(例如pom.xml或build.gradle)来添加依赖。

③如果生成的Java类是用于与Web服务进行通信的客户端代码,需要编写代码来调用这些类,以实现与Web服务的交互。这可能涉及创建客户端实例、调用Web服务的方法等操作。

import com.example.weather.Weather; // 导入生成的Java类

public class WeatherClient {
    public static void main(String[] args) {
        // 创建Web服务客户端实例
        Weather weatherService = new Weather();

        // 调用Web服务的方法
        String result = weatherService.getWeather("New York");

        // 处理返回结果
        System.out.println("Weather in New York: " + result);
    }
}

2.3)如何调用生成的Java类中的方法?

第三章、

3.1)发送soap请求

使用wsdl文件生成Java代码后,通常需要发送SOAP请求。SOAP请求是一种基于XML的消息协议,用于在分布式应用程序之间进行通信。在生成的Java代码中,通常会包含与SOAP请求相关的类和方法,以便你可以使用这些类和方法来构建和发送SOAP请求到特定的Web服务端点。SOAP请求通常包括对应的操作、输入参数和其他必要的信息,以便与Web服务进行交互。
使用wsdl文件生成Java代码后,怎么发送soap请求

回答

使用wsdl文件生成Java代码后,你可以使用生成的Java类和方法来构建和发送SOAP请求。通常,你需要执行以下步骤:

创建一个SOAP消息:使用生成的Java类中的方法,创建一个符合要求的SOAP消息。

指定SOAP服务端点:设置SOAP消息的目标地址,即SOAP服务的端点地址。

发送SOAP请求:使用生成的Java类中的方法,将构建好的SOAP消息发送到指定的SOAP服务端点。

以下是一个简单的示例代码,演示如何使用生成的Java类发送SOAP请求:

// 创建一个实例
YourGeneratedService service = new YourGeneratedService();
YourGeneratedPortType port = service.getYourGeneratedPort();

// 创建一个SOAP消息
YourRequestType request = new YourRequestType();
// 设置请求参数
request.setParam1("value1");
request.setParam2("value2");

// 发送SOAP请求并获取响应
YourResponseType response = port.yourOperation(request);

在这个示例中,YourGeneratedService和YourGeneratedPortType是根据wsdl文件生成的Java类,YourRequestType和YourResponseType是根据wsdl文件中定义的消息结构生成的Java类。yourOperation是根据wsdl文件中定义的操作生成的Java方法,用于发送SOAP请求并获取响应。

3.2)

3.3)

第四章、

4.1)

4.2)

4.3)备注Axis 1.4依赖的jar包

Axis 1.4依赖的jar包,wsdl4j的包应该使用1.6.2

<!-- axis 1.4 jar start -->
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>commons-discovery</groupId>
            <artifactId>commons-discovery</artifactId>
            <version>0.2</version>
            <exclusions>
                <exclusion>
                    <groupId>commons-logging</groupId>
                    <artifactId>commons-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis-jaxrpc</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.axis</groupId>
            <artifactId>axis-saaj</artifactId>
            <version>1.4</version>
        </dependency>
        <dependency>
            <groupId>wsdl4j</groupId>
            <artifactId>wsdl4j</artifactId>
            <version>1.6.2</version>
        </dependency>
        <!-- axis 1.4 jar end -->

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1465334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

掼蛋之还贡技巧

掼蛋游戏的规则之一就是进贡和还贡以及抗贡&#xff0c;只要末游没能抗贡&#xff0c;那么就必须把最大的那张牌贡给头游&#xff0c;头游也要选一张牌还给末游。那么我们该如何还贡呢&#xff1f; 一、忌单张 尽量不要还自己的单张&#xff0c;因为自己的数量少&#xff0c;有…

靡语IT:Vue精讲(一)

Vue简介 发端于2013年的个人项目&#xff0c;已然成为全世界三大前端框架之一&#xff0c;在中国大陆更是前端首选。 它的设计思想、编码技巧也被众多的框架借鉴、模仿。 纪略 2013年&#xff0c;在Google工作的尤雨溪&#xff0c;受到Angular的启发&#xff0c;从中提取自…

如何在Shopee平台上进行杯子选品:策略指南

在当今电商平台激烈竞争的环境下&#xff0c;卖家在Shopee平台上进行杯子选品需要经过深思熟虑的策略。通过市场趋势分析、竞品研究、产品差异化、供应链稳定性、利润分析、季节性和节日考量、客户反馈、营销策略、数据驱动选品以及持续优化&#xff0c;卖家可以提高杯子产品在…

基于全卷积网络的彩色显微图像光照不均匀校正

参考&#xff1a;论文英文题目&#xff1a;Correction of uneven illumination in color microscopic image based on fully convolutional network 参考论文链接&#xff1a;https://opg.optica.org/oe/fulltext.cfm?urioe-29-18-28503&id457387 在做显微图像相关任务是…

离散化学习笔记(超详细)

离散化学习笔记 什么是离散化 对于“什么是离散化”&#xff0c;搜索帖子你会发现有各种说法&#xff0c;比如“排序后处理”、“对坐标的近似处理”等等。哪个是对的呢&#xff1f;哪个都对。关键在于&#xff0c;这需要一些例子和不少的讲解才能完全解释清楚。 离散化是程序…

微服务篇之分布式系统理论

一、CAP定理 1.什么是CAP 1998年&#xff0c;加州大学的计算机科学家 Eric Brewer 提出&#xff0c;分布式系统有三个指标&#xff1a; 1. Consistency&#xff08;一致性&#xff09;。 2. Availability&#xff08;可用性&#xff09;。 3. Partition tolerance &#xff0…

APEX开发过程的一个细节

开发过程中发现有一些特殊代码命名有要求 比如 代码&#xff1a; select "project_id",null LINK_CLASS,apex_page.get_url(p_items > P201_PROJECT_ID, p_values > "project_id") LINK,null ICON_CLASS,null LINK_ATTR,null ICON_COLOR_CLASS,cas…

Sora----打破虚实之间的最后一根枷锁----这扇门的背后是人类文明的晟阳还是最后的余晖

目录 一.Sora出道即巅峰 二.为何说Sora是该领域的巨头 三.Sora无敌的背后究竟有怎样先进的处理技术 1.Spacetime Latent Patches 潜变量时空碎片&#xff0c;建构视觉语言系统 2.扩散模型与Diffusion Transformer&#xff0c;组合成强大的信息提取器 3.DiT应用于潜变量时…

【python 的各种模块】(10) 在python3使用turtle 模块画图

目录 1 在anaconda里用python3安装turtle 1.1 因为turtle 本来是适应python2的&#xff0c;所以直接安装报错 1.2 准备好手动下载&#xff0c;官网下载安装包 1.2.1 去官方手册看了下&#xff0c;其实是支持python3的 1.2.2 官网下载&#xff0c;手动安装 1.3 解决办法&…

【Spring】IoC容器 控制反转 与 DI依赖注入 配置类实现版本 第四期

文章目录 基于 配置类 方式管理 Bean一、 配置类和扫描注解二、Bean定义组件三、高级特性&#xff1a;Bean注解细节四、高级特性&#xff1a;Import扩展五、基于注解配置类方式整合三层架构组件总结 基于 配置类 方式管理 Bean Spring 完全注解配置&#xff08;Fully Annotatio…

MATLAB环境下基于短时傅里叶变换和Rényi熵的脑电信号和语音信号分析

傅里叶变换是不能很好的反映信号在时域的某一个局部范围的频谱特点的&#xff0c;这一点很可惜。因为在许多实际工程中&#xff0c;人们对信号在局部区域的特征是比较关心的&#xff0c;这些特征包含着十分有用的信息。这类信号因为在时域(或者是空间域)上具有突变的非稳定性和…

切比雪夫(最小区域法)圆拟合算法

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 本期话题&#xff1a;切比雪夫&#xff08;最小区域法&#xff09;直线拟合算法 相关背景和理论 点击前往 主要介绍了应用背景和如何转化成线性规划问题 圆拟合输入和…

WordPress使用

WordPress功能菜单 仪表盘 可以查看网站基本信息和内容。 文章 用来管理文章内容&#xff0c;分类以及标签。编辑文章以及设置分类标签&#xff0c;分类和标签可以被添加到 外观-菜单 中。 分类名称自定义&#xff1b;别名为网页url链接中的一部分&#xff0c;最好别设置为中文…

Uniapp + VUE3.0 实现双向滑块视频裁剪效果

效果图 <template><view v-if"info" class"all"><video:src"info.videoUrl"class"video" id"video" :controls"true" object-fit"fill" :show-fullscreen-btn"false"play-btn…

极电电子WMS项目顺利验收,盘古信息助推新能源车企数字化转型

近年来&#xff0c;中国新能源汽车产销持续保持着较高增速&#xff0c;产销总量连续9年位居全球第一。 在产销高涨的背后&#xff0c;新能源汽车行业“内卷”现象也日益加剧&#xff0c;“配置战”、“价格战”等愈发激烈&#xff0c;驱动车企提高自身竞争力&#xff0c;以抢占…

基于AdaBoost算法的情感分析研究-微博情感分析-文本分类

基于AdaBoost算法的情感分析研究 摘 要 随着互联网的快速发展&#xff0c;各类社交媒体平台如微信、QQ等也与日俱增&#xff0c;而微博更是集成了传统网站、论坛、博客等的优点&#xff0c;并加上了人与人之间的互动性、关系亲密程度等多种智能算法&#xff0c;并以简练的形式…

华清远见嵌入式学习——驱动开发——day9

目录 作业要求&#xff1a; 作业答案&#xff1a; 代码效果&#xff1a; ​编辑 Platform总线驱动代码&#xff1a; 应用程序代码&#xff1a; 设备树配置&#xff1a; 作业要求&#xff1a; 通过platform总线驱动框架编写LED灯的驱动&#xff0c;编写应用程序测试&…

Docker容器故障排查与解决方案

Docker是一种相对使用较简单的容器&#xff0c;我们可以通过以下几种方式获取信息&#xff1a; 1、通过docker run执行命令&#xff0c;或许返回信息 2、通过docker logs 去获取日志&#xff0c;做有针对性的筛选 3、通过systemctl status docker查看docker服务状态 4、通过…

React学习——快速上手

文章目录 初步模块思维 初步 https://php.cn/faq/400956.html 1、可以手动使用npm来安装各种插件&#xff0c;来从头到尾自己搭建环境。 如&#xff1a; npm install react react-dom --save npm install babel babel-loader babel-core babel-preset-es2015 babel-preset-rea…

一休哥助手网页版如何使用

一休哥助手网页版可以使用GPT4提问了&#xff0c;具体操作流程如下&#xff1a; 1.登录网页版一休哥助手&#xff08;首次打开页面时&#xff0c;初始化久一点&#xff0c;请耐心等一下&#xff09; https://www.fudai.fun 2.登录后就可以使用GPT4了 3.你还可以自定义系统角色…