一、CXF的介绍

Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成。CXF框架是一种基于servlet技术的SOA应用开发框架,要正常运用基于CXF应用框架开发的企业应用,除了CXF应用本身之外,还需要JDK和servlet容器的支持。

二、CXF的准备条件

所需要的jar包:

xmlbeans-2.4.0.jar

wss4j-1.5.9.jar

jetty-server-7.1.6.v20100715.jar

jetty-util-7.1.6.v20100715.jar

geronimo-ws-metadata_2.0_spec-1.1.3.jar

geronimo-activation_1.1_spec-1.1.jar

geronimo-servlet_3.0_spec-1.0.jar

velocity-1.6.4.jar

jaxb-xjc-2.2.1.1.jar

xml-resolver-1.2.jar

wsdl4j-1.6.2.jar

cxf-2.3.0.jar

XmlSchema-1.4.7.jar

jaxb-api-2.2.1.jar

jaxb-impl-2.2.1.1.jar

neethi-2.0.4.jar

geronimo-annotation_1.0_spec-1.1.1.jar

geronimo-stax-api_1.0_spec-1.0.1.jar

下载地址:http://download.csdn.net/detail/ch656409110/5748183   (取自己需要的jar包)

三、创建webservice服务端

1、先将jar包放入lib目录

2、在web.xml中配置CXF框架的核心servlet

  1. <!-- CXF -->
  2. <servlet>
  3. <servlet-name>CXFServlet</servlet-name>
  4. <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  5. <load-on-startup>1</load-on-startup>
  6. </servlet>
  7. <servlet-mapping>
  8. <servlet-name>CXFServlet</servlet-name>
  9. <url-pattern>/services/*</url-pattern>
  10. </servlet-mapping>

3、在applicationContext.xml中导入xml,并且发布webservice服务。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans
  3. xmlns="http://www.springframework.org/schema/beans"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xmlns:p="http://www.springframework.org/schema/p"
  6. xmlns:tx="http://www.springframework.org/schema/tx"
  7. xmlns:aop="http://www.springframework.org/schema/aop"
  8. xmlns:jaxws="http://cxf.apache.org/jaxws"
  9. xmlns:jaxrs="http://cxf.apache.org/jaxrs"
  10. xsi:schemaLocation="http://www.springframework.org/schema/beans
  11. http://www.springframework.org/schema/beans/spring-beans-2.5.xsd
  12. http://www.springframework.org/schema/tx
  13. http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
  14. http://www.springframework.org/schema/aop
  15. http://www.springframework.org/schema/aop/spring-aop-2.5.xsd
  16. http://cxf.apache.org/jaxws
  17. http://cxf.apache.org/schemas/jaxws.xsd
  18. http://cxf.apache.org/jaxrs
  19. http://cxf.apache.org/schemas/jaxrs.xsd
  20. "
  21. default-autowire="byName"
  22. >
  23. <import resource="classpath:META-INF/cxf/cxf.xml" />
  24. <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
  25. <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
  26. <!-- <jaxws:endpoint id="facelookWebService" address="/facelookWebService" implementor="com.facelook.webservice.server.FacelookWebServiceImpl"></jaxws:endpoint> -->
  27. <!-- 不知道为什么,这里的webservice配置,只能用bean来实现,否则 注入的service为空。但是之前有个项目却可以,百思不得其解。。 -->
  28. <bean id="facelookWebService" class="com.facelook.webservice.server.FacelookWebServiceImpl"/>
  29. <jaxws:endpoint id="facelookWebService1" address="/facelookWebService" implementorClass="com.facelook.webservice.server.FacelookWebServiceImpl">
  30. <jaxws:implementor ref="facelookWebService"/>
  31. </jaxws:endpoint>
  32. </beans>

4、定义webservice接口FacelookWebService 和 实现类FacelookWebServiceImpl。

  1. @WebService
  2. public interface FacelookWebService {
  3. /**
  4. * 根据传递的条件获取相册信息
  5. * xml的格式规范
  6. * <?xml version=\"1.0\" encoding=\"UTF-8\"?>
  7. * <facelook>
  8. *  <condition>
  9. *      <name></name>
  10. *      <description></description>
  11. *      <pageno></pageno>
  12. *      <pagesize></pagesize>
  13. *  </condition>
  14. * </facelook>
  15. * 这里的WebParam必须指定,否则调用的时候返回null
  16. * @return
  17. */
  18. public String getAlbumList(@WebParam(name="xmlStr") String xmlStr);
  19. }
  20. @WebService
  21. //这后面的可以不写注释后面的配置,在applicationContext配置也一样(serviceName="facelookWebService",endpointInterface="com.facelook.webservice.server.FacelookWebService")
  22. public class FacelookWebServiceImpl implements FacelookWebService{
  23. @Autowired
  24. private AlbumService albumService;
  25. @Override
  26. public String getAlbumList(String xmlStr) {
  27. try {
  28. List<Album> albumList = getAlbumPage(xmlStr);
  29. JSONArray jsonArray = JSONArray.fromObject(albumList);
  30. return jsonArray.toString();
  31. } catch (Exception e) {
  32. e.printStackTrace();
  33. }
  34. return null;
  35. }
  36. }

