一种Web服务模拟的方法及其系统和服务代理系统的制作方法

文档序号:7981329阅读:157来源:国知局
一种Web 服务模拟的方法及其系统和服务代理系统的制作方法
【专利摘要】本发明实施例提供了一种Web服务模拟的方法及其系统和服务代理系统,用以解决现有技术中由于服务提供系统宕机导致研发测试的中断或者在线提供服务的故障。其中,该Web服务模拟的方法是通过服务代理系统拦截服务调用终端发出的调用请求报文,解析该调用请求报文,并查找该调用请求报文请求调用的方法对应的模拟方式;若查找结果为全部模拟方式,则服务代理系统生成响应报文并返回至服务调用终端;若查找结果为部分模拟方式,则服务代理系统转发该调用请求报文至服务提供系统,在接收到服务提供系统返回的响应报文后,处理接收到的响应报文并返回至服务调用终端来实现的。该Web服务模拟系统包括该服务代理系统和服务提供系统。
【专利说明】一种Web服务模拟的方法及其系统和服务代理系统
【技术领域】
[0001]本发明涉及面向服务构架(Service-Oriented Architecture, S0A)应用【技术领域】,尤其涉及一种Web服务模拟的方法及其系统和服务代理系统。
【背景技术】
[0002]随着现代社会科学技术的发展,计算机系统已经成为各行各业所依赖的工具,而在其中起着核心作用的是计算机软件系统。随着企业的不断发展和信息技术(InformationTechnology, IT)系统的不断建设,企业的IT应用系统越来越多,应用日益复杂,企业对应用系统之间的互联互通也提出了新的要求。而在大型的互联网应用中,其核心职能系统通常有几十个甚至更多,系统之间的服务依赖也非常复杂。
[0003]SOA是一种架构模型,它将企业应用中分散的功能组织成可以共享的基于标准的服务,这些服务能够迅速地被组合和重用,从而达到了快速响应业务需求的目的;同时,在企业级应用领域,随着应用规模的不断扩大,各个系统之间的集成和交互变得越来越重要。在SOA环境中,系统不可避免地要与其他系统交互,可以是基于简单对象访问协议(SimpleObject Access Protocol, SOAP)的Web服务,基于消息队列,甚至是基于远程过程调用协议(Remote Procedure Call Protocol, RPC)的远程调用。而在大型的互联网应用中,其核心职能系统通常有几十个甚至更多,系统之间的服务依赖也非常复杂。这种应用架构环境下,产生了以下几个问题:
[0004]比如,在大型IT企业所使用的系统在上线使用之前研发测试过程中以及在正常上线使用过程中,由于应用系统众多,且系统之间的依赖关系非常复杂,这样服务提供系统与服务调用系统之间交互非常多,服务提供系统的压力非常大,只要服务提供系统中的某一个服务器因为硬件故障或者其它种种原因宕机,系统间的服务调用就无法正常进行,这样就会导致研发测试的中断或者在线提供服务的故障。

【发明内容】

[0005]本发明实施例提供了一种Web服务模拟的方法及其系统和服务代理系统,用以解决现有技术中,由于应用系统众多,且系统之间的依赖关系非常复杂使得服务提供系统的压力较大可能导致研发测试的中断或者在线提供服务的故障的问题。
[0006]基于上述问题,本发明实施例提供的一种Web服务模拟的方法,包括:
[0007]服务代理系统拦截服务调用终端发出的调用请求报文,解析出此调用请求报文包含的服务名、方法名和输入参数类型,并根据预设的各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法模拟方式的对应关系查找所述调用请求报文请求调用的方法对应的模拟方式;
[0008]若查找结果为全部模拟方式,则所述服务代理系统根据预设的第一模拟模板生成响应报文并返回至所述服务调用终端;
[0009]若查找结果为部分模拟方式,则所述服务代理系统转发该调用请求报文至服务提供系统,在接收到所述服务提供系统返回的响应报文后,按照预设的第二模拟模板对接收到的响应报文进行处理后返回至服务调用终端。
[0010]本发明实施例提供的一种服务代理系统包括:
[0011]报文拦截模块,用于拦截服务调用终端发出的调用请求报文;
[0012]报文解析模块,用于解析出所述调用请求报文包含的服务名、方法名和输入参数类型,并根据预设的各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法模拟方式的对应关系查找所述调用请求报文请求调用的方法对应的模拟方式;
[0013]报文构造模块,用于在查找结果为全部模拟方式时,根据预设的第一模拟模板生成响应报文,并用于在查找结果为部分模拟方式时以及接收到所述服务提供系统返回的响应报文后,按照预设的第二模拟模板对接收到的响应报文进行处理;
[0014]报文转发模块,用于转发所述报文构造模块根据所述的第一模拟模板生成的响应报文至所述服务调用终端;以及在所述方法被设置为部分模拟方式时,转发该调用请求报文至服务提供系统,并转发所述报文构造模块根据所述第二模拟模板处理后的响应报文至所述服务调用终端。
[0015]本发明实施例还提供一种Web服务模拟的系统,包括本发明实施例提供的上述服务代理系统以及服务提供系统,所述服务提供系统用于当接收所述服务代理系统转发的调用请求报文时,生成响应报文返回至所述服务代理系统。
[0016]本发明实施例的有益效果包括:
[0017]本发明实施例提供了一种Web服务模拟的方法及其系统和服务代理系统,利用服务代理系统响应服务调用终端对被设置为全部模拟方式的方法的调用,当服务提供系统由于硬件故障或者其他原因宕机时,服务代理系统可以直接响应服务调用系统,从而隔离了服务提供系统对服务调用系统的影响,使得在服务提供系统压力较大或者宕机的情况下,研发测试可以继续或者在线提供服务不会出故障。
【专利附图】

