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
类型。