这样子,基本上就可以了。

5、保存代码,发布项目,启动tomact。

在地址栏输入:http://localhost:8080/house/services/houseWebService?wsdl  即可看到发布的服务端的明细。

显示如下:

这就表示CXF发布的webservice服务端成功了。

6、通过客户端调用服务端webservice。

axis的客户端访问:

  1. public static void main(String[] args) throws ServiceException, RemoteException, MalformedURLException {
  2. String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
  3. + "     <facelook>"
  4. + "        <condition>"
  5. + "            <name>家</name>"
  6. + "            <description></description>"
  7. + "            <pageno></pageno>"
  8. + "            <pagesize></pagesize>"
  9. + "        </condition>"
  10. + "     </facelook>";
  11. Service service = new Service();
  12. Call call = (Call) service.createCall();
  13. call.setTargetEndpointAddress("http://localhost:8080/facelook/services/facelookWebService?wsdl");
  14. QName qName = new QName("http://server.webservice.facelook.com/", "getAlbumList");
  15. call.setOperationName(qName);
  16. call.setUseSOAPAction(true);
  17. //这下面两行一定要加上,否则接收在服务器端收不到。
  18. call.addParameter("xmlStr", XMLType.XSD_STRING, ParameterMode.IN);
  19. call.setReturnType(XMLType.XSD_STRING);
  20. String result = (String) call.invoke(new Object[] { xmlStr });
  21. System.out.println(result);
  22. //将返回的字符串转换成list集合
  23. //JSONArray array = JSONArray.fromObject(result);
  24. //List<Album> list = JSONArray.toList(array,Album.class);
  25. }

CXF客户端访问:

  1. public static void main(String[] args) throws Exception {
  2. //这个是用cxf 客户端访问cxf部署的webservice服务
  3. //千万记住,访问cxf的webservice必须加上namespace ,否则通不过
  4. //现在又另外一个问题,传递过去的参数服务端接收不到
  5. JaxWsDynamicClientFactory dcf = JaxWsDynamicClientFactory.newInstance();
  6. org.apache.cxf.endpoint.Client client = dcf.createClient("http://localhost:8080/facelook/services/facelookWebService?wsdl");
  7. //url为调用webService的wsdl地址
  8. QName name=new QName("http://server.webservice.facelook.com/","getAlbumList");
  9. //namespace是命名空间,methodName是方法名
  10. String xmlStr = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
  11. + "     <facelook>"
  12. + "        <condition>"
  13. + "            <name>家</name>"
  14. + "            <description></description>"
  15. + "            <pageno></pageno>"
  16. + "            <pagesize></pagesize>"
  17. + "        </condition>"
  18. + "     </facelook>";
  19. //paramvalue为参数值
  20. Object[] objects=client.invoke(name,xmlStr);
  21. //调用web Service//输出调用结果
  22. System.out.println(objects[0].toString());
  23. }

在这里面传递的xml规范由 服务端自己规范好了,然后去解析、获取参数,执行相应的操作,返回想要的结果给调用的客户端。。

