解决异构系统之间交互——Web Service

Web Service见名之意就是网络上的一些服务,解决的问题就是如何使用这些服务,因为软件的开发有各种各样的语言,利用Java,C#,VB.NET,PHP等等,如何使这些语言编写的程序能够进行互通,彼此相互利用。Web Service就可以解决异构系统的通信的整合。

首先看一下,和WebService一样能够解决异构系统的通信和整合的方案吧:

1,通过XML,JSON,字符串进行多语言的通讯,因为这些都是规定好的,各个语言中使用都是一样的。例如JavaScript和Java通过Json进行数据交换,JavaScript利用eval()函数,而Java有jackson,json-lib等类库来进行帮忙解析。

2,共享数据库,这种方式也能实现不同系统的通信,但是对数据库的保护方面可能不够好。

3,共享文件,可以将文件(一般是xml文件)上传到都可以访问到地方(例如:FTP server上)进行共享。

4,使用小心中间件,如图:

当然还有CORBA,Web Service比较成熟的技术等等,这些都是解决异构系统的通信的宏观方式。由于不同的系统处于不同的JVM中,这就需要考虑分布式架构的解决方案了,看一下核心图吧,体现了代理模式,这里还利用了JavaEE的JNDI规范进行对象的查找等:

由于Web Service的容易上手和传输的格式是xml文本格式(因为此可以利用dtd,Schema进行规范约束),所以使用比较广泛,下边看一下Web Service的简单应用吧。

Web Service技术得到了Java的支持,在JDK6以后都给出了相关规范的实现,有两种方式:

1,JAX-WS(XML web services的Java API)是SOAP方式即:简单对象访问协议(SimpleObject Access Protocol),它是用于交换XML(标准通用标记语言下的一个子集)编码信息的轻量级协议

。     2,JAX-RS(Java API for RESTful Web Services )即restful方式风格。

再看一个概念: WSDL:WebService描述语言WSDL 就是用机器能阅读的方式提供的一个正式描述文档而基于XML(标准通用标记语言下的一个子集)的语言,用于描述WebService及其函数、参数和返回值。因为是基于XML的,所以WSDL既是机器可阅读的,又是人可阅读的。 下边是SOAP和WSDL在异步传输中的所用:

这里只看一下第一种SOAP方式,提供的框架技术有CXF,XFire和AXIS。而常用的是Axis和CXF,先看一下两者的比较吧:

Axis互通信比较好,对其他语言访问的兼容性比较多;

CXF非常容易的整合到Spring架构中;

看一下CXF如何集成到Spring进行开发服务端吧:

1,加入jar包(够用的原则):

-cxf-2.5.10.jar

-wsdl4j-1.6.3.jar

-xmlschema-core-2.0.3.jar

-neethi-3.0.2.jar

-geronimo-servlet_2.5_spec-1.1.2.jar

-woodstox-core-asl-4.2.0.jar

-stax2-api-3.1.1.jar

2, 在web.xml中,配置前端控制器CXFServlet拦截Web Service请求:

