首页 > 代码库 > Apache CXF 103 CXF Basics - partial
Apache CXF 103 CXF Basics - partial
0 引言
0.1 基本的Web服务术语
XML
业界的结构化交换信息表示的事实上的标准。
XML namespace是在XML文档中提供唯一的命名元素和属性的标准。
XML schema提供了定义XML文档结构、内容和语义的方法。
SOAP(Simple Object Access Protocol)
SOAP是在网络环境中交换XML消息的协议,通常使用HTTP协议。
SOAP消息格式是SOAP信封。SOAP信封包含了所有请求消息,由可选头部和体构成。
SOAP信封头部可选的包含上下文相关信息,如安全或交易信息;体包含实际的负载或应用数据。
WSDL(Web Service Description Language)
WSDL是描述Web服务的标准的XML语言。
在WSDL中,Web服务被描述为一组通信终端(endpoint),通信终端能够交换消息,又称为端口(port)。
终端由两部分构成:
(1) 服务和用于调用服务的消息提供的操作的抽象定义,抽象操作的定义被称为端口类型;
(2) 将操作的抽象定义与具体的网络协议、服务位置和服务消息格式的具体绑定。
REST(REpresentational State Transfer)
表征状态转移(REST)不是技术或标准,是由Roy T. Fielding提出的一种架构风格,是通过Web暴露资源的一系列指南和建议。REST大致的设计考虑包括三部分:资源的URI(where),方法(主要是HTTP方法,how)和资源信息表示的格式(hypermedia, what)。
服务注册(Service Registry)
服务注册提供了Web服务查找的一种机制。UDDI规范定义了发布和查找Web服务的标准,但缺少包括服务版本控制、服务分类和编排、服务生命周期管理等能力。这部分内容需要在阅读Web服务解决方案的资料后做进一步探讨。
0.2 W3C Web of Services标准
W3C的Web of Services标准组[2]中介绍将服务Web描述为Web和企业软件中基于消息的设计,基于HTTP、XML、SAOP、WSDL、SPARQL等技术。服务Web有4个主题:(这里仅摘录了其摘要部分,从内容看似乎不大靠谱,最起码SPARQL这个中小微企业用的还不是很多,其具体内容待有所涉及再做深入探究)
(1)协议描述
依赖于在Web中交换数据的应用约束,开发者可以选择诸如HTTP、SOAP或Web Service协议。
(2)服务描述
在特定环境中,Web服务描述形式化定义了机器可读的用于访问数据的接口。内容有WSDL、SML(服务建模语言)、WS-Choreography、WS-Policy和通过语义标注的语义Web连接。
WS-Choreography描述了在没有全局控制器的情况下,全局服务协作中消息的流向。(将全局服务协作称为舞步体现了工程师们的幽默)。
WS-Policy描述了通过策略断言访问服务的策略,例如安全策略、传输协议选择等。
(3)安全性
跨域的数据传输需要安全交易和备案详细的验证保障。XML安全栈中XML加密和XML签名是关键。
(4)国际化
Web服务的国际化考虑服务描述、服务交换消息的国际化。
0.3 Apache CXF的承诺
Apache CXF起源于两个项目:Celtix和XFire。两个社区的人发现在做相互重叠的工作,在Apache孵化器20个月之后,Apache CXF真正意义上诞生了。(碎碎念:几乎每个Java应用框架可以在一到两个月之间很容易能够上手使用,但与框架设计与实现者投入的时间、精力没有什么可比性,尽管这个比较有些苛刻,当我想强调的是学习新技术不要太过于着急,实在是项目进度压力太大了,也可以拿“别人做了多少工作,而我才付出了多少”来做点心里安慰。)
支持的Web服务标准
- JAX-WS
- JAX-RS
- SOAP
- WSDL
- MTOM(Message Transmission Optimization Mechanism)
- WS-Basic Profile
- WS-Addressing
- WS-Policy
- WS-ReliableMessaging
- WS-Security
其他承诺
- POJO(Plain Old Java Object)
POJO没有实现诸如JMS、EJB等框架特定的接口,便于与其他框架集成,例如Spring等。CXF实现了JAX-WS和JAX-RS规范,提供了将POJO运行时解释为SOAP、RESTful Web服务的注解。
- 前端(frontend)编程API
Web服务开发者所面临的任务有服务实现、服务消费和服务注册、发布、管理等。CXF前端的作用是方面Web服务实现和Web服务客户端的开发。CXF提供两种前端:标准的JAX-WS前端和简单前端。
- 工具
Java to web service
Java <-> WSDL
WSDL -> JavaScript
WSDL -> Service
WSDL -> SOAP
WSDL -> XML
WSDL验证(Validator)
XSD -> WSDL
- REST支持
支持JAX-RS规范,支持JSON数据格式。
- 多种传输和绑定支持
数据绑定是Web服务的关键,CXF中基于SOAP的Web服务中数据绑定的含义是Java对象与消息格式(XML)之间的映射、而RESTful Web服务中可以选择XML或JSON。CXF支持SOAP和HTTP协议绑定、JAXB(Java Architecture for XML Binding)和AEGIS数据binding。
CXF支持非XML绑定,包括JSON和CORBA,同时还支持JBI(Java Business Integration)架构和SCAs(Service Component Architectures)。
(碎碎念:数据绑定应该不是Java语言实现的Web服务甚至Web中专有的功能需求,不夸张的说这种仅涉及语法层次的数据格式转换是任何一个团队在两次重复编码后都会抽象出来的基础功能)。
CXF支持诸如HTTP、HTTPS、JMS传输协议,同时提供了在单个JVM内服务之间通信的本地协议。
灵活的部署
支持部署容器/环境
- 轻量级容器Tomcat,J2EE容器(Websphere/Weblogic/JBoss/Geronimo/JOnAS)。
- 支持两层客户端-服务端环境部署。
- SCA容器Tuscany
- JBI容器ServiceMix/OpenESB/Petals
4 参考文献
[1]Balani N., Hathi R..Apache CXF web service development Develop and deploy SOAP and RESTful web service[M]. Birmingham: Packet Publishing. 2009.
[2] W3C Web of Services. http://www.w3.org/standards/webofservices/[EB/OL].[2014-05-31]