CXF创建webservice客户端和服务端的更多相关文章

  1. Axis创建webservice客户端和服务端

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本人声明.否则将追究法律责任. 作者:永恒の_☆ 地址:http://blog.csdn.net/chenghui0317/ ...

  2. 13.Axis创建webservice客户端和服务端

    转自:https://blog.csdn.net/chenghui0317/article/details/9318317 一.Axis的介绍 Web Service是现在最适合实现SOA的技术,而A ...

  3. 【转】SoapUI5.0创建WebService接口模拟服务端

    原文:http://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 MathU ...

  4. SoapUI5.0创建WebService接口模拟服务端(转)

    转载自:https://blog.csdn.net/a19881029/article/details/26348627 使用SoapUI创建WebService接口模拟服务端需要接口描述文件 Mat ...

  5. 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发

    目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...

  6. 使用Axis2编写webservice客户端,服务端

    1.编写客户端 Axis2开发WebService客户端 的3种方式 [参考帖子] http://blog.csdn.net/wangjinwei6912/article/details/851259 ...

  7. 使用GSoap开发WebService客户端与服务端

    Gsoap 编译工具提供了一个SOAP/XML 关于C/C++ 语言的实现, 从而让C/C++语言开发web服务或客户端程序的工作变得轻松了很多. 用gsoap开发web service的大致思路 我 ...

  8. idea+maven+spring+cxf创建webservice应用(二)生成客户端程序

    idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...

  9. 用cxf创建webservice服务端

    用cxf创建webservice 1:在eclipse里面创建动态web工程,注意,Dynamic web module version取2.5,3.0未测试过待验证: 2:下载cxf相关的jar包, ...

随机推荐

  1. JVM工具jcmd实践

    暂时参考以下链接,后续补充自己的实践. https://www.jianshu.com/p/388e35d8a09b

  2. Sublime PlantUML环境配置

    参考[http://www.jianshu.com/p/e92a52770832]在安装中遇到不少问题,总结一次成功的步骤如下 一.安装步骤: 1)准备java  环境 jdk1.7 2)安装Subl ...

  3. 【CF802C】Heidi and Library (hard) 费用流

    [CF802C]Heidi and Library (hard) 题意:有n个人依次来借书,第i人来的时候要求书店里必须有种类为ai的书,种类为i的书要花费ci块钱购入.而书店的容量只有k,多余的书只 ...

  4. Fiddler实现手机的抓包(转载园友小坦克)

    Fiddler不但能截获各种浏览器发出的HTTP请求, 也可以截获各种智能手机发出的HTTP/HTTPS请求. Fiddler能捕获IOS设备发出的请求,比如IPhone, IPad, MacBook ...

  5. iOS - Charles抓包数据

    一.Charles Charles破解版下载地址点我 1.1 Charles主要的功能 .截取Http.Https网络请求内容 .支持修改网络请求参数,方便调试 .支持网络请求的截取 并动态修改 1. ...

  6. em 单位

    借 Lea verou 的话: 当某些值相互依赖时,应该把它们的相互关系用代码表达出来. 通常情况下,我们会希望字号和其他尺寸能够跟父元素的字号建立关联,此时em就很好的表达了这种关系. 在CSS V ...

  7. HTTP协议的前世今生——各版本HTTP协议对比

    HTTP协议是如今互联网与服务端技术的基石,HTTP协议的演进也从侧面反应了互联网技术的快速发展.这两天在准备一次关于HTTP1.1协议特性的技术分享过程中,顺便了解了下各版本HTTP协议的特点,在这 ...

  8. Asp.net MVC]Asp.net MVC5系列——在模型中添加

    目录 概述 在模型中添加验证规则 自定义验证规则 伙伴类的使用 总结 系列文章 [Asp.net MVC]Asp.net MVC5系列——第一个项目 [Asp.net MVC]Asp.net MVC5 ...

  9. WCF的简单使用

    WCF简单介绍 WCF(windows communication foundation)是微软推出的数据通信的统一编程模型,在WCF有四个主要的关键点: abcd Address(地址):定义服务的 ...

  10. Oracle体系结构之控制文件的多路复用技术

    在Windows操作系统中,如果注册表文件被损坏了,就会影响操作系统的稳定性.严重的话,会导致操作系统无法正常启动.而控制文件对于Oracle数据库来说,其作用就好象是注册表一样的重要.如果控制文件出 ...