WebService CXF --- CXF简单介绍
1、WebService介绍
??? ?WebService让一个程序可以透明地调用互联网程序,不用管具体的实现细节。只要WebService公开了服务接口,远程客户端就可以调用服务。WebService是基于http协议的组件服务,WebService是分散式应用程序的发展趋势。
2、WebService的开源实现
???? WebService更多是一种标准,而不是一种具体的技术。不同的平台,不同的语言大都提供WebService的开发实现。在JAVA领域,WebService的框架很多,例如:AXIS,XFire,CXF等。AXIS,XFire相对比较成熟,资料相对较多。在这里我们只对CXF进行讲解,其他大家想学习到互联网找相关资料学习。
3、CXF框架由来
???? ApacheCXF项目是由ObjectWeb Celtix和CodeHaus XFire合并成立。ObjectWeb Celtix是由IONA公司赞助,于2005年成立的开源Java ESB产品,XFire则是业界知名的SOAP堆栈。合并后的ApacheCXF融合该两个开源项目的功能精华,提供了实现SOA所需要的核心ESB功能框架,包括SOA服务创建,服务路由,及一系列企业级QoS功能。
4、ApacheCXF架框的目标
?? 1).概述
??????? 高性能
??????? 可扩展
??????? 直观易用
?? 2).支持标准
???????? JAX-WS, JSR-181, SAAJ, JAX-RS
???????? SOAP 1.1, 1.2, WS-I BasicProfile, WS-Security, WS-Addressing, WS-RM, WS-Policy
???????? WSDL 1.1
????????? MTOM
?? 3).传输方式,绑定,数据绑定,传送数据格式
???????? 传输方式: HTTP, Servlet, JMS
???????? 绑定: SOAP, REST/HTTP
???????? 数据绑定: JAXB 2.x, Aegis, XMLBeans, SDO
???????? 传送数据格式: XML, JSON, FastInfoset
???????
?? 4).部署灵活
???????? 轻量级: 可以将服务部署到 Tomcat或其支持Spring的容器中
???????? JBI整合: 部署一个服务引擎到JBI容器,例如: ServiceMix, OpenESB or Petals
??????? J2EE集成: 可以将服务部署到J2EE应用服务器上,例如:Geronimo, JOnAS, JBoss, WebLogic, 及WebSphere
???????? Java 客户端/服务端可以独立性
?? 5).支持多种编程语言
???????? 完全支持 JAX-WS 2.x 客户端/服务端模式
???????? JAX-WS 2.x synchronous, asynchronous and one-way API's
???????? JAX-WS 2.x Dynamic Invocation Interface (DII) API
???????? 支持 wrapped and non-wrapped 数据格式
???????? XML messaging API
???????? 支持JavaScript 和 ECMAScript 4 XML (E4X)
???????? 支持CORBA
???????? 支持JBI及ServiceMix
?? 6).可编程环境
??????? Java to WSDL
??????? WSDL to Java
??????? XSD to WSDL
??????? WSDL to XML
??????? WSDL to SOAP
??????? WSDL to service
?
?
一、WebService概述
?? 1、Web Services 可以将应用程序转换为网络应用程序。
???? 通过使用 Web Services,您的应用程序可以向全世界发布信息,或提供某项功能。
???? Web Services 可以被其他应用程序使用。
???? 通过 Web Services,您的会计部门的 Win 2k 服务器可以与 IT 供应商的 UNIX 服务器相连接。
???? 基本的 Web Services 平台是 XML+HTTP(XML 是 Web Services 的基础)。
???? Web services 使用 XML 来编解码数据,并使用 SOAP 来传输数据。
??
?? 2、WebService一般分为两种:
????? REST式WebService,基于HTTP协议;
????? RPC式WebService,基于SOAP协议,不过SOAP也是基于HTTP传输的。
??? 狭义上的WebService是指第二种RPC式的WebService,也就是我们常说的那种。
??? JAVA中有三种WebService规范,分别是JAX-WS(JAX-RPC)、JAX-RS、JAXM&SAAJ。
??? 这里先说JAX-WS(Java API For XML-WebService),JDK1.6 自带的版本为JAX-WS2.1,其底层支持为JAXB。
??? 早期的JAVA Web服务规范JAX-RPC(Java API ForXML-Remote Procedure Call)目前已经被JAX-WS 规范取代,
??? JAX-WS 是JAX-RPC 的演进版本,但JAX-WS 并不完全向后兼容JAX-RPC。
二、什么是Web Services?
??? Web Services 是应用程序组件
??? Web Services 使用开放协议进行通信
??? Web Services 是独立的(self-contained)并可自我描述
??? Web Services 可通过使用UDDI来发现
??? Web Services 可被其他应用程序使用
三、它如何工作?
?? 基础的 Web Services 平台是 XML + HTTP。
?? HTTP 协议是最常用的因特网协议。
?? XML 提供了一种可用于不同的平台和编程语言之间的语言。
?? Web services 使用 XML 来编解码数据,并使用 SOAP 借由开放的协议来传输数据。
四、Web services 平台的元素:
??? SOAP (简易对象访问协议)
??? UDDI (通用描述、发现及整合)
??? WSDL (Web services 描述语言)
?? 1、什么是 SOAP?
????? SOAP 指简易对象访问协议(Simple Object Access Protocol)
????? SOAP 是一种通信协议
????? SOAP 用于应用程序之间的通信
????? SOAP 是一种用于发送消息的格式
????? SOAP 被设计用来通过因特网进行通信
????? SOAP 独立于平台
????? SOAP 独立于语言
????? SOAP 基于 XML
????? SOAP 很简单并可扩展
????? SOAP 允许您绕过防火墙
????? SOAP 将作为 W3C 标准来发展
???? 是Web Service 的通信协议。当用户通过UDDI找到你的WSDL描述文档后,他可以通过SOAP调用你建立的Web服务中的一个或多个操作。
???? SOAP是XML文档形式的调用方法的规范,它可以支持不同的底层接口,像HTTP(S)或者SMTP。
????
??? 它有三个主要方面:
????? 1)、XML-envelope为描述信息内容和如何处理内容定义了框架;
????? 2)、将程序对象编码成为XML对象的规则;
????? 3)、执行远程过程调用(RPC)的约定。
?? 2、什么是 WSDL?
????? WSDL 指网络服务描述语言(Web Services Description Language)
????? WSDL 是基于 XML 的用于描述 Web Services 以及如何访问 Web Services 的语言
????? WSDL 使用 XML 编写
????? WSDL 是一种 XML 文档
????? WSDL 用于描述网络服务
????? WSDL 也可用于定位网络服务
????? WSDL 还不是 W3C 标准
???? 是一个 XML 文档,它对web Services的接口进行了定义,用于说明一组 SOAP 消息以及如何交换这些消息。大多数情况下由软件自动生成和使用。
?? 3、什么是UDDI?
????? UDDI 是一种目录服务,通过它,企业可注册并搜索 Web services。
????? UDDI 指通用的描述、发现以及整合(Universal Description, Discovery and Integration)。
????? UDDI 是一种用于存储有关 web services 的信息的目录。
????? UDDI 是一种由 WSDL 描述的网络服务接口目录。
????? UDDI 经由 SOAP 进行通迅。
????? UDDI 被构建于 Microsoft .NET 平台之中。
??? 是一种查找相应服务的机制,用于web服务的发布、浏览以及查找注册信息。它采用XML格式来封装各种不同类型的数据,并且发送到注册中心或者由注册中心来返回需要的数据。
??? 这里特别要提出,UDDI不是必须的,事实上目前在企业项目中很少用到UDDI。
五、Web Service特点
??? Web Service的主要目标是跨平台的可互操作性。为了实现这一目标,Web Service 完全基于XML(可扩展标记语言)独立于平台、独立于开发语言的标准,是创建可互操作的、分布式应用程序的新平台。
?? 优点: 跨防火墙的通信、应用程序集成(异构系统)、软件和数据重用、跨语言 跨平台
?? 缺点: 访问速度慢、稳定性问题。
六、安全性
?? Webservice中的安全策略的实施主要从以下三个方面考虑:
???? 1.传输时安全。通常采用SSL/HTTPS 对连接加密,而不是传输数据。
???? 2.数据安全。通常采用数据加密(XML Encryption) 数字签名(XML-DSIG)。
???? 3.底层架构提供的安全策略,利用应用服务安全机制。
??? 对于传输时的安全,比较容易地加入到Webservice应用。可以利用HTTPS协议,就可以获得连接过程中的安全。
????? a.我们目前这个项目没有计划采用https。当然我是很希望采用这种策略,因为系统的安全性越高越好啊,但是没采用我也没办法。
??????? 传输过程中数据的保护是对于消息本身的保护。你可以使用已有的XML安全扩展标准,实现数字签名的功能,从而保证你的消息是来自特定方并没有被修改过。XML文件的加密技术从大程度上加强了Webservice的安全,它能够定制数据传输到后,能否被接受者所查看,进一步完善了传输后的安全,业界也在不断的制定Webservice的安全标准,比如SAML 和WS-Security。
????? b.数据的加密。目前采用了对XML文件中部分数据加密的策略。原因很简单,http上不能传明文吧,而且实现起来也不是很困难。只要客户端和服务端约定好一种加解密的算法,加上适当的密钥就可以了。当然实现过程中,如果两端的语言和平台不同,例如客户端是.net,服务端是java,.net的某些算法的具体模式需要清楚才行,否则调试起来会有些小麻烦。
????? c.数字签名可以确保传递的数据没有被第三方恶意修改过。数字签名这块理论上了解一点,具体的实施没有做过,听前辈高人说,可以采用伪签名机制,没有深入学习。整体上的设想是,将来用户量上来了,可以购买正式的数字签名产品,来避免数据被篡改的危险。目前针对数据可能会被篡改的危险,采用了消息摘要的策略,因为它确实具备这种能力,也因为这种策略被广为采用。
????? d.想到的另一种危险,恶意的重复发送问题。如果恶意用户截获了正在传输的数据,反复不断的重复发送,这种情况该如何处理。这种情况对整个系统来说,危险系数太高了,会造成数据的混乱,业务处理的错误,后果非常之严重,所以必须要预防。目前的策略是,因为数据是要保存到DB中的,正好表中的时间字段和其他的几个字段可以组成数据的唯一标识,这样就很容易的预防了这种情况的发生,呵呵,还不错。
???
??? 最后一层保护就是依靠底层架构的安全,这更多的来自于操作系统和某些中间件的保护。比如在J2EE中,主持Webservice的应用服务器。目前很多的J2EE应用服务器都支持Java Authentication and Authorization Service (JAAS),是被加入到J2SE 1.4当中的。利用主持Webservice的服务器,实现一些安全机制这是很自然的做法。另一种利用底层架构的安全方法就是,做一个独立的负责安全的服务器,Webservice的使用者和创建者都需要与之取得安全信任。
??? 对于server的安全策略,目前还没有想好怎么处理。
??? 典型的应用:WS-Security规范
??? ================转载:讨论帖http://www.iteye.com/topic/213038================
七、WS-可靠性消息机制
八、WS-事件机制
九、SOAP消息传输优化机制(MTOM)
题外话
?? SOA与Web Service
????? SOA与Web Service的关系,这是经常被混淆的两个概念。
????? SOA(Service-oriented architecture,面向服务架构)。 将企业应用系统中细粒度的功能打包成粗粒度的服务,通过中间方式(语言),实现异构系统(操作系统、开发语言)之间的通讯、调用。
????? SOA并不是一种技术,而是一种软件设计理念。
????? Web service != SOA,但Web service 是目前实现SOA的最好方式。