一.建立Façade或者Entity,本案例中以Façade为例,Entity可以参考
在BOS Studio工具中建立Façade以及相应的方法并发布,发布时要勾选“生成配置文件”
需要注意的地方:
1、发布成WebService的方法,其方法参数和返回值类型必须是下列列表中的类型,否则发布时看不见方法。是否可以添加异常未尝试。
2、早期的BOS Studio发布元数据是有BUG的,发布以后,元数据和配置文件并没有同步拷贝到deployed_metas目录中,和需要手工同步Facade元数据和metadata目录下的facade_pkmapping.properties文件(或者entity_pkmapping.properties)
二.在BOS Studio中选择Façade发布WebService
发布成功以后,在临时目录里会生成一个wsdd文件和一个目录,例如:
D:\webtest\KmyeFacade.wsdd
D:\webtest\com\kingdee\eas\custom\kmye\app\webservice\WSKmyeFacadeSrvProxy.java
WSKmyeFacadeSrvProxy.java文件拷贝到解决方案src目录中,注意包名和路径一致;
KmyeFacade.wsdd处理方法如下:
找到解决方案的runtime\server\deploy\eas.ear目录,用解压缩软件打开web.war,进入WEB-INF目录
- 把KmyeFacade.wsdd添加进去;
- 把KmyeFacade.wsdd文件里的service节点内容添加到server-config.wsdd文件。操作方法建议:提取server-config.wsdd文件到临时目录,用UltraEdit32打开,再打开KmyeFacade.wsdd,拷贝service节点内容粘贴到server-config.wsdd文件,注意XML格式一致;保存server-config.wsdd文件并拷回到web.war压缩包里。
上面的步骤操作完成后,快测已经可以看到新建的WebService
三.部署到正式服务器
1、在BIM中部署代码和元数据;
2、把解决方案下改好的runtime\server\deploy\eas.ear\web.war文件拷贝到EAS服务器的server\deploy\eas.ear目录中,重启EAS服务器
四.验证
打开浏览器,输入地址:http://server-ip:port/ormrpc/services,应该可以看到新建的Webservice,右键点击相应的wsdl,选择另存为…,扩展名改为wsdl,就可以下载客户端开发使用的wsdl文件。
五.客户端开发
注意:
1. 在myeclipse上通过wsdl创建客户端好像有问题,请使用eclipse
2. 使用EAS的WebService之前,必须先通过EASLogin Web服务登录(运行EAS登录接口),否则会产生认证错误。EASLogin里有两个login方法,只调用参数如下的login:
String userName //EAS登录用户名,可以是user或其他有效的用户名
String password //EAS用户登录密码
String slnName //eas
String dcName //注册的数据中心名称
String language //登录的语言
Int32 dbType //数据类型,0:MSSQL,1:ORACLE
新建java项目,把下载的wsdl文件拷贝到项目中,右键点击,选择:Web Services—>Generate Client,产生客户端代理类。
客户端代码示例:
public class wstest {
public static void main(String[] args){
try {
// 通过WebService登录EAS
EASLoginProxyServiceLocator loginLocator = new EASLoginProxyServiceLocator();
EASLoginProxy loginProxy = loginLocator.getEASLogin();
System.out.println("------ 开始登录服务器 .... ");
WSContext context = loginProxy.login("user", "", "eas", "001", "L2", 0);
System.out.println("------ 登陆成功,SessionID:" + context.getSessionId());
// 通过Kmye WevService获取信息
WSKmyeFacadeSrvProxyServiceLocator accountLocator = new WSKmyeFacadeSrvProxyServiceLocator();
WSKmyeFacadeSrvProxy accountProxy = accountLocator.getWSKmyeFacade();
String result = accountProxy.getBasedata(null);
System.out.println(result);
result = accountProxy.getAccountBalance(null);
System.out.println(result);
} catch (ServiceException e) {
e.printStackTrace();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}