WebService 发布
WebService,主要实现两个服务之间接口的调用,包括 V 服务之间调用 WebService、 V 服务调用第三方WebService服务。
1. 功能介绍
WebService,主要实现两个服务之间接口的调用,包括 V 服务之间调用 WebService 、 V 服务调用第三方WebService服务。
在配置中心中,WebService 的相关菜单默认不开放,用户可以按需设置 WS服务管理、WS服务调用 菜单,然后配置相关功能。
WS服务管理、WS服务调用 构件菜单,在
vbase_网络管理构件中,直接搜索添加待选菜单项。访问目录:配置中心 → 业务系统初始化配置 → 基础设置 → 待选数据 → 待选菜单项管理
访问目录:配置中心 → 业务系统初始化配置 → WebService → WS服务管理
(1)服务分组管理
在该菜单中,需要设置分组服务,不同的分组编码(唯一性)区别开不同的
wsdl服务地址。
(2)操作管理
- 所属服务:只读,显示当前操作方法所属服务名称;
- 操作编码:在所属服务中,要求唯一性;
- 操作名称:自定义;
- 构件编码:可以是自定义构件,也可以是vbase内置的构件;
- 构件方案编码:选择构件时,一并选择对应的构件方法即可;
- 描述:按需添加;
- 是否单值输出:默认不勾选,勾选后,在输出参数列表中,只能勾选一个参数。

(3)服务发布与取消
设置服务之后,需要发布服务,才产生对应的 wsdl 服务地址,并且被调用。
发布之后,将切换成【取消服务】,取消服务才可以进行修改操作。

(4)服务地址获取
发布后可以通过 服务地址/services 查看已发布 V WebService 列表,点击 wsdl 地址查看最终的服务地址。
① 查看 V WebService 列表

② 获取服务地址

访问目录:配置中心 → 业务系统初始化配置 → WebService → WS服务调用
注意
- 若构件方法,在【WS服务管理】中设置了操作服务,并且已发布,那么可以在同一个V服务或者不同的V服务打开【WS服务调用】菜单进行调用调试。
- WS服务调用,不是非必要操作。一般是通过开发系统,配置逻辑根据 wsdl 服务地址,调用不同服务的构件方法。
2. V 服务之间调用 WebService

