发明内容
本发明提供了一种在企业服务总线ESB上传递消息附件的方法及装置,以至少解决相关技术中在处理携带有附件的Soap请求消息时存在不足的问题。
根据本发明的一个方面,提供了一种在ESB上传递消息附件的方法,包括:企业服务总线ESB容器将来自用户侧的SoapMessage消息转换为ESB容器内部的Message对象,并判断SoapMessage消息中是否携带附件;如果SoapMessage消息中携带有附件,则将附件转换为Message对象中的字节数组;并通过Message对象传递附件。
优选地,ESB容器将来自用户侧的SoapMessage消息转换为ESB容器内部的Message对象之前,还包括:用户侧根据暴露的web服务地址生成SoapMessage消息,并将SoapMessage消息发送到ESB容器。
优选地,通过Message对象传递附件之后,还包括:ESB容器对Message对象处理完毕之后,向用户侧返回响应消息。
优选地,通过Message对象传递附件包括:在ESB容器内部流转Message对象。
优选地,当所述Message对象需要在ESB系统的多台ESB容器之间流转时,通过Message对象传递附件包括:不进行消息格式适配而直接将Message对象发送至ESB系统中的另一ESB容器。
优选地,在需要访问第三方WEB服务的情况下,通过Message对象传递附件包括:将Message对象转换回SoapMessage消息,并将SoapMessage消息发送到第三方WEB服务上。
根据本发明的另一方面,提供了一种在ESB上传递消息附件装置,装置应用于ESB容器,包括:适配器,用于将来自用户侧的SoapMessage消息转换为ESB容器内部的Message对象;判断模块,用于判断SoapMessage消息中是否携带附件;适配器还用于在判断模块的判断结果为是的情况下,将附件转换为Message对象中的字节数组;传递模块,用于通过Message对象传递附件。
优选地,传递模块包括:第一传递子模块,用于在ESB容器内部流转Message对象。
优选地,传递模块包括:第二传递子模块,用于在Message对象需要在ESB系统的多台ESB容器之间流转的情况下,不进行消息格式适配而直接将Message对象发送至ESB系统中的另一ESB容器。
优选地,适配器还用于在需要访问第三方WEB服务的情况下,将Message对象转换回SoapMessage消息;传递模块包括第三传递子模块,用于将转换回的SoapMessage消息发送到第三方WEB服务上。
优选地,该装置还包括响应模块,用于在所述Message对象被处理完毕之后,向所述用户侧返回响应消息。
通过本发明,采用将SoapMessage消息中携带的附件转换为字节数组往下流转,解决了相关技术中在处理携带有附件的Soap请求消息时存在不足的问题,进而达到了扩展企业服务总线的应用范围以及提高系统性能效果。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
图1是根据本发明实施例的传递消息附件的方法流程图。如图1所示,该方法包括:
步骤S102,企业服务总线ESB容器将来自用户侧的SoapMessage消息转换为ESB容器内部的Message对象,并判断SoapMessage消息中是否携带附件。
步骤S104,如果SoapMessage消息中携带有附件,则将附件转换为Message对象中的字节数组;并通过Message对象传递附件。
在本实施例中,通过将SoapMessage消息中携带的附件转换为字节数组往下流转,解决了相关技术中在处理携带有附件的Soap请求消息时存在不足的问题,进而达到了扩展企业服务总线的应用范围以及提高系统性能效果。
其中,在步骤S102之前,还包括:用户侧根据暴露的web服务地址生成SoapMessage消息,并将SoapMessage消息发送到ESB容器。
其中,在步骤S104之后,还包括:ESB容器对Message对象处理完毕之后,向用户侧返回响应消息。
其中,步骤S104包括:在ESB容器内部流转Message对象;或者,将Message对象发送至ESB系统中的另一ESB容器;或者,将Message对象转换回SoapMessage消息,并将SoapMessage消息发送到第三方WEB服务上。
图2是根据本发明实施例的传递消息附件的装置结构示意图。如图2所示,该装置包括:适配器10,用于将来自用户侧的SoapMessage消息转换为ESB容器内部的Message对象;判断模块20,用于判断SoapMessage消息中是否携带附件;适配器10还用于在判断模块的判断结果为是的情况下,将附件转换为Message对象中的字节数组;传递模块30,用于通过Message对象传递附件。
在本实施例中,通过适配器10将SoapMessage消息中携带的附件转换为字节数组往下流转,解决了相关技术中在处理携带有附件的Soap请求消息时存在不足的问题,进而达到了扩展企业服务总线的应用范围以及提高系统性能效果。
其中,传递模块30包括:第一传递子模块31,用于在ESB容器内部流转Message对象;第二传递子模块31,用于将Message对象发送至ESB系统中的另一ESB容器;适配器10还用于将Message对象转换回SoapMessage消息;传递模块还包括第三传递子模块33,用于将转换回的SoapMessage消息发送到第三方WEB服务上。
其中,该装置还包括响应模块40,用于在所述Message对象被处理完毕之后,向所述用户侧返回响应消息。
图3是根据本发明实施例的附件在ESB流转和在ESB模块之间传输的系统模块结构框图。在本实施例中所描述的构件、术语涉及到了web服务和ESB引擎等方面的内容,下面仅描述与本实施例相关的主要功能部件。如图4所示,该系统包括:
ESB离线开发工具,用户利用ESB离线设计器根据自身业务需要画出流程图。
ESB容器,负责把开发好的流程暴露为web服务,供用户调用。
ESB消息适配器,把soap请求消息转换为企业服务总线中的message对象。或者反过来把message对象转换为soap请求消息请求第三方服。
ESB离线开发工具也就是指ESB流程设计器,用户可以根据业务需要,把不同类型的节点拖入画板中,然后用连线依次把它们连起来就构成了一个完整的流程。流程设计好后,可以将其导出,然后部署到ESB容器,最终暴露为web服务。其中,用户是指:服务提供者、业务开发者、业务使用者等。web服务(或称能力),是指发布在ESB引擎内,或者互联网等公共网络上的标准服务,这些标准服务是指如Web服务/REST服务等形式的服务,如国家气象局官方站点提供的天气预报服务、google公司提供的搜索服务这些互联网等公共网络服务;或者通过ParlayX协议开放出来发短信、发彩信等电信服务。
ESB容器是整个系统最核心的一个模块,主要功能是根据设计好的流程图,将其暴露为web服务,供用户调用。也负责接收并处理用户的soap请求消息,并将处理结果返回给用户。
其中,本文所描述的一种附件流转机制,就是在ESB容器接收到用户的soap请求消息时发挥作用。当请求消息上来时,该系统会判断是否携带了附件,若有携带,则会把改附件转换为字节数组往下流转;若没携带,则不作任何处理。
ESB消息适配器,把soap请求消息转换为企业服务总线中的message对象。或者反过来把message对象转换为soap请求消息请求第三方服务。
本实施例主要阐述了一种在企业服务总线上附件的流转机制,相比现有的系统,本系统能够很好地处理附件传输问题。而且,通过适配器,还可以将这种附件流转机制应用到ESB为之整合的整个系统,进而提升了系统的整体功能和性能。最终,使得该系统能够满足更多客户的需求。
图4是根据本发明实施例的整合的ESB系统结构示意图。如图4所示,是由多个ESB系统组成的集群。当访问量巨大,单台ESB容器不能很好地满足业务需求时,可以用该集群系统加于扩展,把访问压力分散到多台ESB容器,从而减低每台ESB容器的访问量,提升了整个系统的处理能力。
图5是根据本发明实施例的请求消息SoapMessage的结构示意图。如图5所示,是请求消息SoapMessage的结构。当用户的请求消息发送到ESB容器时,是以SoapMessage对象形式存在的。SOAPMessage对象由一个SOAP部分和一个或多个附件部分(可选)组成。SOAPMessage对象的SOAP部分是一个SOAPPart对象,包含了用于消息路由和标识的信息,并可以包含特定于应用程序的内容。消息SOAP部分中的所有数据都必须是XML格式。
默认情况下,新的SOAPMessage对象包含以下对象:
一个SOAPPart对象;
一个SOAPEnvelope对象;
一个SOAPBody对象;
一个SOAPHeader对象;
可以通过调用方法SOAPMessage.getSOAPPart()检索消息的SOAP部分。SOAPEnvelope对象是从SOAPPart对象检索的,SOAPEnvelope对象用于检索SOAPBody和SOAPHeader对象。
SOAPPart sp=message.getSOAPPart();
SOAPEnvelope se=sp.getEnvelope();
SOAPBody sb=se.getBody();
SOAPHeader sh=se.getHeader();
除强制性SOAPPart对象之外,SOAPMessage对象还可以包含零个或多个AttachmentPart对象,每个AttachmentPart对象都包含特定于应用程序的数据(即附件信息)。SOAPMessage接口提供了一些用于创建AttachmentPart对象的方法,以及一些将它们添加到SOAPMessage对象的方法。收到SOAPMessage对象的一方可以通过检索各个附件部分来检查消息内容。
与SOAP消息的其余部分不同,附件不需要是XML格式,因此可以是简单文本或图像文件等任何形式。因此,任何非XML格式的消息内容必须在AttachmentPart对象中。
图6是根据本发明实施例的ESB上流转的ESBMessage消息结构示意图。如图6所示,是在ESB企业服务总线上流转的Message消息对象的结构。它是有以下几个部分构成的:
Header(用来存放From,To,Reply-to等Addressing的信息);
Body(存放信息主体);
Attachment(用来存放附件等);
Properties(属性);
Context(主要是存放一些类似事务的信息等);
目前在Body里面一般来说存放两种格式的数据,一个是串行化数据(Serialized Object);另外一个是XML文件,比如常见的SOAP的payload。在ESB中,有两个定义,一个是ESB-aware Message,我们上面所讲的Message就是ESB-aware Message,它是属于ESB内部的Message对象。另一个是ESB unaware Message。比如SOAPMessage,不能把该对象直接放到ESB容器中处理的,必须把它转换为Message对象才能在ESB内部流转。ESB内部所交流/传递的都是消息,可见这个消息格式在ESB中多么重要。
图7是根据本发明实施例的ESB容器接收到soap请求消息时的处理流程图。如图7所示,是ESB容器在接受到用户请求消息时的处理流程。在ESB内部,要么是一个service,要么是一个message。service就是业务流程,实现了具体的业务逻辑。而message就是service加工的对象,是携带信息的载体,各个流程内部或者流程之间必须通过message来进行信息的交换。该流程的步骤如下:
步骤S702:用户根据暴露的web服务地址,生成请求消息,并把该请求消息发送到指定的ESB容器;
步骤S704-S710:ESB容器接受到用户的请求消息后,对其进行适配。把SoapMessage中的相应模块转换为Message对象中的相应模块。最后再判断是否携带附件,若有携带,则把它转换为Message对象中的字节数组往下传递,而不用开启文件输入输出流存储到磁盘上;
步骤S712:ESB容器对Message对象处理完毕之后,返回给用户响应消息;
图8是根据本发明实施例的ESB容器适配器处理接收的ESBMessage对象时的处理流程图。如图5所示,是整合ESB系统时,消息适配器模块的处理流程。当message对象在多台ESB容器上流转时,不需要把message对象转换为SoapMessage对象,即可进行信息交换。相比之前的ESB系统省略了消息格式适配过程,从而大大提高了系统性能。当真正需要访问标准的第三方web服务时,再通过消息适配器模块进行适配。适配步骤如下:
步骤S802:还原请求消息的body,从message对象中把body部分提取出来,放到SoapMessage请求消息的对应位置上。
步骤S804:判断message对象中是否携带有附件信息,若无不做任何处理;若有,把该附件信息提取出来,依次放到请求消息body之后,用相应的分隔符分开,并修改头部信息。
步骤S806:把适配好的SoapMessage消息发送到第三方web服务上。
步骤S808:获取第三方web服务的返回消息,根据流程处理过程,ESB容器再把返回消息返回给用户。
在另外一个实施例中,还提供了一种软件,该软件用于执行上述实施例中描述的技术方案。
在另外一个实施例中,还提供了一种存储介质,该存储介质中存储有上述软件,该存储介质包括但不限于光盘、软盘、硬盘、可擦写存储器等。
通过本发明的上述各实施例所描述的技术方案,不仅能够让附件在ESB企业服务总线流转,而且也能够在服务之间以及各个应用之间进行传递。从而使得ESB容器不仅能够处理简单的SOAP请求消息,而且也能够处理携带附件的SOAP请求消息。从而,使ESB企业服务总线的应用范围更加广泛。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。