设为首页 收藏本站
查看: 962|回复: 0

[经验分享] Apache CXF实现的SOAP形式的webservices

[复制链接]

尚未签到

发表于 2018-11-20 09:01:02 | 显示全部楼层 |阅读模式
  前言:常用的web service有两种形式,SOAP和RESTful。这里先说SOAP的实现步骤,RESTful的形式后面再说
  一 建项目,导jar包
(1)项目结构
   DSC0000.png

  

(2)在eclipse中新建一个动态web项目“CXFDemo”,并导入cxf中的jar包(路径:/WEB-INF/lib/)。当然,可以去官网下载,也可以直接使用我用过的jar包,链接:http://pan.baidu.com/s/1pKyelAV
(3)配置web.xml:


CXFDemo

contextConfigLocation
WEB-INF/classes/service-beans.xml


org.springframework.web.context.ContextLoaderListener


CXFServlet
org.apache.cxf.transport.servlet.CXFServlet


CXFServlet
/*


index.html
index.htm
index.jsp
default.html
default.htm
default.jsp

  


二 web service服务端类
(1)接口CXFService.java:
package cn.zifangsky;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
@WebService
public interface CXFService {
@WebMethod
public String sayHello(@WebParam(name="name") String name);
}  
说明:
@WebService:标记表示该接口是一个WebService服务
@WebMethod:标记表示WebService中的方法
@WebParam(name=”paramName”)表示方法中的参数,name属性限制了参数的名称,若没有指定该属性,参数将会被重命名

(2)具体的实现类CXFServiceImpl.java:
package cn.zifangsky.impl;
import cn.zifangsky.CXFService;
public class CXFServiceImpl implements CXFService {
public String sayHello(String name) {
return "Hello," + name + "\n" + Test.getExtraMessage();
}
}  注:Test.java类:
package cn.zifangsky.impl;
public class Test {
public static String getExtraMessage(){
return "测试";
}
}  (3)配置service-beans.xml:




















  
说明:
i)3个bean配置的是日志,在这里把日志相关的配置删掉也不影响web service服务的正常使用
ii)address指的是发布后这个服务的路径问题,比如说我这里就是:http://localhost:8080/CXFDemo/soap/sayHello
(4)测试
发布这个项目到tomcat,运行之后的效果如下:
DSC0001.png

点击那个链接,可以发现sayHello这个服务的地址是:http://localhost:8080/CXFDemo/soap/sayHello?wsdl
到此,这个web service的服务端已经配置完成


web service客户端配置
服务端提供服务,而客户端使用服务端提供的服务,因此客户端只需要调用服务端提供的服务就可以了
(1)客户端的项目结构:
DSC0002.png

  (2)同样是新建一个动态web工程,然后引入cxf的jar包,同时需要把服务端的CXFService接口打包成一个jar包,然后导入到客户端的lib中,链接:http://pan.baidu.com/s/1eQVWups
DSC0003.png

  (3)客户端测试类ClientDemo.java:
package cn.zifangsky.client;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.zifangsky.CXFService;
public class ClientDemo {
public static void main(String args[]){
ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"client-beans.xml"});
CXFService clientHello = (CXFService) context.getBean("clientHello");
String response = clientHello.sayHello("javaee");
context.close();
System.out.println("Response: " + response);   
        System.exit(0);  
}
}  (4)客户端配置文件client-beans.xml:
  
  
   

      
   
   









      
  
说明:
这里的address需要填写服务的wsdl绝对地址,因此这里就是:http://localhost:8080/CXFDemo/soap/sayHello?wsdl


(5)测试
直接使用“Java Application”运行ClientDemo,输出如下:
---------------------------
ID: 1
Address: http://localhost:8080/CXFDemo/soap/sayHello?wsdl
Encoding: UTF-8
Http-Method: POST
Content-Type: text/xml
Headers: {Accept=[*/*], SOAPAction=[""]}
Payload: http://zifangsky.cn/CXFService/sayHellourn:uuid:0d855e41-d638-4525-a3cf-8055c40f8605http://localhost:8080/CXFDemo/soap/sayHello?wsdlhttp://www.w3.org/2005/08/addressing/anonymousjavaee
--------------------------------------
三月 14, 2016 4:51:41 下午 org.apache.cxf.services.CXFServiceService.CXFServicePort.CXFService
信息: Inbound Message
----------------------------
ID: 1
Response-Code: 200
Encoding: UTF-8
Content-Type: text/xml;charset=UTF-8
Headers: {content-type=[text/xml;charset=UTF-8], Date=[Mon, 14 Mar 2016 08:51:41 GMT], Server=[Apache-Coyote/1.1], transfer-encoding=[chunked]}
Payload: http://zifangsky.cn/CXFService/sayHelloResponseurn:uuid:504f4c19-5df9-42bd-bb02-761da4932490http://www.w3.org/2005/08/addressing/anonymousurn:uuid:0d855e41-d638-4525-a3cf-8055c40f8605Hello,javaee
测试
--------------------------------------
三月 14, 2016 4:51:41 下午 org.springframework.context.support.AbstractApplicationContext doClose
信息: Closing org.springframework.context.support.ClassPathXmlApplicationContext@62a76581: startup date [Mon Mar 14 16:51:39 GMT+08:00 2016]; root of context hierarchy
Response: Hello,javaee
测试  可以发现,最后成功输出了
Response: Hello,javaee
测试  因为我们在客户端中只引用了CXFService.java这个接口,但是却输出了预期的内容,说明客户端的确是调用了服务端的服务并成功返回信息的
  





运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-637188-1-1.html 上篇帖子: 源码编译安装apache报APR错及解决方案 下篇帖子: 查看nginx apache mysql php 编译参数
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表