[html] view plaincopyprint?

  1. <servlet>
  2. <servlet-name>cxf</servlet-name>
  3. <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  4. <load-on-startup>1</load-on-startup>
  5. </servlet>
  6. <servlet-mapping>
  7. <servlet-name>cxf</servlet-name>
  8. <url-pattern>/services/*</url-pattern>
  9. </servlet-mapping>

3,将CXF提供的缺省配置文件cxf.xml引入到Spring配置文件中:

[html] view plaincopyprint?

  1. <import resource="classpath:META-INF/cxf/cxf.xml" />

4,基于CXF规范,采用JAX-WS方式开发北向接口,注意@WebService和@WebParam注解的使用,还有就是实现类的编写加的注解要指定名称@Resource(name="userDaoImpl"),其它正常编写即可:

[java] view plaincopyprint?

  1. @WebService
  2. public interface WebServiceFacade {
  3. public String selectUser(@WebParam(name="userId")String userId);
  4. }

5,在配置文件中使用endpoint发布WebService,这里需要引入对应的命名空间和约束xsd:

-引入命名空间jaxws

xmlns:jaxws="http://cxf.apache.org/jaxws

-加入jaxws命名使用的xsd

http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd

[html] view plaincopyprint?

  1. <jaxws:endpoint
  2. id="webServiceFacade"
  3. implementor="#webServiceFacadeImpl" //引用IoC中的id
  4. address="/WebServiceFacade" />

6,然后启用服务器,采用浏览器就可以进行访问了:应用程序根services/WebServiceFacade?wsdl。当然这里推荐一个测试服务接口的工具,非常好用的SoapUI。如果能够成功返回指定String,那么服务端就成功了。我们就可以通过任何语言的系统,通过此URL为接口访问此服务接口了,当然也可以使用生成的WSDL。

这样服务段就建好了,但是我们如何编写客户端Client进行调用呢?我用的Java语言,所以WSDL2Java方法这个就非常重要。使用eclipse自动的AXIS插件进行新建:就自动为我们生成客户端的存根,我们调用这些存根的方法即可完成对目标对象的调用。

或者采用CXF中的wsdl2java.bat进行相关存根的生成,总而言之是利用工具给我们生成存根,我们调用即可。这样,我们就实现了不同语言不同程序之间的访问通信了。

这也是继面向对象编程思想又一种较新的编程思想面向服务编程,这样我们就不用顾虑语言的差别,提供规范的服务接口,我们无论使用什么语言,就都可以访问使用了,大大提高了程序的复用率。

例如,在我们的程序中添加天气预报,火车时刻表,利用银行进行付账,利用腾讯QQ,其他邮箱账号登陆系统等等,只要提供对应的服务接口我们就可以很容易的实现了,当然了,这里有些接口就需要收费了,但是这种方式无疑大大扩展了程序的边界,使复用性大大的提高了。算是一种改革吧!

异步系统通信,Web Service初步总结,还在深入研究中……

时间: 2024-10-20 14:09:22

解决异构系统之间交互——Web Service的相关文章

分布式系统(2)---Web Service原理

众所周知,异构系统之间使用Web Service比较合适,上面一篇介绍了EJB,EJB是业务逻辑的分布式,是系统内部的调用.而Web Service比较适合用于系统间的调用. 什么需要用到WebService,举例说明: 比如说天气预报,股市,地图等都是需要从互联网上的其他系统服务器获取的,它向外界暴露出一个能够通过Web进行调用的API,通过API去获取数据. 实时天气预报: Web Service定义 Web Service提供了一个在不同的应用和平台之间的交互操作标准.这个交互操作通过一系

Restful Web Service初识

Restful Web Service初识 一.Web Services Web Services 是一种基于组件的软件平台,是面向服务的Internet 应用.Web Services 框架的核心技术包括SOAP ,WSDL 和UDDI ,它们都是以标准的XML 文档的形式表示. SOAP (“Simple Object Access Protocol”的缩写)是Web Services 的通信协议.SOAP是一种简单的.轻量级的基于XML 的机制,用于在网络应用程序之间进行结构化数据交换.S

如何封装RESTful Web Service

所谓Web Service是一个平台独立的,低耦合的,自包含的.可编程的Web应用程序,有了Web Service异构系统之间就可以通过XML或JSON来交换数据,这样就可以用于开发分布式的互操作的应用程序.Web Service使得运行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件就可相互交换数据或集成,无论它们各自所使用的语言.平台或内部协议是什么,都可以相互交换数据.Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制. ??REST(REpre

怎样封装RESTful Web Service

所谓Web Service是一个平台独立的,低耦合的.自包括的.可编程的Web应用程序.有了Web Service异构系统之间就能够通过XML或JSON来交换数据,这样就能够用于开发分布式的互操作的应用程序. Web Service使得执行在不同机器上的不同应用无须借助附加的.专门的第三方软件或硬件就可相互交换数据或集成.不管它们各自所使用的语言.平台或内部协议是什么,都能够相互交换数据.Web Service为整个企业甚至多个组织之间的业务流程的集成提供了一个通用机制. ??REST(REpr

Web Service 那点事儿(1)

Web Service,即“Web 服务”,简写为 WS,从字面上理解,它其实就是“基于 Web 的服务”.而服务却是双方的,有服务需求方,就有服务提供方.服务提供方对外发布服务,服务需求方调用服务提供方所发布的服务.其实也就是这些了,没有多少高大上的东西. 本文将从实战的角度,描述使用 Java 开发 WS 的工具及其使用过程. 如果说得再专业一点,WS 其实就是建立在 HTTP 协议上实现异构系统通讯的工具.没错!WS 说白了还是基于 HTTP 协议的,也就是说,数据是通过 HTTP 进行传

转-Web Service中三种发送接受协议SOA、http get、http post

原文链接:web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 一.web服务中三种发送接受协议SOAP/HTTP GET/HTTP POST 在web服务中,有三种可供选择的发送和接受信息的协议:SOAP,HTTP GET,HTTP POST,但是SOAP支持的数据类型更为广泛 SOAP=RPC+HTTP+XML SOAP简单的理解,就是这样的一个开放协议SOAP=RPC+HTTP+XML:采用HTTP作为底层通讯协议:RPC作为一致性的调用途径,XML作为数据传送的格式

Web Service和EJB的区别

1.WebService可以说是跨平台的,因为它采用的是XML技术,说穿了就是把你的请求按照该WebServece的标准将参数传过去,然后服务器返回结果,当然了最重要的是参数的传递和结果的返回都是采用XML格式,但需要按照规范的,现在有SOAP和ebXML,说到XML自然有DTD或是Schema了,它用WSDL和UDDI来管理这些规范.EJB也可以说成是远程调用,但采用的协议是RIM/IIOP,客户端将方法请求按照协议封装,然后发送到服务器,服务器把结果返回给客户端.由于采用了协议,所以传输的数

如何使用ABSL代码调用Web service

需求:在C4C UI里创建web service(maintain ticket),然后通过ABSL代码消费. 1. 创建一个新的Communication Arrangement 基于Manage Tickets这个标准的Communication Scenario创建一个Communication Arrangement: 因为我是在当前C4C系统上的ABSL里调用当前C4C系统提供的Web Service,所以Communication System选择Local: 当然这个Local的c

ESB (三) 整合跨平台、异构系统的Web Service服务

1.mule ESB整合系统四种模式 A.简单服务模式 属于几个web Service之间的同步调用,请求响应处理模式. B.桥接模式 C.校验器模式 校验器模式通过定义一个校验过滤器过滤服务请求,并同步返回ACK(ACKnowledge)或NACK(Not Acknowledge)结果.通过校验的服务请求被异步分发给处理方. D.服务代理模式 在整合时我们用到的是D模式,中间设置一个代理来中转请求处理,对外发布的地址任意很灵活,当提供者的Web service发生改变的时候就不需要在更改服务使