加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

CXF创建webservice客户端和服务端

发布时间:2020-12-16 23:53:28 所属栏目:安全 来源:网络整理
导读:一、CXF的介绍 Apache CXF是一个开源的WebService框架,CXF大大简化了Webservice的创建,同时它继承了XFire的传统,一样可以和spring天然的进行无缝的集成。CXF框架是一种基于servlet技术的SOA应用开发框架,要正常运用基于CXF应用框架开发的企业应用,除了C

一、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

[html] view plain copy print ?
  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服务。

[html] view plain copy print ?
  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. ??????
  27. ????<!--?<jaxws:endpoint?id="facelookWebService"?address="/facelookWebService"?implementor="com.facelook.webservice.server.FacelookWebServiceImpl"></jaxws:endpoint>?-->??
  28. ????<!--?不知道为什么,这里的webservice配置,只能用bean来实现,否则?注入的service为空。但是之前有个项目却可以,百思不得其解。。?-->??
  29. ????<bean?id="facelookWebService"?class="com.facelook.webservice.server.FacelookWebServiceImpl"/>???
  30. ????<jaxws:endpoint?id="facelookWebService1"?address="/facelookWebService"?implementorClass="com.facelook.webservice.server.FacelookWebServiceImpl">??
  31. ????????<jaxws:implementor?ref="facelookWebService"/>????
  32. ????</jaxws:endpoint>??
  33. </beans>??

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

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

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

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

显示如下:


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

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

axis的客户端访问:

[java] view plain copy print ?
  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. ??????
  12. ??????Service?service?=?new?Service();??
  13. ??????Call?call?=?(Call)?service.createCall();??
  14. ??????call.setTargetEndpointAddress("http://localhost:8080/facelook/services/facelookWebService?wsdl");??
  15. ??????QName?qName?=?new?QName("http://server.webservice.facelook.com/",?"getAlbumList");??
  16. ??????call.setOperationName(qName);??
  17. ??????call.setUseSOAPAction(true);??
  18. ??????//这下面两行一定要加上,否则接收在服务器端收不到。??
  19. ??????call.addParameter("xmlStr",?XMLType.XSD_STRING,?ParameterMode.IN);??
  20. ??????call.setReturnType(XMLType.XSD_STRING);??
  21. ??????String?result?=?(String)?call.invoke(new?Object[]?{?xmlStr?});??
  22. ??????System.out.println(result);??
  23. ??????
  24. ????//将返回的字符串转换成list集合??
  25. ????//JSONArray?array?=?JSONArray.fromObject(result);??
  26. ????//List<Album>?list?=?JSONArray.toList(array,Album.class);??
  27. ??????
  28. }??

CXF客户端访问:

[java] view plain copy print ?
  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规范由 服务端自己规范好了,然后去解析、获取参数,执行相应的操作,返回想要的结果给调用的客户端。。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读