下面,以 VBase 的内置构件方法 根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName) 作为例子,介绍 V 服务之间调用 WebService 的功能。
由于该 API 为 VBase 的内置构件方法,因此在系统 B 中只需设置该方法的 WS 服务管理地址即可,服务 A 便可根据 wsdl 的服务地址调用该 API 。
在 B 服务的在配置中心中,设置
根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName)构件方法服务操作,并且获取wsdl服务地址。注意
- 在实际项目中,【WS服务管理】菜单按需设置菜单目录,访问目录也不同。
- 在本文档中,【WS服务管理】菜单所在访问目录:配置中心 → 业务系统初始化配置 → WebService → WS服务管理。
具体配置,查看 1.3 WS服务管理 的具体配置。
获取该构件方法的 wsdl 服务地址:http://10.1.40.178:8084/services/train?wsdl。
在 A 服务的开发系统中,添加引用
vbase_ws_ap(vbase_网络服务api)、vbase_organization(VBase_组织机构API)。
vbase_ws_ap(vbase_网络服务api):用于调用 webservice 服务构件方法;vbase_organization(VBase_组织机构API):非必要,用于查看根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName)构件方法的相关参数。
实体 含义 callWebService(调用WebService)主要作为调用 webservice 服务 B 构件方法时,对应 wsdl和操作编码(方法编码)入参vParam(参数实体)主要作为调用 webservice 服务 B 构件方法时,对应构件方法的入参 result(返回结果)主要作为调用 webservice 服务 B 构件方法时,返回的 json结果accountEntity(账号数据)根据引用构件 vbase_organization(VBase_组织机构API)中 ,
对应根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName)构件方法的方法输出实体定义字段extraPropertys(附加属性)根据引用构件 vbase_organization(VBase_组织机构API)中 ,
对应根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName)构件方法的方法输出实体定义字段实体的字段,如下:
- callWebService(调用WebService)
- vParam(参数实体)
- result(返回结果)
- accountEntity(账号数据)
- extraPropertys(附加属性)
通过输入账号和相关参数,调用 WebService 服务 B 中设置
wsdl服务地址的构件方法根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName)。根据账号,查找服务 B 中对应账号的账号详细信息,并且返回到对应的窗体实体,显示在列表中。
(1)清除界面实体中的数据【所有实体】
(2)新增实体记录【WebService】
operCode:对应服务 B 中设置wsdl服务地址的构件方法根据账号名称获取账号信息API(API_Biz_OrgQueryAccountByName)的操作编码 ;wsdl:对应服务 B 中的wsdl服务地址。
(3)新增实体记录【vParam】
paramName(参数名):参数名,根据服务提供的入参顺序:arg0、arg1……argN(参数名目前只支持arg0、arg1….编写);paramType(对应操作方法参数类型):对应操作方法参数类型;paramValue(对应操作方法参数值):对应操作方法参数值。注意
arg0、arg1…代表各个输入参数的参数实体vParam的新增顺序与所发布的方法的配置页面上的输入参数次序和个数保持一致。- 各类型参数类型
文本 char日期时间 longDate日期 date长文本 text布尔 boolean小数 number整数 integer实体 entity在本示例中,需要根据输入账号(默认值
admin),查询对应账号信息(前提是发布方法所在服务有该账号,若没有,应先创建该账号),paramValue对应指文本框值(本案例中,默认值admin),paramType对应参数值的类型(char),paramKey对应一个参数(arg0)。
vParam实体记录数和实体各个字段的值,根据发布方法的输入参数决定的(vParam实体可以定义为界面实体或者方法实体等类型)。根据发布的
OrgQueryAccountByName构件方法的输入参数只有accountNames一个,因此仅需要创建一条vParams实体记录。若是所发布的方法有两个或两个以上输入参数,则需要创建多条vParam实体记录 。注意:若所要调用的方法的输入参数类型为实体时,需要将实体转换为
json格式后才能赋给paramValue。下面简单介绍,假设为实体类型的配置逻辑:首先,需要执行
vbase_ws_api构件的VWS_EntityJsonToDataViewJson方法将实体转为json。
VWS_EntityJsonToDataViewJson方法有个输入参数entityJson,需要传入json格式的数据,调用函数VConvertEntityToJson先将作为入参实体转换为json格式。同时,需要创建一个文本格式的方法变量用于接收
VWS_EntityJsonToDataViewJson方法的返回值,假设接收参数为param1。
最后,将得到的
json数据赋给参数实vParam的paramValue字段,paramType则要填写entity类型,而其他的操作与非实体类型的参数一致。
(4)执行方法_VWS_CallWebService(调用webservice服务构件方法)
根据被调用方法的
wsdl服务地址、操作编码,以及方法输入对应的参数实体,调用 webservice 服务构件方法,使用result实体接收返回Result。
resultKey:返回数据中key;resultValue:返回数据中key对应的值。
(5)输出参数 Result 解析
调用 webService 发布的方法后,输出的数据被封装到
Result实体中,因此,需要将数据解析出来。
- 若所调用的方法的输出参数类型是非实体的,则可直接通过获取
Result实体的resultValue字段获取到对应的值;- 若是实体,实体记录会以
json的格式存于Result的resultValue字段中,因此需要通过 json 转实体函数VRestoreJsonToEntity进行解析。
VRestoreJsonToEntity函数需要传两个参数 "json内容" 和 "实体名称" 。而result实体的resultKey字段对应着实体名称,resultValue字段对应着内容。注意:作为存放解析出来的实体名称一定要和返回的
resultKey的值一致,字段也需和resultValue对应内容的参数一致。在本示例中,因为返回的参数类型都为实体,可以用 foreach 进行遍历接收的实体
result解析得到所有的数据 。若返回的参数包含有非实体类型的,要注意要进行过滤,实体类型的才需要解析,可以用参数值
resultValue作为判断条件去区分。① 定义 Foreach
② 执行函数/表达式【VRestoreJsonToEntity】
3. V 服务调用第三方 WebService

调用第三方 WebService,可以通过二次开发代码级调用 API 执行。
3.1 引入WS构件包
构件编码: com.toone.v3.platform-34vbase-ws-api;
版本:取正式库最新版本即可。
3.2 调用语句
VWSServiceCall vWSServiceCall = VWSServiceFactory.getVWSServiceCall();
String jsonString = (String)vWSServiceCall.invoke(false, wsdl, operation, operParams);
即可获取到第三方 WebService 服务返回数据。
3.3 方法与参数描述
Object invoke(boolean isFile, String wsdl, String operCode, List<Map> rusetParams)
(1) 输入参数
IsFile:布尔类型,执行 webservice 有两种方式调用,一种是文件、一种是 wsdl 地址,其实内容是一样,只是执行方法不一样,文件方式调用则参数值为 true;否则 false。
Wsdl:wsdl地址,如果 isFile=true 则写文件地址,否则填写第三方 ws 地址。
operCode:服务操作方法的编码。
operParams:参数集合,List<Map> 对象。
(2)数据返回
返回对象为 Object 类型。
























