WebService解决的问题
- 不同语言之间、不同系统、不同平台之间的通讯访问和调用。
- 应用程序的集成,不同业务的整合。
WebService的主流框架
webService只是一个天上飞的概念,落地实现的框架类产品有:
- Axis1、Axis1
- XFire
- cxf(用得多)
SOP协议
- 基于xml的简易协议,用于http上的信息交换。
- 一次webService的调用,不是方法的调用而是soap消息(xml个格式规范的文档片段)之间的输入输出
例如请求响应如下:
请求消息:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://test.cxf.it.com/">
<soapenv:Header/>
<soapenv:Body>
<test:sayHello>
<arg0>11</arg0>
<!--Optional:-->
<arg1>lzp</arg1>
</test:sayHello>
</soapenv:Body>
</soapenv:Envelope>
响应消息:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:sayHelloResponse xmlns:ns2="http://test.cxf.it.com/">
<return>cxf 1022 hello:lzp 11</return>
</ns2:sayHelloResponse>
</soap:Body>
</soap:Envelope>
客户端通过soap访问Service过程
1.客户端到UDDI上寻找Service目录
2.客户端获得WSDL文件
3.客户端按照WDSL文件的约束和规范创建SOAP客户端请求消息
4.客户端通过SOAP访问Service
wsdl报文
- wsdl:definitions
<wsdl:definitions
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="http://test.cxf.it.com/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:ns1="http://schemas.xmlsoap.org/soap/http"
name="HelloWorldServiceImplService"
targetNamespace="http://test.cxf.it.com/">
</wsdl:definitions>
key | value |
---|---|
xmlns:tns | 相当于java里面import包名的反转 |
name | java中的服务接口实现类+Service后缀 |
targetNamespace | 命名空间和java的package包名相反 |
其他 | 无需关心,w3c协议的基本内容 |
- wsdl:types
通信消息的数据结构的抽象类型化定义。使用Types所定义的类型来定义整个消息的数据结构。 - wsdl:portType
portType = 接口 operation = 接口中定义的方法 - wsdl:service
负责将网络通信地址赋给一个具体的绑定
JAXB
- JAXB是Java Architecture for XML Binding的缩写。可以将一个Java对象转变成为XML格式,反之亦然。
JAX-WS
- JAX-WS可以完成wsdl到java的转换,即wsdl或合同优先,可以简单理解为根据wsdl生成java客户端代码的工具。
JAX-RS
- JAX-RS是JAVA EE6 引入的一个新技术。 JAX-RS即Java API for RESTful Web Services,是一个Java 编程语言的应用程序接口,支持按照表述性状态转移(REST)架构风格创建Web服务。已经不是wsdl协议了不要和上面内容混淆
- 写成JAX-RS后调用接口方式JAX-WS生成代码了,要用httpclient正常的接口请求调用。
参考材料
视频
https://www.bilibili.com/video/BV1xE411d7hY/?p=7&spm_id_from=333.1007.top_right_bar_window_history.content.click&vd_source=d4d473abbc7c6449c2f6a13e3f16728e
博客
https://www.cnblogs.com/mangoubiubiu/p/14839248.html
实验证代码
https://gitee.com/peterLiz/web-service.git