目录
- 第一章、起因
- 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 -->