本文的主要目标是,结合 IBM i 支持的 Web 服务组件,指
导读者如何编写基于 Android 的 Web 服务客户端程序,调用 IBM i 服务器
端的 Web 服务。
作为 Internet 异构环境下的互操作技术,Web 服务被广泛应用。由于 Web 服务具有跨语言、跨平台等特点,我们可以通过 Android 等智能设备,以 Web 服务的方式重用 IBM i 服务器端的 RPG、COBOL 等业务程序。本文的主要目标是,结合 IBM i 支持的 Web 服务组件,指导读者如何编写基于 Android 的 Web 服务客户端程序,调用 IBM i 服务器端的 Web 服务。
从结构上,本文主要分为 3 部分。第 1 部分主要介绍 IBM i 服务器端对于 Web 服务的支持。第 2 部分是主体,集中介绍如何在 Android 平台上编写 Web 服务客户端程序,调用基于 IBM i 的 Web 服务。最后一部分是总结。
ConvertTemp 为贯穿本文的 Web 服务样例,对应的是一个华氏向摄氏转换的温度转换器程序。RPGINT 是一个用户自定义的简单 Web 服务,对应的逻辑是回显输入的数字。
IBM i 服务器端针对 Web 服务的支持
作为支持 Web 服务的 IBM i 服务器端组件,IBM Integrated Web Service Server for i 简化了基于 IBM i 的 Web 服务开发流程。一方面,IBM Integrated Web Service Server for i 集成了 ">Apache Axis2 框架,可以轻松创建 Web 服务。另一方面,IBM Integrated Web Service Server for i 本身也是一个应用服务器,为 Web 服务提供运行环境。因此,不需要任何额外的编码,Integrated Web Service Server for i 就可以将已有的 RPG 等 IBM i 应用转换成 Web Service。
图 1 所示的是基于 Android 的客户端应用程序,调用 IBM Integrated Web Services Server for i 发布的 Web Service,从而成功复用了基于 IBM i 平台的 RPG/COBOL 程序。
图 1. Android 客户端调用基于 IBM i 的 Web Service 体系结构图
具体的 Web Service 调用请求步骤如下:
作为服务请求者(Service Requestor),基于 Android 平台的 Web Service 客户端程序,调用 Web Service 框架(ksoap-android),发送基于 SOAP 的 Web Service 调用请求; 作为服务
提供商(Service Provider),IBM Integrated Web Services Server 接收到 Web Service 调用请求,并调用相应的 Web Service; Web Service 通过 Web Service 框架(Axis2),利用 IBM Java Toolbox for i 提供的 PCB(Program Call Bean)相关接口,调用 RPG/COBOL 程序,完成业务逻辑; RPG/COBOL 程序将结果返回 Web Service,并最终发送给基于 Android 的 Web Service 客户端调用程序。
作为面向 IBM i 中间件的集成 Web 控制台,IBM Web Administration for i 支持以 Web 向导的方式,利用 IBM Integrated Web Service Server for i 服务器创建、部署、运行 Web 服务。
由于本文的重点是指导读者如何编写基于 Android 的 Web 服务客户端程序。为简单起见,我们这里仅仅创建一个 IBM Integrated Web Service Server for i 服务器实例。默认情况下,IBM Web Administration for i 的 Create Web Services Server 向导在创建服务器实例的同时,会同时创建并部署一个 Web 服务样例,运行在该服务器上。创建的过程如下:
点击 Create Web Services Server 链接,进入向导的第 1 步,指定服务器实例的名称与描述。
然后点击 Next 按钮,进入向导的第 2 步。 指定服务器实例对应的 IBM i 作业用户。这里有 3 种选择,使用默认 QWSERVICE 用户、选择已有的 IBM i 用户、创建并使用
新的 IBM i 用户。我们选择第 1 个选项,然后点击 Next 按钮,进入向导的第 3 步,也是最后一步—— Summary 页面。 点击 Summary 页面的 Services 选项卡,我们查看 Web 服务样例—— ConvertTemp,以及 ConvertTemp 对应的 Web Service 描述文件—— WSDL。
待 IBM Integrated Web Service Server for i 服务器创建完毕以后,我们可以通过 Manage Deployed Services 链接,查看 Web 服务样例 ConvertTemp 的详细信息以及运行状态,如图 2 所示:
图 2. 样例 Web 服务 ConvertTemp 的状态
通过点击 Properties 按钮 , 我们可以查看 ConvertTemp 对应的描述信息,如图 3 所示。可以看出,ConvertTemp 服务对应的是 IBM i 程序 QIWSSAMPLE.SRVPGM。
图 3. 样例 Web 服务 ConvertTemp 的属性信息
为保证样例 Web 服务 ConvertTemp 能正常工作,我们可以选择点击 Test Service 按钮,测试 ConvertTemp 是否能被正常调用。我们看到,ConvertTemp 是一个将华氏温度向摄氏温度转换的 Web 服务程序。当我们输入华氏温度为 40,向服务器发送 SOAP 请求,调用 ConvertTemp。通过查看服务器端返回的 SOAP 响应消息,我们可以看到,返回的摄氏温度值为 4.44,如图 4 所示。
图 4. 测试样例 Web 服务 ConvertTemp
至此,从 IBM i 服务器端的角度,我们利用 IBM Integrated Web Service Server for i 服务器以及 IBM Web Administration for i 中间件集成 Web 控制台,完整创建、部署、并发布了一个基于 IBM i 的 Web 服务。
接下来,我们从 Android 的角度,介绍如何编写 Web 服务客户端程序,调用基于 IBM i 的 Web 服务。