【附图说明】
[0018]图1为本发明实施例提供的一种Web服务模拟系统在具体应用中的架构图;
[0019]图2为本发明实施例提供的一种Web服务模拟的方法的流程图;
[0020]图3为本发明实施例提供的服务代理系统中添加新的服务的流程图;
[0021]图4为本发明实施例提供的某一服务中的某一方法的第一模拟模板的不意图;
[0022]图5为本发明实施例提供的服务代理系统根据第一模拟模板生成的响应报文的示意图;
[0023]图6为本发明实施例提供的服务代理系统转发调用请求报文至服务提供系统的流程图;
[0024]图7为本发明实施例提供的某一服务中的某一方法的第二模拟模板的示意图;
[0025]图8为本发明实施例提供的服务提供系统返回的响应报文的示意图;
[0026]图9为本发明实施例提供的根据第二模拟模板对服务提供系统返回的响应报文进行处理后的响应报文的示意图;
[0027]图10为本发明实施例提供的一种Web服务模拟的方法在具体应用时进行服务模拟的流程图;
[0028]图11为本发明实施例提供的一种服务代理系统的结构示意图;
[0029]图12为本发明实施例提供的一种Web服务模拟的系统的结构示意图。
【具体实施方式】
[0030]下面结合说明书附图,对本发明实施例提供的一种Web服务模拟的方法及其系统和服务代理系统的【具体实施方式】及其能够达到的有益效果进行详细的阐述。
[0031]本发明实施例提供的一种Web服务模拟系统在具体应用时的架构如图1所示,包括:
[0032]服务代理系统11,位于服务调用系统13和服务提供系统12之间,它既可以是软件模块,也可以是能够实现代理功能的硬件设备;
[0033]服务提供系统12,可以提供服务或方法以供其他系统调用;
[0034]服务调用系统13,可以为用户,也可以为终端设备。
[0035]图2是本发明实施例提供的一种Web服务模拟的方法的流程图,该方法包含下述步骤:
[0036]S201、服务代理系统拦截服务调用终端发出的调用请求报文,此服务调用终端是服务调用系统中的某一个终端;
[0037]本步骤通过服务调用终端将调用请求报文中的目标IP地址由提供该调用请求报文中请求调用的方法的服务提供系统中的地址修改为服务代理系统中的地址来实现;
[0038]S202、服务代理系统解析出此调用请求报文包含服务名、方法名、输入参数类型;
[0039]S203、服务代理系统根据预设的各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法模拟方式的对应关系查找所述调用请求报文请求调用的方法对应的模拟方式,若查找结果为全部模拟方式,则执行S204,若查找结果为部分模拟方式,则执行S206 ;
[0040]S204、服务代理系统根据预设的第一模拟模板生成响应报文;
[0041]S205、服务代理系统将S204中生成的响应报文返回至服务调用终端;
[0042]这样,服务调用终端不再依赖服务提供系统,可以减小服务提供系统的压力,避免由于服务提供系统的故障导致的服务调用的不稳定;
[0043]S206、服务代理系统转发该调用请求报文至服务提供系统;
[0044]在S206 之后,执行 S207 ;
[0045]S207、服务代理系统接收服务提供系统返回的响应报文;
[0046]S208、服务代理系统根据预设的第二模拟模板处理在S207中接收到的响应报文;
[0047]S209、服务代理系统将在S208中处理后的响应报文返回至服务调用终端。
[0048]进一步地,S203中预先设置各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法模拟方式的对应关系具体通过下述方式来实现:
[0049]服务代理系统访问预先设置的各服务对应的Web服务描述语言WSDL的地址,获得各服务对应的WSDL描述;或者服务代理系统接收服务的WSDL描述文件获得此服务的WSDL描述;服务代理系统解析每个服务对应的WSDL描述,获得此服务的服务名、此服务中包含的所有方法的方法名、各方法的输入参数类型及输出参数的参数名、参数类型并存储;服务代理系统将获得的每个服务的服务名、所包含的各方法的方法名、各方法的输入参数类型与设置的各方法模拟方式对应存储。
[0050]图3给出了预先设置各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法模拟方式的对应关系的实现流程:
[0051]S301,服务代理系统中的WSDL获取器从操作者接收某个服务的WSDL地址或者WSDL描述文件,若WSDL获取器接收的是WSDL地址,则执行S302,若WSDL获取器接收的是WSDL描述文件,则执行S304 ;
[0052]S302, WSDL获取器访问接收到的WSDL地址,此WSDL地址例如可以位于服务提供系统中;然后执彳丁 S303 ;
[0053]S303,服务提供系统向WSDL获取器返回其请求访问的WSDL描述文件;
[0054]S304,WSDL获取器将获取到的WSDL描述文件发送至服务代理系统中的WSDL解析器;
[0055]S305, WSDL解析器解析S304中接收的WSDL描述文件;如服务中包含的所有的方法、各方法的方法名、各方法的输入参数类型和输出参数的参数名、参数类型;
[0056]S306, WSDL解析器将解析出的结果发送至数据库访问对象请求存储。
[0057]S307,数据库访问对象将WSDL解析器解析出的结果放入数据库中存储;
[0058]S308,数据库向操作者返回添加成功的消息;
[0059]S309,数据库接收操作者对添加的该服务中包含的各方法设置的模拟方式;
[0060]S310,数据库将该服务的服务名、该服务所包含的各方法的方法名、各方法的输入参数类型与各方法的模拟方式的对应存储。
[0061]然后,在该服务中所包含的各个方法的方法名、各个方法的输入参数类型及各个方法的模拟方式的对应关系全部存入到数据库后,操作者继续添加新的服务以及设置添加的新的服务中包含的所有的方法的模拟方式。
[0062]进一步地,步骤S204中的第一模拟模板通过下述步骤预先生成:
[0063]首先,服务代理系统根据各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法的模拟方式的对应关系查找出设置为全部模拟方式的方法;
[0064]然后,针对设置为全部模拟方式的每个方法,由操作者根据解析得到的该方法的每一个输出参数的参数类型为其设置对应的参数值,然后操作者将设置的输出参数的参数值及对应输出参数的参数名、参数类型作为第一模拟模板保存在数据库中。
[0065]下面对第一模拟模板的格式进行举例说明,图4给出了一种服务名为S的服务中某一方法的第一模拟模板的格式(当然本申请实施例并不限于此种格式),该方法的方法名为F,方法F包含两个输出参数,其参数名分别为参数SFl和参数SF2,参数SFl的参数类型为int,参数SF2的参数类型为float,操作者根据参数SFl的参数类型int将其参数值设为整数A,根据参数SF2的参数类型float将其值设为单精度浮点数B。
[0066]进一步地,在步骤S204中,服务代理系统根据预设的第一模拟模板生成响应报文的具体过程为:
[0067]服务代理系统首先判断调用请求报文所使用的协议,然后根据该调用请求报文所使用的协议生成相应格式的响应报文,最后再将存储的与该调用请求报文请求调用的方法对应的第一模拟模板的内容填入上述响应报文中。[0068]下面以服务调用终端使用SOAP协议发送调用请求报文为例,说明服务代理系统根据上述第一模拟模板生成响应报文的过程:
[0069]首先,服务代理系统判断出服务调用终端发送的调用请求报文使用的协议为SOAP协议;具体的判断过程例如可以采用下述方式:服务代理系统可针对不同的协议预先配置不同的代理入口,假设服务代理系统开启了两个端口 8080、8081,其中8080端口绑定了SOAP协议,8081端口绑定了 TCP协议,因此若服务代理系统的8080端口接收到调用请求报文,则认为该调用请求报文使用SOAP协议。
[0070]然后,服务代理系统生成SOAP协议格式的响应报文,它包含一个SOAP封套,SOAP封套中包含SOAP报头(可以有也可以没有)和SOAP报文内容(必须有),其中SOAP报文内容为保存在第一模拟模板上的内容,而该第一模拟模板的内容如图4所示,因此服务代理系统返回给服务调用终端的响应报文如图5所示。
[0071]上述全部模拟方式的方法的调用可以应用于不需要关心服务提供系统内部细节的情况,此时当服务提供系统由于硬件故障或者其他原因宕机时,服务代理系统可以直接响应服务调用系统,从而隔离了服务提供系统对服务调用系统的影响,使得在服务提供系统压力较大或者宕机的情况下,研发测试可以继续或者在线提供服务不会出故障。
[0072]另外,这种全部模拟方式的情况还可以应用于研发测试环境中,此时通过服务代理系统为服务调用系统返回响应报文从而便捷地检验服务调用系统中的一些漏洞。下面以两个具体的实例来说明:
[0073]在某一测试场景中,A系统需要调用B系统中的某个服务,则此时A系统需要设置一个超时时间t以便A系统在发送调用请求报文之后等待超过t时间而B系统仍未返回响应报文时A系统可以主动中断请求。否则,若A系统一直等待B系统的响应报文,会影响A系统对其他服务的处理,甚至若A系统调用的多个服务都未得到响应的话,那么A系统中等待响应的服务会越来越多,最终可能导致系统故障。
[0074]而在测试过程中,需要验证此超时处理机制是否可靠,因此可以在A系统和B系统之间设置一个服务代理系统,A系统通过该服务代理系统调用B系统的服务。在全部模拟的情况下,服务代理系统的操作者可以在服务代理系统中设置一个响应等待时间tl,其中tl>t,即服务代理系统在接收到调用请求报文后等待tl时间后再向A系统返回响应报文,若A系统不再对返回的响应报文进行处理,则说明A系统设置了超时处理机制;若々系统继续对返回的响应报文进行处理,则说明A系统未设置超时处理机制。这样,可以在测试中验证服务调用系统是否设置了超时处理机制,或者设置的超时处理机制是否可靠。
[0075]在另一测试场景中,在SOA中,服务可能分布在各个系统中,如A系统和B系统分别具有提供某种服务的能力,服务调用系统(A系统)请求调用服务提供系统(B系统)中的服务,在获取到服务提供系统(B系统)返回的结果后会继续进行自身业务的处理,这时就需要考虑服务调用系统(A系统)对服务提供系统(B系统)返回的结果的幂等性控制。如A系统具有为客户转账成功后向客户收取一定费用的功能,而B系统具有转账的服务,A系统需要调用B系统的转账服务,A系统在接收到B系统的转账成功的结果后直接对客户进行扣费,在测试时需要考虑的是对于客户的同一转账操作,转账成功后只能扣费一次。而在服务调用过程中,B系统可能会将转账成功的结果多次返回到A系统,这里就需要A系统有幂等性控制,即针对同一转账操作,不论A系统收到几次B系统返回的转账成功的结果,A系统都只扣费一次。在验证A系统是否具有幂等性控制时,就可以通过在A系统和B系统之间设置服务代理系统,A系统通过服务代理系统调用B系统的转账服务,B系统通过服务代理系统向A系统返回转账成功的结果,可以很方便地在服务代理系统中设置向A系统返回转账成功的结果的次数,以模拟B系统将转账成功的结果多次返回到A系统的场景。然后根据A系统对同一转账操作的扣费次数来判断A系统是否具有幂等性控制。
[0076]进一步地,在步骤S206中,服务代理系统转发该调用请求报文至服务提供系统的具体过程如图6所示:
[0077]S601、服务代理系统查找请求调用的方法的转发至服务提供系统的地址;
[0078]其具体过程为,服务代理系统根据调用请求报文的源IP、服务名、方法名和输入参数类型,在预先存储的服务名、方法名、输入参数类型、调用请求报文的源IP与服务提供系统的地址的对应关系中查找调用请求报文需要转发至服务提供系统的地址;
[0079]在研发测试中,服务提供系统以及服务调用系统中可能有多个研发任务同时进行,例如当有两个研发任务,任务I和任务2,同时进行时,服务提供系统中的一部分终端为任务I提供服务调用,另一部分终端为任务2提供服务调用,服务调用系统中的一部分终端进行任务I的研发,另一部分终端进行任务2的研发,研发测试人员希望在处理服务调用时,由研发任务I而发出的调用请求报文仅由研发任务I的系统来处理,由研发任务I而发出的调用请求报文仅由研发任务I的系统来处理,因此在查找调用请求报文转发至服务提供系统的地址时就需要知道调用请求报文的源IP ;并且由于同一个服务中可能会包含方法名相同的两个方法,这两个方法唯一的区别是它们的输入参数类型不同,因此服务提供系统必须根据服务名、方法名、输入参数类型三种信息才能判断服务调用终端究竟要调用哪一个方法。因此,在此步骤中查找请求调用的方法的转发至服务提供系统的地址不能仅仅根据方法名来查找,而要首先根据调用请求报文的源IP来判断该调用请求报文要由服务提供系统中的那些终端来处理,再根据服务名,方法名以及输入参数类型首先判断服务调用系统究竟要调用哪个方法,然后再在服务提供系统中处理该调用请求报文的那些终端中查找处理该请求调用的方法的地址。
[0080]若查找到,则执行步骤S602,若查找不到,则执行步骤S603 ;
[0081]在步骤S602中,服务代理系统转发调用请求报文至查找到的服务提供系统的地址;
[0082]在步骤S603中,服务代理系统判断是否预先设置了默认转发地址,若是,则执行步骤S604,若否,则执行步骤S605 ;
[0083]在步骤S604中,服务代理系统转发调用请求报文至默认转发地址;
[0084]在步骤S605中,服务代理系统向服务调用终端返回错误告警信息。
[0085]进一步地,步骤S208中的第二模拟模板通过下列步骤生成:
[0086]首先,服务代理系统根据各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法的模拟方式的对应关系查找出设置为部分模拟方式的方法;
[0087]然后,针对设置为部分模拟方式的每个方法,操作者首先决定该方法的全部输出参数中的那些输出参数需要模拟,然后再为需要模拟的输出参数根据其参数类型设置相应的参数值,最后将需要模拟的输出参数的参数名、参数类型及设置的对应的参数值保存为第二模拟模板。[0088]图7给出了服务名为S的服务中某一方法的第二模拟模板的格式(当然本申请实施例并不限于此种格式),该方法的方法名为M,包含三个输出参数,其参数名分别为参数SM1、参数SM2和参数SM3,参数SMl的参数类型为int,参数SM2的参数类型为float,参数SM3的参数类型为double,首先,操作者确定在该方法M的所有输出参数中仅需要模拟SM3,因此操作者根据参数SM3的参数类型double将其参数值设为双精度浮点数D,因此该方法M的第二模拟模板仅保存了服务S、方法M以及输出参数SM3的参数名、参数类型以及参数值的内容。
[0089]进一步地,在步骤S208中,服务代理系统根据预设的第二模拟模板处理在步骤S207中接收到的响应报文的具体过程为:
[0090]服务代理系统将该响应报文所包含的与第二模拟模板所包含的输出参数的参数名一致的输出参数的参数值修改为与第二模拟模板中该输出参数的参数名对应的参数值。
[0091]下面仍然以服务调用终端使用SOAP协议发送调用请求报文,请求调用的方法为服务S中的方法M为例,说明服务代理系统根据第二模拟模板处理在S207中接收到的响应报文的过程:
[0092]服务代理系统在S207中接收到的服务提供系统返回的响应报文如图8所示,其中SOAP报文的内容包括服务S、方法M和三个输出参数的参数名、参数类型以及相应的参数值,参数SMl的参数类型为int,其参数值为整数J,参数SM2的参数类型为float,其参数值为单精度浮点数K,参数SM3的参数类型为double,其参数值为双精度浮点数L。
[0093]然后,服务代理系统11根据图7所示的第二模拟模板将在S207中接收到的响应报文中的参数SM3的参数值由双精度浮点数L替换为操作者为参数SM3设置的参数值双精度浮点数D,即根据图7所示的第二模拟模板处理后的SOAP报文如图9所示,处理前与处理后的SOAP报文的区别是参数SM3的参数值不同了,处理前参数SM3的参数值为L,处理后参数SM3的参数值为D。
[0094]在应用时对于复杂的服务,一个方法的输出参数通常会比较多,操作者要完整设置模拟全部输出参数工作量会比较大,因此这里借助服务提供系统返回的响应报文,操作者只需设置自己需要模拟的输出参数即可,这样一方面可以保证返回的输出参数的完整性,另一方面也克服了模拟所有输出参数比较繁琐的问题。
[0095]下面以一个具体的实例来说明:A系统可以提供一种服务AS,此服务的输出参数有ASF1、ASF2,其中ASFl处理该服务得到的真实数据,ASF2为对该服务进行处理的结果状态,可能有ASF21、ASF22几种返回值;而当B系统需要调用A系统的服务AS时,B系统需要对调用AS可能出现的各种结果状态进行处理,而在实际应用中B系统是不了解A系统的服务AS的具体实现细节的,在没有服务代理系统时若需要模拟AS服务的各种结果状态势必需要投入了解AS服务的实现细节才能够准确模拟出来,而若采用全部模拟的方式由于方法AS的输出参数ASFl内容可能会非常复杂,要全部模拟,设置起来会非常繁琐。因此采用部分模拟,即只设置需要模拟的输出参数,其余输出参数的内容仍然由A系统在响应该方法时生成,从而简化模板设置,提高效率。
[0096]例如,A系统提供的服务AS为查看用户账号余额的服务,B系统调用A系统的服务AS时,A系统向B系统返回所查看的用户账号的余额(对应输出参数ASF1),并向B系统返回该用户账号的状态(对应输出参数ASF2),如当该用户账号的余额不足10元时,向B系统返回余额不足的信息(对应ASF21 ),而当该用户账号的余额超过某一规定额度时,向B系统返回余额超限的信息(对应ASF22),由于B系统需要对调用AS可能出现的各种结果状态进行处理,因此在A系统和B系统之间设置服务代理系统,A系统将B系统调用的服务AS的输出参数ASFl和ASF2通过代理系统返回给B系统,采用部分模拟的方式,服务代理系统可以修改ASF2的值以便模拟服务AS的各种结果状态,检验B系统是否能对不同的结果状态做出正确处理,如B系统收到余额不足的信息时,是否能提示用户充值,或者在收到余额超限的信息时,是否能提示用户处理账户以使余额不再超限。而对服务AS的输出参数ASF1,代理系统可以直接采用A系统在处理该服务时生成的值,不必在模拟ASFl的参数值。
[0097]在软件测试过程中,采用服务代理系统的优点是可以方便的模拟A系统中服务AS输出结果的各种状态值,以检验B系统对服务AS所有返回的结果状态能否正确处理,以降低漏洞发生的概率,该漏洞是指B系统对服务AS返回的结果状态不能正确处理。服务代理系统可以更为方便的得到服务AS的各种返回的结果状态,从而提高研发效率,常规测试方式如Debug也能做到这种程度的测试模拟,但是其模拟成本会非常高。
[0098]较佳地,本发明实施例提供的一种Web服务模拟的方法还包括调用请求报文中请求调用的方法被设置为非模拟方式的情况,在这种情况下,服务代理系统直接转发调用请求报文至服务提供系统,其转发的具体过程与图6中所示的过程类似,在此不再赘述;服务提供系统在接收到转发的调用请求报文后,进行正常处理,然后向服务代理系统返回响应报文,服务代理系统对该响应报文不作任何额外处理直接转发至服务调用终端。
[0099]下面以基于SOAP的Web服务为例,说明本发明实施例提供的一种Web服务模拟的方法在具体应用时进行服务模拟的过程,如图10所示,该过程包括以下步骤:
[0100]S1001、服务调用系统中的某个服务调用终端发出基于SOAP协议的调用请求报文,
[0101]由于服务调用系统已经将需要访问的服务提供系统中的地址修改为服务代理系统中的地址,因此服务调用系统发出调用请求报文后,实际上是SOAP调用请求报文直接发送到服务代理系统中的接收地址;
[0102]S1002、服务代理系统中的报文拦截器拦截SOAP调用请求报文;
[0103]S1003、报文拦截器发送SOAP调用请求报文至服务代理系统中的报文解析器102 ;
[0104]S1004、报文解析器取出调用请求报文的源IP及其中的SOAP消息并解析该SOAP消息,得到服务名、方法名和输入参数类型,并根据预先存储在数据库(图10中未示出)中的各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法的模拟方式的对应关系查找出请求调用的方法的模拟方式;
[0105]S1005、报文解析器发送SOAP调用请求报文、源IP、解析出的请求调用的服务名、方法名、输入参数类型以及查找到的请求调用的方法的模拟方式至服务代理系统中的报文转发器;
[0106]若请求调用的方法被设置为全部模拟方式则执行S1006 ;若请求调用的方法被设置为部分模拟或者非模拟方式则执行S1007 ;
[0107]S1006、报文转发器转发SOAP调用请求报文至服务代理系统中的报文构造器;
[0108]S1007、报文转发器根据预先存储在数据库中的服务名、方法名、输入参数类型、调用请求报文的源IP以及转发至服务提供系统的地址的对应关系查找出被设置为部分模拟方式或非模拟方式的请求调用的方法的转发至服务提供系统的地址;
[0109]S1008、报文转发器转发SOAP调用请求报文至S1007中查找到的地址;若在S1007中没有查找到转发至服务提供系统的地址,并且也没有预设的默认地址,则向服务调用系统返回错误告警信息,这种情况在图10中未示出;
[0110]S1009,报文构造器在接收到调用请求报文后,根据该请求调用的方法所对应的存储在数据库中的第一模拟模板生成响应报文;
[0111]S1010,报文构造器将响应报文发送至报文转发器;
[0112]S1011、报文转发器转发响应报文至服务调用系统中的发出调用请求报文的服务调用终端;
[0113]S1012、服务提供系统根据接收到的调用请求报文生成响应报文;
[0114]S1013、服务提供系统将生成的响应报文返回至报文转发器;
[0115]若请求调用的方法被设置为部分模拟方式,则执行S1014 ;若请求调用的方法被设置为非模拟方式,则执行S1015 ;
[0116]S1014、报文转发器将接收到的响应报文转发至报文构造器;
[0117]S1015、报文转发器将接收到的响应报文转发至服务提供系统中的发送调用请求报文的服务调用终端;
[0118]S1016、报文构造器根据存储在数据库中的与该请求调用的方法相对应的第二模拟模板处理S1014中接收到的响应报文;
[0119]S1017、报文构造器将处理过的响应报文发送至报文转发器;
[0120]S1018、报文转发器将接收到的响应报文转发至服务调用系统中的发送调用请求报文的服务调用终端。
[0121]基于同一发明构思,本发明实施例还提供了一种服务代理系统和Web服务模拟的系统。
[0122]本发明实施例提供的一种服务代理系统,如图11所示,包括:
[0123]报文拦截模块111,用于拦截服务调用终端发出的调用请求报文;
[0124]报文解析模块112,用于解析出所述调用请求报文包含服务名、方法名、输入参数类型,并根据预设的各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法模拟方式的对应关系查找所述方法的模拟方式;
[0125]报文构造模块113,用于在所述方法被设置为全部模拟方式时,根据预设的第一模拟模板生成响应报文,并用于在所述方法被设置为部分模拟方式时以及接收到所述服务提供系统返回的响应报文后,按照预设的第二模拟模板对接收到的响应报文进行处理;
[0126]报文转发模块114,用于转发所述报文构造模块根据所述的第一模拟模板生成的响应报文至所述服务调用终端;以及在所述方法被设置为部分模拟方式时,转发该调用请求报文至服务提供系统12,并转发所述报文构造模块根据所述第二模拟模板处理后的响应报文至所述服务调用终端。
[0127]进一步地,图11所示的本发明实施例提供的服务代理系统还包括:
[0128]WSDL获取模块115,用于访问预先设置的各服务对应的WSDL的地址,获得各服务对应的WSDL描述;或者用于接收服务的WSDL描述文件获得此服务的WSDL描述;
[0129]WSDL解析模块116,用于解析每个服务对应的WSDL描述,获得此服务的服务名、此服务中包含的所有方法的方法名、各方法的输入参数类型和输出参数的参数名及参数类型;
[0130]存储摸块117,用于存储获得的每个服务的服务名、所包含的各方法的方法名、各方法的输入参数类型和输出参数的参数名及参数类型,并用于存储各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型与设置的各方法模拟方式的对应关系;
[0131]在具体应用时,存储模块117既可以是数据库也可以是能够实现存储功能的其他模块,如果存储模块117时数据库,则该服务代理系统中还可以包括数据库访问对象,用于对数据库中的数据进行读取和存储的管理。
[0132]进一步地,图11所示的本发明实施例提供的服务代理系统,还包括:
[0133]第一模拟模板生成模块118,用于根据各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法的模拟方式的对应关系查找出被设置为全部模拟方式的方法,并针对被设置为全部模拟方式的每个方法,根据该方法的每一个输出参数的参数类型设置对应参数值,将设置的输出参数的参数值及对应输出参数的参数名、参数类型保存为第一模拟模板;
[0134]第二模拟模板生成模块119,用于根据各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法的模拟方式的对应关系查找出被设置为部分模拟方式的方法;并针对被设置为部分模拟方式的每个方法,根据该方法的全部输出参数中的需要模拟的输出参数的参数类型设置相应的参数值,将需要模拟的输出参数的参数名、参数类型及设置的对应的参数值保存为第二模拟模板。
[0135]进一步地,存储模块117还用于存储被设置为全部模拟方式的各方法的第一模拟模板,并用于存储被设置为部分模拟方式的各方法的第二模拟模板。
[0136]进一步地,报文转发模块114,具体用于根据调用请求报文中包含的服务名、方法名、输入参数类型和源IP地址,在预先存储的服务名、方法名、输入参数类型和源IP与转发至服务提供系统的地址的对应关系中查找所述调用请求报文请求调用的方法的转发至服务提供系统的地址;若查找不到,则向服务调用终端返回错误告警信息或将调用请求报文转发至默认转发地址;若查找到,则将调用请求报文转发至查找到的服务提供系统的地址。
[0137]进一步地,报文构造模块114,具体用于在调用请求报文请求调用的方法被设置为全部模拟方式时,根据所述调用请求报文所使用的协议,生成相应格式的响应报文,并将存储的与所述调用请求报文请求调用的方法对应的第一模拟模板的内容填入该报文中;并用于在调用请求报文请求调用的方法被设置为部分模拟方式以及接收到服务提供系统返回的响应报文后,将该响应报文所包含的与存储的第二模拟模板所包含的输出参数的参数名和参数类型一致的输出参数的参数值修改为与该第二模拟模板中该输出参数的参数名和参数类型对应的参数值。
[0138]较佳地,报文转发模块114还用于在调用请求报文请求调用的方法被设置为非模拟方式时,转发调用请求报文至服务提供系统12,并在接收到服务提供系统12返回的响应报文后,对接收到的响应报文不做额外的处理直接返回至服务调用终端。
[0139]本发明实施例提供的Web服务模拟的系统,如图12所示,包括:
[0140]本发明实施例提供的上述服务代理系统11 ;
[0141]服务提供系统12,用于接收到服务代理系统11转发的调用请求报文时,生成响应报文返回至所述服务代理系统。
[0142]本发明实施例提供的服务代理系统11针对不同的通信协议对外提供不同的模拟接口,即它可以解析不同通信协议的调用请求报文,也就是说当服务调用终端需要调用某方法时,发送的调用请求报文不局限于某一种通信协议。
[0143]显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
【权利要求】
1.一种Web服务模拟的方法,其特征在于,包括: 服务代理系统拦截服务调用终端发出的调用请求报文,解析出调用请求报文包含的服务名、方法名和输入参数类型,并根据预设的各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法模拟方式的对应关系查找所述调用请求报文请求调用的方法对应的模拟方式; 若查找结果为全部模拟方式,则所述服务代理系统根据预设的第一模拟模板生成响应报文并返回至所述服务调用终端; 若查找结果为部分模拟方式,则所述服务代理系统转发该调用请求报文至服务提供系统,在接收到所述服务提供系统返回的响应报文后,按照预设的第二模拟模板对接收到的响应报文进行处理后返回至服务调用终端。
2.如权利要求1所述的方法,其特征在于,各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法模拟方式的对应关系通过下述方式预先设置: 服务代理系统访问预先设置的各服务对应的Web服务描述语言WSDL的地址,获得各服务对应的WSDL描述; 或者服务代理系统接收服务的WSDL描述文件获得此服务的WSDL描述; 服务代理系统解析每个服务对应的WSDL描述,获得此服务的服务名、此服务中包含的所有方法的方法名、各方法的输入参数类型及输出参数的参数名、参数类型并存储; 服务代理系统将获得的每个服务的服务名、所包含的各方法的方法名、各方法的输入参数类型与设置的各方法模拟方式对应存储。
3.如权利要求2所述的方法, 其特征在于,所述第一模拟模板通过下述方式预先生成: 服务代理系统查找出各服务中被设置为全部模拟方式的方法; 针对被设置为全部模拟方式的每个方法,根据该方法的输出参数的参数类型设置对应的参数值,将设置的参数值及对应输出参数的参数名、参数类型保存为第一模拟模板。
4.如权利要求3所述的方法,其特征在于,所述服务代理系统根据预设的第一模拟模板生成响应报文,具体包括: 所述服务代理系统根据所述调用请求报文所使用的协议,生成相应格式的响应报文,并将存储的与所述调用请求报文请求调用的方法对应的第一模拟模板的内容填入所述报文中。
5.如权利要求1所述的方法,其特征在于,所述服务代理系统转发该调用请求报文至服务提供系统,具体包括: 所述服务代理系统根据所述调用请求报文中包含的源IP、服务名、方法名和输入参数类型,在预先存储的服务名、方法名、输入参数类型、调用请求报文的源IP与服务提供系统的地址的对应关系中查找所述调用请求报文所需转发的服务提供系统的地址; 若查找不到,则向服务调用终端返回错误告警信息或将所述调用请求报文转发至预先设置的默认转发地址; 若查找到,则按照查找到的服务提供系统的地址转发所述调用请求报文。
6.如权利要求2所述的方法,其特征在于,所述第二模拟模板通过下述方式生成: 服务代理系统查找出各服务中被设置为部分模拟方式的方法; 针对被设置为部分模拟方式的每个方法,根据该方法的全部输出参数中的需要模拟的输出参数的参数类型设置相应的参数值,将需要模拟的输出参数的参数名、参数类型及对应的参数值保存为第二模拟模板。
7.如权利要求6所述的方法,其特征在于,按照预设的第二模拟模板对接收到的响应报文进行处理,具体包括: 将服务提供系统返回的响应报文所包含的与所述第二模拟模板所包含的输出参数的参数名一致的输出参数的参数值修改为与所述第二模拟模板中该输出参数的参数名对应的参数值。
8.如权利要求1-7任一项所述的方法,其特征在于,还包括: 若所述方法被设置为非模拟方式,则服务代理系统转发所述调用请求报文至服务提供系统,并在接收到服务提供系统返回的响应报文后,将接收到的响应报文返回至服务调用终端。
9.一种服务代理系统,其特征在于,包括: 报文拦截模块,用于拦截服务调用终端发出的调用请求报文; 报文解析模块,用于解析出所述调用请求报文包含的服务名、方法名和输入参数类型,并根据预设的各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型及各方法模拟方式的对应关系查找所述调用请求报文请求调用的方法对应的模拟方式; 报文构造模块,用于在查找结果为全部模拟方式时,根据预设的第一模拟模板生成响应报文,并用于在查找结果为部分模拟方式时以及接收到所述服务提供系统返回的响应报文后,按照预设的第二模拟模板对接收到的响应报文进行处理; 报文转发模块,用于转发所述报文构造模块根据所述的第一模拟模板生成的响应报文至所述服务调用终端;以及在所述方法被设置为部分模拟方式时,转发该调用请求报文至服务提供系统,并转发所述报文构造模块根据所述第二模拟模板处理后的响应报文至所述服务调用终端。
10.如权利要求9所述的系统,其特征在于,还包括: WSDL获取模块,用于访问预先设置的各服务对应的WSDL的地址,获得各服务对应的WSDL描述;或者用于接收服务的WSDL描述文件获得此服务的WSDL描述; WSDL解析模块,用于解析每个服务对应的WSDL描述,获得此服务的服务名、此服务中包含的所有方法的方法名、各方法的输入参数类型和输出参数的参数名及参数类型; 存储模块,用于存储获得的每个服务的服务名、所包含的各方法的方法名、各方法的输入参数类型和输出参数的参数名及参数类型,并用于存储各服务的服务名、服务所包含的各方法的方法名、各方法的输入参数类型与设置的各方法模拟方式的对应关系。
11.如权利要求10所述的系统,其特征在于,还包括: 第一模拟模板生成模块,用于查找出各服务中被设置为全部模拟方式的方法,并针对被设置为全部模拟方式的每个方法,根据该方法的输出参数的参数类型设置对应的参数值,将设置的参数值及对应的输出参数的参数名、参数类型保存为第一模拟模板。
12.如权利要求11所述的系统,其特征在于,所述报文构造模块,具体用于在所述调用请求报文请求调用的方法被设置为全部模拟方式时,根据所述调用请求报文所使用的协议,生成相应格式的响应报文,并将存储的与所述调用请求报文请求调用的方法对应的第一模拟模板的内容填入所述报文中。
13.如权利要求9所述的系统,其特征在于,所述报文转发模块,具体用于根据所述调用请求报文中包含的源IP、服务名、方法名和输入参数类型,在预先存储的服务名、方法名、输入参数类型、调用请求报文的源IP与服务提供系统的地址的对应关系中查找所述调用请求报文所需转发的服务提供系统的地址;若查找不到,则向服务调用终端返回错误告警信息或将所述调用请求报文转发至预先设置的默认转发地址;若查找到,则按照查找到的服务提供系统的地址转发所述调用请求报文。
14.如权利要求10所述的系统,其特征在于,还包括: 第二模拟模板生成模块,用于查找出各服务中被设置为部分模拟方式的方法;针对被设置为部分模拟方式的每个方法,根据该方法的全部输出参数中的需要模拟的输出参数的参数类型设置相应的参数值,将需要模拟的输出参数的参数名、参数类型及对应的参数值保存为第二模拟模板。
15.如权利要求14所述的系统,其特征在于,所述报文构造模块,具体用于在所述调用请求报文请求调用的方法被设置为部分模拟方式时以及接收到所述服务提供系统返回的响应报文后,将该响应报文所包含的与所述第二模拟模板所包含的输出参数的参数名一致的输出参数的参数值修改为与所述第二模拟模板中该输出参数的参数名对应的参数值。
16.如权利要求9-15任一项所述的系统,其特征在于,所述报文转发模块,还用于在所述方法被设置为非模拟方式时,转发所述调用请求报文至服务提供系统,并在接收到服务提供系统返回的响应报文后,将接收到的响应报文直接返回至服务调用终端。
17.—种Web服务模拟的系统,其特征在于,包括: 如权利要求9-16任一项所述的服务代理系统; 服务提供系统,用于当接收到所述服务代理系统转发的调用请求报文时,生成响应报文返回至所述服务代理系统。
【文档编号】H04L29/08GK103580937SQ201210258669
【公开日】2014年2月12日 申请日期:2012年7月24日 优先权日:2012年7月24日
【发明者】吴坤 申请人:阿里巴巴集团控股有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1