nam">
当前位置:   article > 正文

webservice学习笔记_webservice
作者:Gausst松鼠会 | 2024-05-02 14:38:15

webservicenam

webservice解决的问题:

不同系统,不同平台,不同语言之间的通信访问和调用
应用程序的集成,不同业务的整合(异构系统之间的访问和调用)

webService概述

WebService的定义/什么是WebService
WebService运行与访问过程
WebService核心组件

WebService的定义:

Web服务一种服务导向架构的技术,通过标准的Web协议提供服务,目的是保证不同平台的应用服务可以互操作.

表面上看WebService就是一个应用程序,它向外界暴露一个能够通过Web进行调用的方法API,能用编程的方法通过Web调用来实现某个功能的应用程序.

深层次上看WebService是一种新的Web应用程序分支,它们是包含, 自描述模块化的应用, 可以在网络中被描述, 发布 , 查找以及通过Web来调用.
在这里插入图片描述

WebService核心组件:

  • XML和HTTP
  • SOAP:简单对象访问协议
  • WSDL:WebService描述语言
  • UDDI:统一描述, 发现和集成协议

什么是java的多态? 父类的引用指向子类的实例

CXF下载:http://cxf.apache.org/download.html
在这里插入图片描述
*Linux下 .tar.gz文件解压缩命令  
1、压缩命令:

命令格式:tar -zcvf 文件名 -------文件名.tar.gz 被压缩后的文件名

可先切换到当前目录下。压缩文件名和被压缩文件名都可加入路径。

2.解压缩命令:

命令格式:tar -zxvf 文件名.tar.gz

解压缩后的文件只能放在当前的目录。

结论:SOAP是用于访问网络服务的协议
一次WebService的调用,不是方法的调用
而是
soap消息(xml格式规范的文档片段)之间的输入输出
安装Axis TCP Monitor Plugin
在这里插入图片描述
打开TCPMON
在这里插入图片描述
在这里插入图片描述
启动监听端口调用客户端访问
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Soap什么样

  • 一条SOAP消息就是一个普通的XML文档,包含下列元素
  • 必须的Envelope元素, 可把此XML文档标识为一条SOAP消息
  • 可选的Header元素, 包含头部信息
  • 必须的Body元素, 包含所有的调用和响应信息
  • 可选的Fault元素,提供有关在处理此消息所发生错误的信息
    在这里插入图片描述
    在这里插入图片描述

WSDL报文解析

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:tns="http://cxf.atchinasoft.com/" 
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="HelloWorldServiceImplService" 
targetNamespace="http://cxf.atchinasoft.com/">
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="http://cxf.atchinasoft.com/" 
elementFormDefault="unqualified" targetNamespace="http://cxf.atchinasoft.com/" version="1.0">...</xs:schema>
</wsdl:types>
<wsdl:message name="sayHello">
<wsdl:part element="tns:sayHello" name="parameters"> </wsdl:part>
</wsdl:message>
<wsdl:message name="sayHelloResponse">
<wsdl:part element="tns:sayHelloResponse" name="parameters"> </wsdl:part>
</wsdl:message>
<wsdl:portType name="Helloworld">
<wsdl:operation name="sayHello">
<wsdl:input message="tns:sayHello" name="sayHello"> </wsdl:input>
<wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse"> </wsdl:output>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="HelloWorldServiceImplServiceSoapBinding" type="tns:Helloworld">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="sayHello">
<soap:operation soapAction="" style="document"/>
<wsdl:input name="sayHello">...</wsdl:input>
<wsdl:output name="sayHelloResponse">...</wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="HelloWorldServiceImplService">
<wsdl:port binding="tns:HelloWorldServiceImplServiceSoapBinding" name="HelloWorldServiceImplPort">
<soap:address location="http://127.0.0.1/cxf1022_server"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36

definitions: 命名空间: 根元素
types: webservice使用的数据
message: webservice使用的消息
binding: webservice使用的通信协议
service:webservice对外暴露
在这里插入图片描述

