之前写的太简陋了,痛腚思痛,重新再版
先看文章目录,大致了解文章知识点结构,点击文章目录可直接跳转到文章指定位置。声明:部分内容为AI创造
第一章、Web Service介绍
1.1)Web Service技术介绍
Web Service是什么
Web Service翻译过来就是网络服务,一种使用http传输SOAP协议数据的远程调用技术,是能使不同应用程序能够通过网络进行通信和数据交换的技术。 无论它们所使用的语言、 平台或内部协议是什么, 都可以相互交换数据。
作用:
Web Service部署完后可以通过URL(例如网址)访问Web服务。比如我们使用百度搜索的网址(URL)时,实际上就是在访问百度的Web服务。百度搜索是百度通过Web服务提供搜索功能。
是如何做到跨平台通信的?
①使用通用的数据交换格式:XML(可扩展标记语言)和JSON(JavaScript对象表示法)不同平台和语言开发的应用程序都能解析和生成这些数据。
②采用标准的通信协议:HTTP是Web上使用最广泛的协议,它支持跨平台通信。
③利用WebService三要素:
1、SOAP(简单对象访问协议):一种基于XML的协议,用于在网络上交换结构化信息。
2、WSDL(Web服务描述语言):用于描述Web服务和其公开的接口的XML格式。WSDL文件提供了服务的详细信息。
3、UDDI(描述、发现和集成Web服务的标准)。UDDI包括两个主要部分:Web服务和业务注册表。Web服务的所有者将它们发布到UDDI注册表中,客户端可以搜索该注册表,找到所需的服务,并检索其详细信息。
1.2)Web Service部署
部署WebService通常指的是将WebService应用程序部署到Web容器或应用服务器中,以便可以通过网络访问。
①构建Web Service:编写符合标准和规范的代码(比如Java代码)
②打包Web Service:将Web Service打包成WAR文件或EAR文件。
③部署到Web容器:将打包好的Web Service部署到目标Web容器中(比如tomcat服务器,用于托管和运行Web应用程序的服务器环境,处理HTTP请求、执行Servlet和JSP等Web组件)
④验证部署:通过相应的URL进行访问Web服务,确保它可以被其他系统或客户端访问和调用。
1.3)Web服务发布与部署的区别
部署和发布的区别:
发布通常指的是将WebService的描述信息(如WSDL文件)公开,以便其他开发人员可以了解WebService的功能和如何使用它。
发布Web服务通常意味着发布WSDL文件。通过提供WSDL链接,其他开发人员可以使用该链接来生成客户端代码,并调用您的Web服务。
什么情况下我们需要发布Web服务:
远程访问:发布方希望其他系统或应用能够访问和使用自己系统中特定功能或数据时,可以将该功能或数据封装为Web服务,并将其发布出去。以便调用方可以通过标准的Web服务协议进行访问和调用。
第二章、发布WebService,公开WSDL信息
2.1)添加注解@WebService
首先要在需要生成的类上,加上@WebService注解如下:
package ***.test;
import javax.jws.WebService;
@WebService
public class TestWsdl {
public String TestString(String str){
return "这个是TestString方法的返回内容,这个是你输入的值"+str;
}
}
2.2)将接口发布Endpoint.publish
第一个参数为浏览器需要调用的地址,第二个参数是要发布的类。
package ***.test;
import javax.xml.ws.Endpoint;
public class Test {
public static void main(String[] args) {
Endpoint.publish("http://localhost:8080/test",new TestWsdl());
}
}
2.3)访问WSDL链接,保存内容
访问wsdl方式为地址http://localhost:8080/test
拼接上 ?wsdl
http://localhost:8080/test?wsdl
第三章、WSDL文件详解
3.1)wsdl地址(URL链接的含义)
wsdl地址,类似于下面这种后面拼个?wsdl的链接:
http://127.0.0.1:8080/xxxx/hello?wsdl
访问一下这个链接http://127.0.0.1:8080/xxxx/hello?wsdl
,可以获得一个WSDL文件,文件内容为XML格式:
3.2)WSDL文件的作用
WSDL是XML格式的文档,有以下作用:
①标准化描述web服务
WSDL是用XML的语言来标准化描述Web服务的描述语言(Web Services Description Language的缩写),文件内容为xml格式,以.wsdl
结尾。用于描述如何访问特定的Web服务以及如何与其进行交互。包括web服务的具体功能接口(调用方式、输入参数、输出参数以及相关的消息格式)。
②发现可用的Web服务
描述Web服务的端点(endpoint)即客户端可以访问的服务位置,以及使用的通信协议和绑定信息。(可以将端口视为Web服务的端点)。
③定义通信协议和消息格式
描述客户端和服务端之间交换的消息的结构和格式,以便双方能够理解和解析这些消息。对于分布式系统和跨平台集成非常重要。
④生成客户端代码(Java代码)
WSDL文档可以用来生成客户端代码(Java代码),以便与Web服务进行通信。
3.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属性定义参数的类型。
3.4)通过wsdl文件生成客户端代码(Java代码)
只要安装了JDK1.6以上版本就可以通过wsimport命令使WSDL文件生成Java代码(客户端代码)
以便客户端可以访问已发布的Web服务。wsimport命令是来自JAX-WS,它是JDK 1.6及以上版本的一部分。
示例:
wsimport -s D:\workspace\src -p main.java.***.tools -keep http://localhost:8080/HelloWorld?wsdl
-s选项:指定生成的Java源文件的绝对路径,一般都是src结尾
-p选项:指定生成的Java代码文件的目录(生成代码所在包名,也就是项目中src后面的目录)
-keep选项:表示保留生成的Java源文件在指定的输出目录中,而不会将其删除。
URL地址:是WSDL文件的地址。
3.5)生成Java代码包含哪些内容?有什么作用
这些Java代码包括用于调用服务的框架和类。这些生成的类将充当客户端与服务端进行通信的接口。可以用于创建客户端,在Java应用程序中调用远程Web服务的方法,并处理返回的数据。
生成的Java代码通常包括以下内容:
Service接口文件:包含了Web服务的方法定义和参数信息。通常以Service结尾,比如HelloWorldService.java。
代表Web服务接口的Java接口
代表Web服务数据类型的Java类
代表Web服务方法的Java方法
如图:
这些类和方法是根据wsdl文件中定义的服务、端点、操作和消息结构生成的,生成的Java代码中包含了与SOAP协议相关的类和方法,可以帮助你构建符合SOAP协议要求的消息,并将这些消息发送到远程服务端点。因此可以直接与远程服务进行交互,调用远程服务提供的操作,并获取相应的响应数据。
3.6)生成的Java类集成到项目中并访问Web服务
①将生成的Java类文件复制到项目的源代码目录中,通常是src/main/java/xxx/xx
②如果生成的Java类使用了其他依赖项。需要通过构建工具(如Maven或Gradle)的配置文件(例如pom.xml或build.gradle)来添加依赖。
③如果生成的Java类是用于与Web服务进行通信的客户端代码,需要编写代码来调用这些类,以实现与Web服务的交互。这可能涉及创建客户端实例、调用Web服务的方法等操作。
调用生成的Java类中的方法
import ***.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);
}
}
第四章、soap详解
4.1)soapUI发送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请求并获取响应。
4.2)
4.3)
第五章、
5.1)
5.2)
5.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>***mons-discovery</groupId>
<artifactId>***mons-discovery</artifactId>
<version>0.2</version>
<exclusions>
<exclusion>
<groupId>***mons-logging</groupId>
<artifactId>***mons-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 -->