CN103577380B - 一种动态路由服务的自动生成方法 - Google Patents
一种动态路由服务的自动生成方法 Download PDFInfo
- Publication number
- CN103577380B CN103577380B CN201310507344.7A CN201310507344A CN103577380B CN 103577380 B CN103577380 B CN 103577380B CN 201310507344 A CN201310507344 A CN 201310507344A CN 103577380 B CN103577380 B CN 103577380B
- Authority
- CN
- China
- Prior art keywords
- service
- code
- route
- client
- wsdl document
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明提供一种动态路由服务的自动生成方法,包括:获取源服务端的服务定义WEB服务描述语言WSDL文件;根据所述WSDL文件生成源WEB服务的客户端代码和服务端代码;编译上述代码,构建路由服务。通过本发明提供的一种动态路由服务的自动生成方法,用于提高开发效率并解决现有技术开发路由服务中硬编码、周期长、成本高、易出错、不可复用的问题。
Description
技术领域
本发明涉及计算机领域,特别是涉及一种面向服务的体系结构(Service-Oriented Architecture,SOA)实施过程中动态路由服务的自动生成方法。
背景技术
路由服务,是一种通过解析SOAP(Simple Object Access Protocol,简单对象访问协议)消息中的指定的信息,进而动态的将SOAP消息分发给不同源WEB服务的一种WEB服务,原理如图1所示。解析的SOAP消息一般是通过事先约定,在某一个字段中加入路由信息,而路由服务则根据这个信息检索路由信息表,获取源WEB服务地址,进而调用源服务。路由服务的本质是WEB服务代理,只不过是代理了多个接口相同的WEB服务。
目前开发这种类型的服务是通过人力开发完成。在服务定义阶段,约定服务路由字段,开发阶段根据约定将该逻辑硬编码到服务代码中,开发使用的技术有CXF、ORACLE的BEPL、AXSI2等,其缺点很明显:
硬编码,路由字段变更意味着修改代码、编译、部署等一系列过程;
开发周期长,人力开发;
人力成本高,学习开发使用的技术、框架需要时间;
易出错,代码不可复用。
所以,有必要提出一种动态路由服务的自动生成方法来优化这一过程,提高生产效率。
发明内容
本发明的目的在于提供一种动态路由服务的自动生成方法,用于提高开发效率并解决现有技术开发路由服务中硬编码、周期长、成本高、易出错、不可复用的问题。
为了解决以上技术问题,本发明提供一种动态路由服务的自动生成方法,包括:获取源服务端的服务定义WEB服务描述语言WSDL文件;根据所述WSDL文件生成源WEB服务的客户端代码和服务端代码;编译上述代码,构建路由服务。
进一步地,外部程序通过指定服务定义WSDL文件上传至程序的方式获取源服务端的服务定义WSDL文件。
进一步地,通过调用JAX-WS服务代码生成工具,根据所述WSDL文件生成源WEB服务的客户端代码和服务端代码。
进一步地,通过调用JAX-WS服务代码生成工具,根据所述WSDL文件生成源WEB服务的客户端代码和服务端代码,具体包括:
调用JAX-WS服务代码生成工具,根据所述WSDL文件生成源WEB服务的客户端代码,该客户端代码包括简单对象访问协议SOAP消息的封装类,服务接口以及客户端工厂类;
利用客户端代码生成用于发布代理服务的服务端代码,具体方法如下:调用客户端代码中的服务接口,通过复用动态路由服务公用父类、获取反射路由字段及使用缓存来生成服务端代码。
进一步地,通过调用ANT工具编译上述代码,构建路由服务。
进一步地,所述方法进一步包括:在根据所述WSDL文件生成源WEB服务的客户端代码和服务端代码之前,先配置代理服务构建环境。
进一步地,所述方法进一步包括:部署并发布构建路由服务,通过调用ANT工具将构建好的路由服务部署至J2EE容器。
与现有传统服务代理(封装)开发相比,本发明提供的一种动态路由服务的自动生成方法,只需要提供WEB服务定义信息即可自动生成代理服务,不再需要人力开发,不会出错;生成的WEB服务符合J2EE5规范中的JAX-WS2.0规范,服务总线的选择更加多样,J2EE容器均可部署;通过一个动态路由服务公用父类解决了代码复用问题;利用反射获取路由字段,避免了硬编码;使用缓存避免了频繁访问数据库带来的性能低下。动态配置路由字段和路由表信息,可以在服务运行是实时添加、修改、删除路由信息,只要服务定义(WSDL文件)没有发生变化,就不需要重新生成路由服务,彻底避免了硬编码带来的项目编译重新部署的过程,避免了人工出错,效率高;自动部署发布服务,免去部署的时间,即时获取代理路由WEB服务的WSDL地址,即可使用。
附图说明
此处所说明的附图用来提供对本发明的进一步理解,构成本发明的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明提供的一种路由服务原理图。
图2是本发明提供一种动态路由服务的自动生成方法的流程图。
图3是本发明在生成路由服务前环境配置生成的目录结构与文件树。
图4是本发明提供的动态路由原理图。
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。
在本发明中,动态路由服务自动生成方法涉及几个部分:J2EE容器、ANT工具、JAX-WS服务代码生成工具。其中:
J2EE容器,包括JBOSS,Weblogic,GlassFish等,这些均可以作为服务总线;另外,由于生成代理服务是JAX-WS2.0,所以要求支持的J2EE版本5以上。
ANT工具是由Apache软件基金会所提供,是一个将软件编译、测试、部署等步骤联系在一起加以自动化的一个工具,大多用于Java环境中的软件开发。在本发明中,该工具用来编译和构建代理服务。
JAX-WS服务代码生成工具,包括JAX-WS RI的wsimport、CXF的wsdl2java等。
如图2所示,本发明提供的一种动态路由服务的自动生成方法,包括:
步骤1:获取源服务端的服务定义WSDL(WEB服务描述语言)文件。其中,源服务端的服务定义WSDL文件通过外部程序在指定服务定义WSDL文件,上传至程序的方式获取。
步骤2:配置路由服务构建环境。在该步骤中,主要用来生成代理服务编译和构建所需要的配置文件以及工程目录,具体目录结构与文件见图3。
步骤3:根据所述WSDL文件生成源WEB服务的客户端代码和服务端代码;具体的实现方法如下:
生成调用源WEB服务的客户端代码。调用JAX-WS服务代码生成工具,根据所述WSDL文件生成源WEB服务的客户端代码,该客户端代码包括SOAP(Simple Object AccessProtocol简单对象访问协议)消息的封装类,服务接口以及客户端工厂类;
生成用于发布代理服务的服务端代码。调用客户端代码中的服务接口,通过复用动态路由服务公用父类、获取反射路由字段及使用缓存来生成服务端代码。具体说明如下:
动态路由服务公用父类,该类包含:
a1、检索路由表(最基本的路由表由服务标识、路由CODE、WSDL地址组成)。该功能获取当前访问的服务路由CODE对应的WSDL地址。通过服务标识和路由CODE从数据库中检索出唯一的值。
b1、查找服务指定的路由字段。从数据库中查询当前访问服务的路由字段。
c1、通过JAVA反射遍历SOAP请求,通过比对XmlElement标注来获取SOAP请求中路由字段对象,进而通过Field对象的get方法获取该字段的值。
动态路由服务子类,该类继承动态路由服务公用父类,并且实现步骤3中生成的服务接口。如下:
a2、定义类所在的包(例如:基础包.服务英文名称(com.base.ws.srvname)),以及通过import关键字引入需要用到的包、类或接口等(包括:步骤3生成的客户端包、ejb的标注(javax.ejb.Remote等)、jws的标注(javax.jws.WebMethod等));
b2、生成类签名,包括定义类名(例如:服务英文名称ESBProxy(srvnameESBProxy))、添加ejb标注(例如:@Remote等ejb标注)、添加jws标注(例如@WebService等)、通过implements关键字实现步骤3中生成的服务接口;
c2、定义类成员属性,用来缓存路由表和路由属性;
d2、实现步骤3中生成的服务接口的webservice方法,方法签名直接沿用接口的方法签名。方法实现复用公用父类提供的方法(首先通过方法b1获取该服务指定的路由字段并做缓存,第二次直接使用缓存字段;然后通过方法c1获取请求对象的路由字段值;最后使用方法a1获取路由字段值对应的WSDL地址)获取路由字段值对应的WSDL地址,将WSDL地址传入客户端调用对应的源服务。
步骤4:编译上述代码,构建路由服务。具体的实现方法如下:调用ANT工具编译上述代码,构建路由服务。
步骤5:部署并发布构建路由服务。调用ANT工具将构建好的构建路由服务部署至J2EE容器,发布构建路由服务。
动态路由原理如图4所示,子类继承父类a1、b1和c1三个方法,并且自建路由字段与路由表缓存。当请求该服务的时候,子类首先查找路由字段是否有缓存,没有就调用父类b1方法获取,并缓存;之后调用父类c1方法获取路由字段值;第三,通过路由字段值查找路由表缓存,没有就调用父类a1方法获取WSDL地址,并做缓存;最后通过目标WSDL地址调用源服务,获取响应后返回,一次调用结束。
上述说明示出并描述了本发明的一个优选实施例,但如前所述,应当理解本发明并非局限于本文所披露的形式,不应看作是对其他实施例的排除,而可用于各种其他组合、修改和环境,并能够在本文所述发明构想范围内,通过上述教导或相关领域的技术或知识进行改动。而本领域人员所进行的改动和变化不脱离本发明的精神和范围,则都应在本发明所附权利要求的保护范围内。
Claims (5)
1.一种动态路由服务的自动生成方法,其特征在于,包括:获取源服务端的服务定义WEB服务描述语言WSDL文件;根据所述WSDL文件生成源WEB服务的客户端代码和服务端代码;编译上述代码,构建路由服务;
通过调用JAX-WS服务代码生成工具,根据所述WSDL文件生成源WEB服务的客户端代码和服务端代码,具体包括:
调用JAX-WS服务代码生成工具,根据所述WSDL文件生成源WEB服务的客户端代码,该客户端代码包括简单对象访问协议SOAP消息的封装类,服务接口以及客户端工厂类;
利用客户端代码生成用于发布代理服务的服务端代码,具体方法如下:调用客户端代码中的服务接口,通过复用动态路由服务公用父类、获取反射路由字段及使用缓存来生成服务端代码。
2.如权利要求1所述的方法,其特征在于,外部程序通过指定服务定义WSDL文件上传至该外部程序的方式获取源服务端的服务定义WSDL文件。
3.如权利要求1所述的方法,其特征在于,通过调用ANT工具编译上述代码,构建路由服务。
4.如权利要求1所述的方法,其特征在于,所述方法进一步包括:在根据所述WSDL文件生成源WEB服务的客户端代码和服务端代码之前,先配置代理服务构建环境。
5.如权利要求1所述的方法,其特征在于,所述方法进一步包括:部署并发布构建路由服务,通过调用ANT工具将构建好的路由服务部署至J2EE容器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310507344.7A CN103577380B (zh) | 2013-10-24 | 2013-10-24 | 一种动态路由服务的自动生成方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310507344.7A CN103577380B (zh) | 2013-10-24 | 2013-10-24 | 一种动态路由服务的自动生成方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN103577380A CN103577380A (zh) | 2014-02-12 |
CN103577380B true CN103577380B (zh) | 2017-06-13 |
Family
ID=50049191
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310507344.7A Active CN103577380B (zh) | 2013-10-24 | 2013-10-24 | 一种动态路由服务的自动生成方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103577380B (zh) |
Families Citing this family (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107171959B (zh) * | 2017-04-20 | 2020-06-19 | 深圳中兴网信科技有限公司 | 基于soa的动态路由方法及动态路由系统 |
CN108932130B (zh) * | 2018-06-29 | 2022-02-22 | 深圳市元征科技股份有限公司 | 一种实现服务器功能调用的代码生成方法及装置 |
CN111694613B (zh) * | 2020-05-29 | 2023-07-25 | 平安科技(深圳)有限公司 | 应用程序模块间的解耦方法、电子装置及存储介质 |
CN112416621A (zh) * | 2020-11-24 | 2021-02-26 | 武汉锂钠氪锶科技有限公司 | 一种基于Web技术管控系统资源的方法及系统 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464724A (zh) * | 2002-06-14 | 2003-12-31 | 田种楠 | 一种使用动态传输网络以传输信息至远端的方法 |
CN101938528A (zh) * | 2010-08-12 | 2011-01-05 | 漳州市顺和达软件有限公司 | 动态ip固化解析方法及系统 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7386629B2 (en) * | 2003-06-30 | 2008-06-10 | Intel Corporation | System and method for synchronous configuration of DHCP server and router interfaces |
US20060089965A1 (en) * | 2004-10-26 | 2006-04-27 | International Business Machines Corporation | Dynamic linkage of an application server and a Web server |
-
2013
- 2013-10-24 CN CN201310507344.7A patent/CN103577380B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464724A (zh) * | 2002-06-14 | 2003-12-31 | 田种楠 | 一种使用动态传输网络以传输信息至远端的方法 |
CN101938528A (zh) * | 2010-08-12 | 2011-01-05 | 漳州市顺和达软件有限公司 | 动态ip固化解析方法及系统 |
Non-Patent Citations (1)
Title |
---|
"基于OPC-XML规范的DVR网络模型";杨辉;《兵工自动化》;20070731;第26卷(第7期);第36页右栏第3节至第37页第5节 * |
Also Published As
Publication number | Publication date |
---|---|
CN103577380A (zh) | 2014-02-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108809972B (zh) | 基于开源生态系统的物联网综合实验及应用开发平台 | |
CN101127655B (zh) | 集成现有基于万维网的系统的方法和系统 | |
CN103577380B (zh) | 一种动态路由服务的自动生成方法 | |
CN105138448A (zh) | 一种在前端测试页面的方法和装置 | |
CN103164249A (zh) | 用于脚本语言编译器的扩展机制 | |
CN102426519A (zh) | 基于关联数据的bpel模板和服务的复用方法及其系统 | |
CN102368217A (zh) | 一种元数据驱动的rest风格应用开发方法与系统 | |
CN105278946A (zh) | 一种RESTful API可视化方法 | |
CN103581310B (zh) | 一种web服务代理的自动生成方法 | |
CN104461531A (zh) | 一种报表系统自定义函数的实现方法 | |
CN103186376A (zh) | 一种用于建立或更新软件开发环境的方法、装置和设备 | |
Moradi et al. | Caasset: A framework for model-driven development of context as a service | |
CN109116828A (zh) | 一种控制器中模型代码配置方法和装置 | |
CN104361040A (zh) | 一种定制查询的方法及装置 | |
Martinez et al. | Recovering sequence diagrams from object-oriented code: An ADM approach | |
Biehl et al. | Model-based service discovery and orchestration for OSLC services in tool chains | |
KR20060045085A (ko) | OSGi 서비스 플랫폼 기반의 스텁 번들 생성 방법 | |
CN115113869A (zh) | 基于浏览器的在线网页开发方法及装置 | |
Song et al. | Implementation on network teaching system based on Java EE architecture | |
KR100463837B1 (ko) | 엔터프라이즈 빈 추출 장치 및 방법 | |
CN104239068A (zh) | 多维度语义web 服务开发方法 | |
Webster et al. | Interface refactoring in performance-constrained web services | |
Smythe | Initial Investigations into Interoperability Testing of Web Services from their Specification Using the Unified Modelling | |
Kövesdán et al. | Modeling Cloud Messaging with a Domain-Specific Modeling Language. | |
CN115297002B (zh) | 一种配网终端点号生成方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 518057, Guangdong Province, Nanshan District hi tech Zone, North Road, Lang Lang, No. 13 Thunis building, C,, C302 Applicant after: Shenzhen travel Polytron Technologies Inc Address before: 518057, Guangdong Province, Nanshan District hi tech Zone, North Road, Lang Lang, No. 13 Thunis building, C,, C302 Applicant before: Shenzhen Vispractice Technology Corporation |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |