1、 业务场景
EAS的WebService历史悠久,随着架构的不断演进,产生了许多问题,常见的有部署问题找不到对应的facade元数据,调用报错RMIException,找不到会话让重新登陆等。
但是只要规范的开发部署就可以避免上述问题。本文章会以一个名为Hello的facade元数据为样例来开展讲述
目录如下:
1. 在EAS中新建发布WebService
2. 在EAS中对新建的WebService部署教程
3. 相关配置文件的检查-配置
4. EAS-WebService的调用原理图解
5. 如何用SOAPUI进行WebService调用测试
6. 如何用WSDL生成Java代码调用测试
2、 实践思路
(1) 新建发布WebService
1. 新建facade元数据,工具:BOS工具(BIM),解决方案
2. 在eas.custom包下新建Hello - facade元数据
3. 发布facade元数据,发布WebService:
4. 发布facade元数据界面:注意勾选【生成配置信息】选项,以及注意自己的发布路径,方便后续查找
5. 发布webservice界面:注意勾选【追加到配置文件】选项
6. 全部发布之后,切换到Java视图,刷新解决方案工程,可以看到下面的几个新增的目录及文件。如下:
7.在HelloControllerBean中去实现具体的业务逻辑,样例如下:
(2) WebService部署
EAS服务器上进行WebService部署,遵守的规则是:wsdd文件放到web.war中;facade元数据以及java代码放到对应的元数据目录以及代码目录
1,部署wsdl
1)服务器上web.war的路径是:eas\server\deploy\eas.ear\web.war
2 ) 获取并修改web.war
4)用压缩软件打开web.war,把Hello.wsdl直接放到WEB-INF目录下:
5)配置server-config.wsdl文件(用压缩软件打开web.war,把WEB-INF\server-config.wsdl拖出来),打开Hello.wsd,复制service节点内容到server-config文件中。再把server-config.wsdl替换web.war中的server-config.wsdl
6)覆盖原有的server\deploy\eas.ear\web.war
2,部署facade元数据,参考知识贴:bos工具远程/本地部署(https://vip.kingdee.com/article/174121211427903232?productLineId=8&isKnowledge=2&lang=zh-CN)或者自己进行私包部署
(3) EAS服务端webservice配置文件检查修改(下面参数如果有,则不需要重复添加)
1. 编辑\server\profiles\server*\config\webservice.properties文件,另起一行,添加参数(server* 代表所有的实例):
isRomoteLocate=false
2. 编辑eas/server/deploy/eas.ear/web.war/WEB-INF/server-config.wsdd文件,新加参数<parameter name="scope" value="session"/>
-------以上步骤完成之后就可以进行webservice接口的调用代码编写--------
3、 详细设计
EAS-WebService调用图解
以一个EAS集群,包含3个实例为例子,其中三个实例的http端口分别是6888,6890,6892。网络代理端口是8080,当webservice客户端使用集群端口调用webservice接口服务时,正确的调用过程如下:
当webservice客户端 指定 实例端口调用webservice接口服务时,正确的调用过程如下(假设指定server3:6892):
4、 代码样例
使用SoapUI调试接口
(SoapUI使用教程详见: soapUI 简介、安装使用教程 )
1, 指定实例端口调试(这里我们使用server3:6892)
登录获取sessionId:
携带sessionId请求业务接口:
注意实际的接口xml不会包含<soapenv:Header>部分,需要自己手动复制进去:
<soapenv:Header>
<ns1:SessionId xmlns:ns1="http://login.webservice.bos.kingdee.com">
实际的sessionId
</ns1:SessionId>
</soapenv:Header>
-------------------------------------------------------------------------------------------------------------------------
2,使用集群端口进行接口调试:
登陆获取sessionId:
携带sessionId + cookie,请求业务接口,请注意下面Header中的key字段是 Cookie
-------------------------------------------------------------------------------------------------------------------------
Java代码调用WebService接口
1. 访问ormrpc/services/EASLogin.wsdl,ormrpc/services/WSHello.wsdl
2. 网页分别另存为wsdl文件
3. 新建Java工程,把两个wsdl文件放到工程目录下,分别右键>Web Services>Generate Client如下图所示:
把生成的代码移动到统一的包下:
新建client包,包含3个类
%2. HelloClient --- 客户端调用代码主逻辑
%2. LoginUtil --- 登陆参数常量类
%2. WSLoginResponse --- 登录请求返回值的简单包装
具体代码,及代码解释见附件UP00068160.rar,代码注释写的比较清楚了,大家可以把HelloClient中的生成的业务接口类换成自己的就可以用到自己的项目中了。
5、 注意事项
无
6、 补丁影响
无