WSDL报文之wsdl:definitions

<wsdl:definitions xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
xmlns:tns="http://cxf.atchinasoft.com/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
xmlns:ns1="http://schemas.xmlsoap.org/soap/http" name="HelloWorldServiceImplService" 
targetNamespace="http://cxf.atchinasoft.com/">

</wsdl:definitions>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
xmllns相当于Java里面的import, 包名反转
name我们java程序中服务接口的实现类,SEI定义是:服务接口类+Service后缀, Service自动追加.
targetNamespace命名空间: 相当于Java里面的package它刚好是和我们Java定义的包名相反.
其他不变化,不关心

在这里插入图片描述

WSDL报文之wsdl:message

通信消息的数据结构的抽象类型化定义,使用Types所定义的类型来定义整个消息的数据结构

<wsdl:message name="sayHello">
<wsdl:part element="tns:sayHello" name="parameters"> </wsdl:part>
</wsdl:message>
<wsdl:message name="sayHelloResponse">
<wsdl:part element="tns:sayHelloResponse" name="parameters"> </wsdl:part>
</wsdl:message>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

WebService中每个方法包含两部分:

  • 一个是方法的输入参数;另一个是方法的输出参数.
  • 其实质都是基于SOAP协议将其封装为消息, 所以每一个方法对应有两个消息, 一个输入一个输出回应. 简单而言, 就是方法和Message的关系是N : 2N的关系, 一对二.
  • Message中的具体内容是part,结合前面可知, message中part内容请到前面定义过的types中去看, 它会引用之前type相关的内容

WSDL报文之wsdl:portType

<wsdl:portType name="Helloworld">
<wsdl:operation name="sayHello">
<wsdl:input message="tns:sayHello" name="sayHello"> </wsdl:input>
<wsdl:output message="tns:sayHelloResponse" name="sayHelloResponse"> </wsdl:output>
</wsdl:operation>
</wsdl:portType>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

portType = 接口
operation = 接口中定义的方法

WSDL报文之wsdl:binding

特定端口类型的具体协议和数据格式规范

<wsdl:binding name="HelloWorldServiceImplServiceSoapBinding" type="tns:Helloworld">
	<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
	<wsdl:operation name="sayHello">
		<soap:operation soapAction="" style="document"/>
				<wsdl:input name="sayHello">
					<soap:body use="literal"/>
				</wsdl:input>
				<wsdl:output name="sayHelloResponse">
					<soap:body use="literal"/>
				</wsdl:output>
		</wsdl:operation>
</wsdl:binding>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

WSDL报文之wsdl:service

负责将网络通信地址赋给一个具体的绑定

<wsdl:service name="HelloWorldServiceImplService">
<wsdl:port binding="tns:HelloWorldServiceImplServiceSoapBinding" name="HelloWorldServiceImplPort">
<soap:address location="http://127.0.0.1/cxf1022_server"/>
</wsdl:port>
</wsdl:service>
  • 1
  • 2
  • 3
  • 4
  • 5

JAXB

是什么?

JAXB = Java API For XML Binding

JAXB是Java Architecture for XML Binding的缩写,提供了一个快捷的方式将Java对象与XML进行转换.

在JAX-WS(Java的WebService规范之一)中, JDK1.6之后自带的版本JAX-WS2.1, 其底层支持就是JAXB.

能干嘛

JAXB可以实现POJO对象和XML之间相互转换

Unmarshaller类将XML数据反序列化为新创建的Java内容树的进程,并可在解组时有选择的验证XML数据.

Marshaller类将Java内容树序列化回XML数据的过程
在这里插入图片描述

package com.atchinasoft.cxf;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.Accessors;

/**
 * @author xianyiquan
 * @className
 * @create 2019-11-20 23:44
 */
@AllArgsConstructor
@NoArgsConstructor
@Data
@Accessors(chain=true)
public class Book {
    private long id;
    private String bookName;
    private double price;

}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Gausst松鼠会/article/detail/524578
推荐阅读
相关标签
  

闽ICP备14008679号