Web服务描述语言规范定义恩啦一个XML词汇表,该词汇表依照请求和响应消息,在服务请求和服务提供者之间定义了一种契约。
WSDL描述包含必要细节,以便服务请求者能够使用特定服务,包含的细节如下:
u 请求消息的格式
u 响应消息的格式
u 向何处发送消息
Ø WSDL文档可以分为两部分,顶部分由抽象定义组成;底部部分则有具体描述组成。
抽象部分以独立于平台和语言的方式定义SOAP消息,并不包含任何随机器和语言而变化的元素
Ø 抽象定义
Types:独立于机器和语言的类型定义
Message:包括函数参数(输入与输出分开)或文档描述
PortTypes:引用消息部分中消息定义来描述函数签名(操作名、输入参数、输出参数)
Ø 具体定义
Bindings:PortTypes部分的每一操作在引绑定实现
Services:确定每一绑定的端口地址
Ø 抽象定义具体描述
Types元素 ------------- 数据类型定义的容器
将每个方法中输入传输列表中的所有参数组合为一种数据类型,将其输出参数也定义为一种类型。在Types中包含很多Element元素,每个Element元素包含上述的一种数据类型。
Message元素 ------------- 通信消息的数据结构的抽象类型定义
<wsdl:message name=”sumResponse”>
<wsdl:part name=”parameters”element=”tns:sumResponse”>
</ wsdl:part>
</wsdl: message>
PortType元素: ------------- 可以描述一个Web Service可被执行的操作以及相关的消息
Ø 具体定义描述
n Binding元素 ------ 特定端口类型的具体协议和数据格式规范的绑定
n Service元素 -------相关服务访问点的集合
Service元素包含一组端口的集合,每个port被绑定指定一个单独的地址来定义一个独立的端点
每个Service元素可以包含一个或多个port元素,每个port元素不能指定多个地址,且不能指定地址意外的其它信息,这些port不能相互同姓
Ø SOAP(Simple Object Protocol,简单对象访问协议)
SOAP是一个基于XML的,用于在分布式环境下交换信息的轻量级协议。
Ø SOAP包含的四个部分
SOAP封装
SOAP编码规则
SOAPRPC表示
SOAP绑定
Ø SOAP规范
SOAP1.2规范于2003年6月24日被发布为W3C推荐标准
SOAP的优点
厂商无关
平台独立
操作系统独立
编程语言独立
Ø 什么是SOAP?
SOAP是指简单对象访问协议
SOAP是一种通信协议
SOAP用于应用程序之间的通信
SOAP是一种用于发送消息的格式
SOAP被设计用来通过因特网进行通信
SOAP独立于平台
SOAP独立于语言
SOAP基于XML
SOAP很简单并可以扩展
SOAP允许您绕过防火墙
SOAP将被作为W3C标准来发展
WebService发展不同阶段的产物
Ø Sun最早开始的WebService的实现是JAX-RPC1.1,这个实现是基于Java的RPC,并不完全支持Schema规范
Ø JAX-WS2.0是Sun新的WebService协议栈,是一个完全基于标准的实现
都支持SOAP1.1
都支持WSDL1.1
Ø JAX-WS支持SOAP1.2
Ø XML/HTTP,JAX-RPC忽略了对HTTP的绑定,但JAX-WS添加了支持
Ø java新功能
JAX-RPC映射到Java1.4版本,而JAX-WS映射到Java5.0版本,且依赖Java5.0中很多新功能,Java5.0添加了对JAX-WS的支持,但仍然支持JAX-RPC
Ø 数据映射模型
JAX-RPC具有自己的映射模型,其模型涵盖了所有模式类型的90%;JAX-WS的数据映射模型是JAXB,JAXB保证所有XML模式的映射
Ø 接口映射模型
JAX-WS使用新的Java5.0的功能,引入了异步功能
Ø 动态编程模型
Ø JAX-WS的全称为Java API for XML-Based Web Services
Ø JAX-WS2.0是面向Java5的开发WebServices的最新编程标准
Ø 到目前为止,JAX-WS已经发展到2.2版本
JAX-WS是用于简化使用Java构造Web Services和WebServices客户机的工作的的技术,JAX-WS包含JAXB,JAX-WS创建XML的使用的就是JAXB
提供完整的WebServices堆栈,减少开发和部署Web Services的任务
提供用于将传统Java对象转换为WebServices的Annotation库,从而加速了WebService的开发工作
JAXB(Java Architecture for XMLBinding)提供了一个快速而方便的方式绑定XML Schemas和Java,使Java程序员能够很方便的在Java应用程序中处理XML数据
JAXB提供将XML树解组为Java内容树的方法,以及将Java内容树重新编组为XML文档的方法,如下图:
JAX-WS允许开发者可以选择RPC-Oriented或者message-oriented来实现自己的Web Service
在JAX-WS中,一个远程调用可以转换为一个基于XML的协议
在使用JAX-WS过程中,开发者不需要编写任何生成和处理SOAP消息的代码
Ø 创建Web Service Project,FrameWork选择JAX-WS
Ø 创建服务类(普通的Java类),提供需要发布的执行方法
Ø 创建WebService
Ø 部署Web Service
创建Java项目
创建Web ServiceC Client
测试发布的Web Service
Apache CXF是一个开源的WebService框架,CXF继承了Celtix和Xfire两大开源项目的精华,提供了对JAX-WS全面的支持
CXF大大简化了Service的创建,同时它继承了Xfire传统,一样可以天然地和Spring进行无缝继承
支持WebService标准
支持多种"Frontend"编程模型
设计得更加直观与容易使用
支持二进制和遗留协议
高性能、可扩展、简单且容易使用
支持多种标准[SOAP\JAX-WS\WSDL]
多种传输方式[http\servlet\jms等]、绑定【http\soap】和格式[xml\json]
灵活部署[tomcat\jboss\weblogic]
n 添加Apache CXF常用jar包
n 新建项目导入常用jar包
n 创建并发布Web Service
u 创建Web service接口
l 创建HelloWorldService接口(代码略)
u 实现Web Service接口
l 创建HelloWorldService接口实现类HelloWorldServiceImpl(代码略)
u 创建服务器端
public static voidmain(String[] args){
HelloWorldServiceimpl = new HelloWorldServiceImpl();
ServerFactoryBeansvrFactory = new ServerFactoryBean();
svrFactory.setServiceClass(HelloWorldService.class);//指定类的实现服务
svrFactory.setAddress("http://localhost:8080/HelloWorld");//公布Service访问地址
svrFactory.setServiceBean(impl);//设置Bean的实现服务
svrFactory.create();//发布Web Service
}
创建客户端
public class Client{
public static void main(String[]args){
ClientProxyFactoryBeanfactory = new ClientProxyFactoryBean();
factory.setServiceClass(HelloWorlService.class);
factory.setAddress("http://localhost:8080/HelloWorld");
HelloWorldServiceservice = (HelloWorldService)factory.create();
System.out.println(service.sayHelloWorld("jiang"));
}
}
u JavaBean
u List
u 导入必要的jar包文件
u 创建服务接口
u 创建服务接口实现类
u 配置Spring配置文件,将Web Service服务类定义为Spring Bean,由Spring来管理
u 配置web.xml文件以集成Spring和CXF
l 创建服务端接口
@WebService//该注解使该接口成为Web Service接口
publicinterface IProductService{
/**保存产品信息*/
publicvoid addProduct(Product product);
/**根据id获得产品信息*/
publicProduct getProductById(int id);
}
l 创建服务接口实现类
@WebService
public classProductServiceImpl implements IProductService{
public voidaddProduct(Product product){
System.out.println("---------服务端保存产品的信息--------");
//...
//...
}
public ProductgetProductById(int id){
Productproduct = new Product();
//product.setId(id);
//product.setxxx();
//...
returnproduct;
}
}
l 配置Spring配置文件
在配置文件中添加CXF使用到的命名空间,如图蓝色文字所示
l 配置web.xml以集成Spring和CXF
l 发布Web Service
n 启动服务器
n 访问地址:
http://localhost:8080/SpringCXF/productService?wsdl
配置Spring配置文件
与配置服务器端一样,其次配置与服务器端相对CXF标签,即<jaxws :client />来定义客户端访问服务的声明。
创建WebService客户端
SOA介绍
WSDL和SOAP
Java Web Service的发展
JAX-WS
JAXB
服务器端与客户端的开发
Apache CXF框架介绍
Apache CXF简单实现之HelloWorld
Apache CXF应用之传递对象
Apache CXF进阶之与Spring整合