关于苍穹对外开放WebService服务接口的配置及调用说明原创
金蝶云社区-聚宝彭
聚宝彭
19人赞赏了该文章 5,289次浏览 未经作者许可,禁止转载编辑于2021年05月08日 16:39:35

众所周知,苍穹支持对外支持REST风格的openAPI接口,但如果项目中第三方系统需要调用SOAP方式的WebService接口进行交互,那苍穹能支持暴露这种接口吗?

答案肯定是能的,下面我就来给大家详细介绍一下苍穹平台中WebService接口的配置及调用说明。

首先,我们来看一下平台提供的样例kd.bos.kws.demo.IHelloWorld或kd.bos.kws.demo.IUserService。以IHelloWorld为例来演示WebService的配置调用过程。


第一步,开发接口。反编译打开接口kd.bos.kws.demo.IHelloWorld。在这个接口中定义了苍穹可以对外开放的接口和方法。再来看一下其实现类kd.bos.kws.demo.impl.HelloWorldImpl,在这个类中就是具体的业务实现逻辑,这里就不细说了。


第二步,MC中添加配置项。

① 进入租户管理中心(MC)——基础数据维护——环境公共配置项——标准公共配置——配置——通用配置——prop,点击左侧树左上角的“+”添加一个节点(也可不添加),输入编码、名称。

参考资料https://vip.kingdee.com/article/155620832252370432


注意

  • 编码、名称不要填反了,否则会因为底层读不到配置而导致WebService接口发布不成功!

mc添加节点.png


选中新添加的节点,点击“新增”按钮添加配置项,这里有两种配置方式。

mc添加配置项-3.png

第一种方式:编码、名字均填写:kws.config,值:xml配置内容,例:<?xml version="1.0" encoding="UTF-8"?><root><service name="helloWorld" class="kd.bos.kws.demo.impl.HelloWorldImpl"></service><service name="userService" class="kd.bos.kws.demo.impl.UserServiceImpl"><method name="getUser"></method></service></root>

此种方式配置简单,但每次新加接口时需要不断改动mc配置值。

第二种方式:编码、名字均填写:kws.filepath.config,值:指向相应jar包resources目录中的xml文件(保证与其他jar资源路径不冲突)。当有多个配置文件时,用英文逗号分隔即可(如:kd_kwsconfig.xml, wk_kwsconfig.xml)。下图即为样例的xml文件内容。

样例配置.png

此种方式互相隔离互补干扰,新加接口只需改动相应的xml文件内容即可,无需每次修改mc的配置值。

关于这两种方式开放2个service:helloWorld、userService,

第一条service(helloWorld):开放kd.bos.kws.demo.impl.HelloWorldImpl中的全部方法给接口调用。

第二条service(userService):开放kd.bos.kws.demo.impl.UserServiceImpl中的一个方法getUser给接口调用。

注意

  • xml内容里面节点标签属性是name,而不是key,即:name="helloWorld"。平台早期提供的参考文档里面此处是写的key="helloWorld",有误,请注意!

  • 如在txt文件编辑器中编写的内容,复制粘贴到mc中的配置项,请注意内容中第一次换行后面的内容可能会丢失。如存在这种情况,请去掉所有换行。我用Notepad++中出现过,各位小伙伴请注意绕弯避坑。

  • xml内容中class的值为实现类,不是第一步定义的接口。

mc添加配置项-1.png


③ 保存配置 & 发布集群。

注意

  • MC中的配置改动必须发布集群才会生效,请谨记!如需验证,可在monitor中查询节点的系统属性,如下图所示即为上一步提到的有误配置。

monitor配置--有误.png



第三步,验证是否发布成功。浏览器访问地址:苍穹环境地址[ip:端口/ierp/]kws/[配置的接口name名字]?wsdl。样例访问:http://127.0.0.1:8080/ierp/kws/helloWorld?wsdl

出现如下截图所示,则表明WebService接口发布成功。将截图中红框选中的内容复制粘贴到txt文件中保存以便后续步骤使用,文件名随意,但后缀须为wsdl

如不成功,可在kd.bos.kws.config.WSConfig.get()方法上打断点进行调试。反编译查看这个方法大家可以发现,其实,平台底层不仅会读取配置项kws.config和kws.filepath.config,而且会读取配置项kws.config.path,因此,第二步里面我们还可以通过配置kws.config.path来实现,其值与配置kws.filepath.config相同,填写xml文件路径即可,三选一。

注意

  • 地址中配置的接口名字即为第二步xml内容service节点的name属性的值。

验证.png


第四步,接口调用验证。

先用工具SoapUI生成请求报文内容。新建SOAP project时选择wsdl文件时选上一步制作的wsdl文件即可。双击打开sayHello下的Request 1即可打开请求,添加参数<accessToken></accessToken>并填写通过Postman获取的accessToken,修改yourName参数,点击左上角启动按钮即可验证。

注意

  • SoapUI的安装包、使用教程请自行百度。

  • accessToken的获取步骤请参阅开放API服务的相关内容。

SoapUI测试结果.png


第五步,postman验证。

复制第三中截图的请求地址到postman的地址栏,请求方式修改为:post。复制上一步SoapUI请求的内容到postman的body中,点击“send”即可得到返回信息。

注意

  • 苍穹对外开放的WebService接口均需携带accessToken进行访问。如有特殊情况可不携带,本地开发环境启动类添加配置System.setProperty("WS_ignore_login", "true");测试生产环境可按第二步在MC中添加相应的配置项。

  • 自定义开发的WebService接口,第三方在请求的时候如需传入参数,可在body中自行添加,如:在<soapenv:Body>—<demo:sayHello>下的<yourName>参数,节点的名称必须与第一步中接口类中注解定义的参数保持一致!如:kd.bos.kws.demo.IHelloWorld.sayHello(String)方法的注解@WebParam定义传入参数名为yourName,则postman中body传入参数的节点就必须为<yourName></yourName>。

Postman测试.png


so,整个样例就已验证通过了。

啰啰嗦嗦这么多,最后给大家总结一下吧:

1. 苍穹对外开放WebService接口的总体步骤:定义接口&编写实现类——MC添加配置并发布——验证。

2. MC中添加配置项:kws.config.path、kws.filepath.config、kws.config,前两者均配置xml文件的相对路径,三者选其一配置即可。

3. 开发过程中遇到问题排查步骤:monitor检查配置项是否发布成功——断点调试检查底层获取到的MC参数是否正确。

4. 文章中注意事项均是我在开发过程中踩过的坑,希望大家不要再跳了。如有有问题,可打断点与样例做对比调试。


至此,文章到这里就结束啦,以下是关于开放API服务的参考资料,大家在开发的时候可以多参考参考。

《金蝶云苍穹平台开发指南》第18节开放平台

《金蝶云苍穹Java插件开发之南》第20节开放API插件

https://dev.kingdee.com/index/study/detail/3d4ac48c-4da8-460e-9e7c-3cf210a12cdf?from=allCourse

https://vip.kingdee.com/knowledge#tabMain

https://vip.kingdee.com/questions/159245991747591680/answers/160840511241046016

https://vip.kingdee.com/questions/160341640974984192/answers/160345862777448448

https://vip.kingdee.com/questions/159249583665651200

https://vip.kingdee.com/article/158244323199077376

 

大家如有任何建议和意见,欢迎在评论区留言,我将努力改进。创作不易,如能帮到大家,请动动您的金手指点赞鼓励一下,非常感谢~【emoji】【emoji】【emoji】



赞 19