发明内容
本发明实施例提供一种Java遗留***的服务封装方法及***,能够自动地完成Java遗留***的服务封装,操作简单,缩短将Java遗留***封装成Web服务并正常运行所需要的时间。
本发明实施例提供了一种Java遗留***的服务封装方法,包括:
获取Java遗留***的位置信息、服务封装所需被封装成网络服务的类和方法的信息、以及与所述类相关联的类的信息;
根据所述位置信息、以及所述类、与所述类相关联的类和方法的信息创建服务描述文件,并将所述服务描述文件和所述类以网络服务容器支持的格式打包生成网络服务包;
根据所述类、与所述类相关联的类和方法的信息创建访问所述网络服务包的客户端代理类,并用所述客户端代理类替换所述Java遗留***中对应的同名文件。
本发明实施例还提供了一种Java遗留***的服务封装***,包括:
封装管理模块,用于获取Java遗留***的位置信息、服务封装所需被封装成网络服务的类和方法的信息、以及与所述类相关联的类的信息;
服务封装模块,用于根据所述位置信息、以及所述类、与所述类相关联的类和方法的信息创建服务描述文件,并将所述服务描述文件和所述类以网络服务容器支持的格式打包生成网络服务包;
服务代理生成模块,用于根据所述类、与所述类相关联的类和方法的信息创建访问所述网络服务包的客户端代理类,并用所述客户端代理类替换所述Java遗留***中对应的同名文件。
由上述技术方案可知,本发明实施例只需要获取Java遗留***的位置信息和服务封装的相关信息,就可以自动完成Web服务的封装以及相应的访问Web服务的客户端的生成工作。本发明实施例的输出结果是被封装好的Web服务包和以原Java***形式存在的用于访问Web服务包的客户端部分,通过部署封装好的web服务包,并利用所生成的客户端部分替代原来的Java遗留***,即可完成Java遗留***的服务封装工作。本发明实施例所采用的上述新式的封装和创建Web服务的方法,操作简单,极大地方便了用户,缩短了将Java遗留***封装成Web服务并正常运行所需要的时间。
下面结合附图对本发明的具体实施例作进一步详细的说明。
具体实施方式
图1为本发明Java遗留***的服务封装方法的第一实施例的流程示意图,如图1所示,本实施例可以包括以下步骤:
步骤101、获取Java遗留***的位置信息、服务封装所需被封装成Web服务的类和方法的信息、以及与上述类相关联的类的信息;
步骤102、根据上述位置信息、以及上述类和方法的信息创建服务描述文件,并将上述服务描述文件和上述类以Web服务容器支持的格式打包生成Web服务包;
步骤103、根据上述类和方法的信息创建访问上述Web服务包的客户端代理类,并用上述客户端代理类替换上述Java遗留***中对应的同名文件。
本实施例中,只需要获取Java遗留***的位置信息和服务封装的相关信息,就可以自动完成Web服务的封装以及相应的访问Web服务的客户端的生成工作。本发明实施例的输出结果是被封装好的Web服务包和以原Java***形式存在的用于访问Web服务包的客户端部分,通过部署封装好的web服务包,并利用所生成的客户端部分替代原来的Java遗留***,即可完成Java遗留***的服务封装工作。本实施例所采用的上述新式的封装和创建Web服务的方法,操作简单,极大地方便了用户,同时缩短了将Java遗留***封装成Web服务并正常运行所需要的时间。
图2为本发明Java遗留***的服务封装方法的第二实施例的流程示意图,如图2所示,本实施例可以包括以下步骤:
步骤201、封装管理模块获取用户输入的Java遗留***的位置信息、服务封装所需被封装成Web服务的类和方法的信息、以及与上述类相关联的类的信息;
步骤202、服务封装模块根据封装管理模块所获取的上述位置信息、以及需要被封装成Web服务的类、与上述类相关联的类和方法的信息创建服务描述文件,并且把服务描述文件和要打包的类一起以Web服务容器支持的格式打包生成Web服务包;
步骤203、封装管理模块创建一份Java遗留***的拷贝,存到临时文件夹中,以确保本***所做改变不会影响原有***。
其中的创建拷贝的功能不只是简单地拷贝Java遗留***中的文件,对于Java遗留***中以“.class”后缀名命名的文件直接复制到临时文件夹的同名目录,对于Java遗留***中以jar包格式保存的字节码文件把jar包中的内容解压缩到临时文件夹;
步骤204、封装管理模块利用Java2WSDL工具生成Web服务包里每个类的WSDL文件;
步骤205、桩生成模块通过服务管理模块获取服务封装模块所生成的Web服务包的信息,并利用上述Web服务包的信息和Web服务包里的每个类的WSDL文件生成相应的桩文件;
步骤206、桩生成模块动态编译上述桩文件,并将编译后的字节码文件对应地***被封装成Web服务的那些类文件在Java遗留***中的位置;
步骤207、服务代理生成模块根据封装管理模块所获取的需要被封装成Web服务的类、与上述类相关联的类和方法的信息利用字节码技术创建访问上述Web服务包的客户端代理类,并利用新创建的同名Java类文件即客户端代理类替换Java遗留***中对应的Java类文件;
步骤208、封装管理模块将修改后的Java遗留***的拷贝按Java遗留***的格式重新格式化。
上述格式化是指将修改后的存有Java遗留***拷贝的临时文件夹中的内容组织成原来Java遗留***的格式,主要是将已经解压缩的部分重新压缩成Java的jar包格式。
本实施例的流程处理过后,会产生两个结果文件夹,其中一个保存着打包好的Web服务包,另一个生成的是访问这个Web服务包的客户端,这两部分中包括着原来Java遗留***中的全部功能逻辑,使得原有的Java遗留***在功能上没有改变,只是使用形式发生改变。
图3为本发明Java遗留***的服务封装方法的第三实施例的流程示意图,如图3所示,与上一实施例相比,本实施例中步骤207可以具体包括以下步骤:
步骤301、封装管理模块将需要被封装成Web服务的类、与上述类相关联的类和方法的信息传送给服务代理生成模块;
步骤302、服务代理生成模块分别创建需要被封装成Web服务的每个类的同名字节码文件;
步骤303、服务代理生成模块分别创建每个字节码文件中的需要被封装成Web服务的方法,方法名和参数类型与要封装成Web服务的类中的方法相一致;
步骤304、服务代理生成模块分别创建每个方法的方法体,以供利用相应的桩文件访问生成的Web服务包,此方法实现将获得的参数传给Web服务包中的相应服务,并接受Web服务包返回的结果作为返回值;
步骤305、服务代理生成模块利用生成的字节码文件覆盖临时文件夹中的Java遗留***的同名文件。
例如:在原有的遗留***中有类A调用了类B中的方法实现中,本实施例可以利用字节码技术生成一个B1类,这个类B1与类B具有相同的名字,而且B1类也拥有被A使用到的那个方法,并且方法名、参数和返回值皆与类B中的方法一样,只不过类B1中的方法实现的是将接收到的参数传给被打包成服务的类B,并将类B处理后的结果作为返回值返回。这样,在遗留***中,类A调用的是类B,被此发明中的***处理后,类A调用的是类B1,而类B1利用Web服务来与类B通信,一次调用变成了两次调用,而这些,对于类A透明,也就是说并不会影响Java遗留***的原有功能逻辑,而又实现了从本地调用到Web服务调用的转变。
可替换地,将上述本发明Java遗留***的服务封装方法的第二实施例和第三实施例中有关桩的部分替换成所创建的一个服务端代理类,即在服务端再增加一个代理。具体来说,步骤207中所创建的代理类包括客户端和服务端两部分,客户端不再利用桩,而是采用另一种客户端的形式,编写的代码直接与服务端的代理通信,服务端的代理负责信息格式转换,它作为服务的一部分,与真正客户端要调用的程序相交互。
图4为本发明Java遗留***的服务封装***的第一实施例的结构示意图,如图4所示,本实施例可以包括封装管理模块41、服务封装模块42和服务代理生成模块43。封装管理模块41用于获取Java遗留***的位置信息、服务封装所需被封装成网络服务的类和方法的信息、以及与所述类相关联的类的信息;服务封装模块42用于根据所述位置信息、以及所述类、与所述类相关联的类和方法的信息创建服务描述文件,并将所述服务描述文件和所述类以网络服务容器支持的格式打包生成网络服务包;服务代理生成模块43用于根据所述类、与所述类相关联的类和方法的信息创建访问所述网络服务包的客户端代理类,并用所述客户端代理类替换所述Java遗留***中对应的同名文件。
本实施例中,只需要封装管理模块获取Java遗留***的位置信息和服务封装的相关信息,服务封装模块就可以自动完成Web服务的封装以及服务代理生成模块就可以自动完成相应的访问Web服务的客户端的生成工作。本发明实施例的输出结果是被封装好的Web服务包和以原Java***形式存在的用于访问Web服务包的客户端部分,通过部署封装好的web服务包,并利用所生成的客户端部分替代原来的Java遗留***,即可完成Java遗留***的服务封装工作,操作简单,极大地方便了用户,缩短了将Java遗留***封装成Web服务并正常运行所需要的时间。
图5为本发明Java遗留***的服务封装***的第二实施例的结构示意图,如图5所示,与上一实施例相比,本实施例还可以包括桩生成模块44,用于根据所述网络服务包生成所述类的网络服务描述语言文件,以及根据所述网络服务包的信息和所述网络服务描述语言文件生成所述类的桩文件,并将所述桩文件***到所述Java遗留***中的对应位置。桩生成模块44可以通过封装管理模块41获取服务封装模块42所生成的网络服务包的信息。
可替换地,本实施例也可以不包括桩生成模块44,代替他的则是本实施例中服务代理生成模块43还可以用于根据所述类、与所述类相关联的类和方法的信息创建访问所述网络服务包的服务端代理类。服务代理生成模块43所创建的代理类包括客户端和服务端两部分,客户端不再利用桩,而是采用另一种客户端的形式,编写的代码直接与服务端的代理通信,服务端的代理负责信息格式转换,它作为服务的一部分,与真正客户端要调用的程序相交互。
最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。