利用cxf工具实现webservice,实现webservie 接口需求

时间:2024-04-09 10:55:45

前章:最近接到一同事的需求,我们需跟别的公司的开发人员实现一个webservice的内容请求。一开始我以为,不就是一个webservice,简单的一比。到真正拿到他的接口要求文档时,我傻了,具体要求如下:

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

我大概整理了一下,有几个需要注意的地方:

1.文档需要有自定义命名服务空间

利用cxf工具实现webservice,实现webservie 接口需求利用cxf工具实现webservice,实现webservie 接口需求

体现在:(生成的wsdl)

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

2.接口调用传递参数类型为一个对象:

以前接口调试一直传递是字符串(xml格式/json格式),现在需要考虑传递的对象格式接收时应该怎么获取。

3.服务请求报文以及服务响应报文必须带有服务命名空间前缀(以下是soapui提供的环境)

服务请求报文:

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

服务响应报文:

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

服务异常报文:

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

ps:soapui这个工具挺好用的,可以用来检查你的请求报文以及响应报文,也可用来做webservice的测试。

说完设计要求,接下来说一下实现:

1.首先,我们需要搭建一个webservice服务环境(这个我就不说了,网上一搜一大把,我用的是spring集成)

2.接着,需要根据需求编写一个wsdl文档

3.根据wsdl文档生成webservice代码

这里就用到根据cxf生成webservice文档的技术:

https://www.jianshu.com/p/34dcdc497466 这是网上一哥们写的,可供大家参考

ps:cxf建议使用版本:apache-cxf-2.7.18

紧接着会生成这样一段代码:

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

将这段代码复制到你的工作空间下,修改以下引用路径便可打开

需注意一下:

1.package-info.java这个文件切记不能删除,否则就少了服务命名空间前缀

下面讲一下怎么解决以上出现的几个问题(由于本人是菜鸟,这些问题都是百度查到的,说得不好请见谅):

1.文档需要有命名空间:

可在 package-info.java 文件下将注解改为以下内容便可以

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

2.接口传递的是一个对象 代码中调用时该如何传递

利用cxf工具实现webservice,实现webservie 接口需求

(1)首先 ,你需要根据对方提供的wsdl去生成你自己的webservice代码(注意:这里的websevice不是用来提供给对方调用的,而是为了给你自己调的)

(2)URL wsdlURL = YDTFIGATE.WSDL_LOCATION; 

这里是你引用的weservice的wsdl的地址,具体在:

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

baseUrl在

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

(3)YDTFIGATE ss = new YDTFIGATE(wsdlURL, SERVICE_NAME);
SOAServicePort port = ss.getSOAService();
FeedBackFinishedInfoResponse _finishTask__return = port.feedBackFinishedInfo(request);

这个方法你虽然代码上是显示调用自己本地的接口代码,实际上是调用wsdlURL上的feedBackFinishedInfo这个接口方法

你们试一下就知道了

利用cxf工具实现webservice,实现webservie 接口需求

3.服务请问报文、响应报文、异常报文格式该怎么编辑

(1)服务请求报文:按照我以上通过cxf生成的,基本上可以达到

(2)服务响应报文:

首先:你需要将ObjectFactory.java下的响应部分代码改为:

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

其次,在配置webservice下需要添加以下内容:

利用cxf工具实现webservice,实现webservie 接口需求

利用cxf工具实现webservice,实现webservie 接口需求

(3)异常报文:

利用cxf工具实现webservice,实现webservie 接口需求利用cxf工具实现webservice,实现webservie 接口需求