Webservice开发指南版权声明本书著作权属于金蝶软件(中国)有限公司所有,在未经本公司许可的情况下,任何单位或个人不得以任何方式对本书的部分或全部内容擅自进行增删,改编,节录,翻译,翻印,改写。
金蝶软件(中国)有限公司2015年8月BOSWebService1.1.BOSWebService原理 (4)1.2.发布WebService的约束 (5)1.3.BOSWebService发布 (5)1.3.1.发布流程 (5)1.3.2.发布WebService (5)1.3.3.编辑WebService配置文件 (6)1.4.BOSWebService部署 (7)1.4.1.建立web工程.................................... 错误!未定义书签。
1.4.2.部署发布文件 (7)1.4.3.测试是否正确 (8)1.4.4.Web工程目录及文件截图 (8)1.5.客户端代码 (9)1.5.1.获取wsdl服务描述文件 (9)1.5.2.下载工具 (10)1.5.3.建立一个新工程 (10)1.5.4.使用java客户端 (13)1.5.5.importVoucher(凭证引入 (14)1.6.BOS webservice 安全性 (15)1.6.1.BOS webservice 安全性概述 (15)1.6.2.不启用安全性 (15)1.6.3.启用安全性 (15)1.6.4.如何安全性启用 (16)1.7.EASLogin 登陆webservice 说明 (16)1.7.1.EASLogin 接口说明 (16)1.7.2.EASLogin 异常说明 (17)1.7.3.EASLogin 和前面版本的差别 (18)1.8.webservice 异常查看 (18)2.WebService 客户端开发指南 (19)2.1.前提条件 (19)2.2.获取WSDL文件 (19)2.3.生成客户端 (20)2.3.1.生成Java客户端 (20)2.3.2.建立一个新工程 (20)2.3.3.将获取到的WSDL文件拷贝到工程的根目录下: (21)2.3.4.生成客户端 (21)2.4.使用java客户端 (25)2.5.生成C# 客户端 (25)2.5.1.使用命令行 (25)2.5.2.运行命令生成客户端 (26)2.5.3.使用客户端代码 (27)3.webservice FAQ (29)3.1.在EAS 上如何发布一个webservice ? (29)3.2.如何调用一个 webservice? (29)3.3.有哪些工具能够简单的测试 webservice? (29)3.4.EASLogin 服务登陆如何判断失败 (29)3.5.调用webservice时报 com.kingdee.bos.IllegalSessionStateException: Pleaselogin first 异常? (29)3.6.EAS6.0调用webservice时报没有 WSConfig.getSrvURL() 方法。
(30)3.7.调用webservice时报.SocketTimeoutException: Read timed out 异常30BOSWebService1.1. BOSWebService原理Webservice 主要由SOAP,WSDL, 以及UDDI 等几块技术组成,以XML格式进行数据的传输。
是建立可互操作的分布式应用程序的新平台Webservice的一个最基本的目的就是提供在各个不同平台的不同应用系统的协同工作能力。
使各个异构系统之间实现无缝交互。
在本质上是要为应用程序之间提供数据通讯的标准,为企业应用之间动态地提供大颗粒度的服务,并不适合于非常精细的基于会话的方法调用以及复杂的事务(transaction)处理之中。
1.2. 发布WebService的约束在BOS Studio中发布webService时,只能发布Entity和Façade两种元数据类型成WebService服务端的代码。
由于Entity或Façade函数参数和返回值可能包含很多复杂的业务类型,在发布时会生成许多辅助类,一些复杂类型在其他异构系统中生成webService客户端时不能很好的支持,因此建议在建立webService功能时,最好使用Façade,并且提供简单类型的输入和返回参数。
1.3. BOSWebService发布1.3.1.发布流程先建立需要发布的Façade,建立粗粒度的业务方法,业务方法尽可能提供简单数据类型的数据参数和返回参数。
1.3.2.发布WebService运行BOS Studio,打开“包分类”视图,在其中选中要发布WebService的实体或Façade 对象(可同时选中多个),点击鼠标右键,在弹出菜单中选择“发布WebService”,将弹出“发布WebService”向导:选择实体或Façade对象下要发布的方法,手工输入或者点击“浏览”按钮来指定发布生成代码存放的目录,可以同时勾中“追加到配置文件”。
这样BOS Studio将会根据选中的对象和要发布的方法生成WebService代码和wsdl描述1.3.3.编辑WebService配置文件在“包分类”视图中,选择要编辑其配置文件的解决方案,点击工具栏上的“编辑WebService 配置文件”按钮,将会弹出配置文件编辑向导在其间,可以增加或删除要发布的对象(方法),选择好要发布的对象(方法)后,点击“完成”按钮,即可完成对配置文件的编辑。
配置文件位于解决方案的根目录下。
1.4. BOSWebService部署1.4.1.部署发布文件发布成功以后,在临时目录里会生成一个wsdd文件和一个目录,例如:D:\webtest\AcctCussentCheckFacade.wsddD:\webtest\com\kingdee\eas\fi\gl\app\webservice\WSAcctCussentCheckFacadeSrv Proxy.javaWSAcctCussentCheckFacadeSrvProxy.java文件拷贝到解决方案src目录中,注意包名和路径一致;AcctCussentCheckFacade.wsdd处理方法如下:找到解决方案的runtime\server\deploy\eas.ear目录,用解压缩软件打开web.war,进入WEB-INF目录把AcctCussentCheckFacade.wsdd添加进去;把AcctCussentCheckFacade.wsdd文件里的service节点内容添加到server-config.wsdd文件。
操作方法建议:提取server-config.wsdd文件到临时目录,用编辑工具打开,再打开AcctCussentCheckFacade.wsdd,拷贝service节点内容粘贴到server-config.wsdd文件,注意XML格式一致;保存server-config.wsdd文件并拷回到web.war压缩包里。
1.4.2.测试是否正确上面的步骤操作完成后,快测已经可以看到新建的WebService。
通过浏览器输入服务的地址,访问服务是否正确如输入:http://server-ip:port/ormrpc/servicesBOS快测启动的默认端口为568981.4.3.部署到正式服务器1、在BIM中部署代码和元数据;2、把解决方案下改好的runtime\server\deploy\eas.ear\web.war文件拷贝到EAS服务器的server\deploy\eas.ear目录中,3.将生成的Web Service的java代码编译为class,放在EAS服务器的eas\server\deploy\eas.ear\web.war\WEB-INF\class下,把发布的wsdd文件中服务部分拷贝到server-config.wsdd中。
4.重启EAS服务器1.4.4.Web工程目录及文件截图1.5. 客户端代码1.5.1.获取wsdl服务描述文件WebService已经成功部署到应用服务器上(本文以Apusic为例进行说明),客户端可以通过浏览器访问到已部署的WebService。
要构建相关的客户端,就要获取已经部署的WebService的相应的WSDL文件,用鼠标右键点击蓝色的部分“(wsdl)”,选取“目标另存为”菜单,这时将出现选择保存文件位置的对话框,在文件名处将文件的后缀名由xml改为wsdl,将wsdl文件保存至本地。
1.5.2.下载工具通过下载eclipse(下载j2ee版本)或通过命令行来生成java -Djava.ext.dirs=lib org.apache.axis.wsdl.WSDL2Java其中lib是axis包目录生成客户端代码。
1.5.3.建立一个新工程例如建立一个工程名为GenerateWSClient的Java工程:将获取到的WSDL文件拷贝到工程的根目录下用鼠标右键点击要生成客户端的WSDL文件,选取菜单“Web Services”-“Generate Client”将会弹出生成客户端向导如图,使用默认值,点击“Next >”,进入下一步:依然使用默认值,点击“Next >”,进入下一步:依然使用默认值,点击“Finish”,即可生成相应的客户端工程(是一个Web工程)1.5.4.使用java客户端新生成的工程中有一个JavaSource目录,我们要使用的java代码就位于这个目录,例如上图中的WSLoginProxy.java。
以下是一个使用Java客户端的例子:import java.rmi.RemoteException;import com.kingdee.WSLoginProxy;//此为发布的代码import com.client.WSContext;public class LoginTest {public static void main(String[] args) {try {WSLoginProxy proxy = new WSLoginProxy();/*** web service客户端登陆* userName 用户名* password 密码* slnName eas* dcName 数据中心,对应的是dataCenter中数据中心id* language 语言 L2简体* dbType 数据库类型 0:sqlServer 1:db2 2:oracle* authPattern 验证方式默认 "BaseDB" ; 其他认证方式KEY可从easAuthPatterns.xml中获取*/WSContext ctx = proxy.login("用户", "", "eas", "数据中心id", "L2", 0); //成功登录后打印sessionIdSystem.out.println(ctx.getSessionId());//调用凭证业务webservice方法importVoucher(凭证引入),请看1.55节}catch (RemoteException e) {e.printStackTrace();}}}1.5.5.importVoucher(凭证引入1、凭证引入接口,两个接口方法都可用,且用法一致2、凭证 webService 接口生成客户端,可参考 EASLogin 方法3、凭证引入参数:importVoucher(wsvoucher[], int isVerify, int isCashflow)●传参数第1个:WSWSVoucher[] 普通对象数组,见构造EAS凭证字段以及含义说明●传参数第2个:isverify0 不核销,暂存1 核销,暂存2 不核销,提交3 核销,提交●传参数第3个:isImpCashflow是否引入现金流量 0 不引入 1 引入4、凭证引入代码调用说明5、返回值String[][]是一个长度为凭证数,宽度是5的字符串数据宽度的定义:外部系统凭证号,凭证字,会计年度,会计期间,处理信息,异常信息,金蝶凭证号1.6. BOS webservice 安全性1.6.1.BOS webservice 安全性概述BOS webservice 安全有两种模式,启用安全性和不启用安全性,默认配置是不启用安全性。