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

CXF创建webservice客户端和服务端

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

目录(?)[+]

一、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
  1. <!--?CXF?-->??
  2. <servlet>????
  3. ????servlet-name>CXFServlet</>????
  4. ????servlet-class>org.apache.cxf.transport.servlet.CXFServletload-on-startup>1 servlet-mappingurl-pattern>/services/*>??
[html]? view plain copy

在CODE上查看代码片

派生到我的代码片

    >??

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

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

    派生到我的代码片

      >??

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

    [java]? copy
      @WebService??
    1. public?interface?FacelookWebService?{??
    2. ??????
    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. ??
    21. ??
    22. //这后面的可以不写注释后面的配置,在applicationContext配置也一样(serviceName="facelookWebService",endpointInterface="com.facelook.webservice.server.FacelookWebService")??
    23. class?FacelookWebServiceImpl?implements?FacelookWebService{??
    24. ????@Autowired??
    25. ????private?AlbumService?albumService;??
    26. ????@Override??
    27. public?String?getAlbumList(String?xmlStr)?{??
    28. ????????try?{??
    29. ????????????List<Album>?albumList?=?getAlbumPage(xmlStr);??
    30. ????????????JSONArray?jsonArray?=?JSONArray.fromObject(albumList);??
    31. ????????????return?jsonArray.toString();??
    32. ????????}?catch?(Exception?e)?{??
    33. ????????????e.printStackTrace();??
    34. ????????}??
    35. ????????return?null;??
    36. ????}??
    37. }???
    [java]?

    派生到我的代码片

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

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

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

    显示如下:


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

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

    axis的客户端访问:

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

    CXF客户端访问:

    copy
      throws?Exception?{??
    1. ????????//这个是用cxf?客户端访问cxf部署的webservice服务??
    2. ????????//千万记住,访问cxf的webservice必须加上namespace?,否则通不过??
    3. //现在又另外一个问题,传递过去的参数服务端接收不到??
    4. ????????JaxWsDynamicClientFactory?dcf?=?JaxWsDynamicClientFactory.newInstance();??
    5. ????????org.apache.cxf.endpoint.Client?client?=?dcf.createClient("http://localhost:8080/facelook/services/facelookWebService?wsdl");??
    6. //url为调用webService的wsdl地址??
    7. ????????QName?name="getAlbumList");??
    8. //namespace是命名空间,methodName是方法名??
    9. ????????String?xmlStr?=?"<?xml?version="1.0"?encoding="UTF-8"?>"??
    10. ?????????????????+?"?????<facelook>"??
    11. ?????????????????+?"????????<condition>"??
    12. ?????????????????+?"????????????<name>家</name>"??
    13. ?????????????????+?"????????????<description></description>"??
    14. ?????????????????+?"????????????<pageno></pageno>"??
    15. ?????????????????+?"????????????<pagesize></pagesize>"??
    16. ?????????????????+?"????????</condition>"??
    17. ?????????????????+?"?????</facelook>";??
    18. //paramvalue为参数值??
    19. ????????Object[]?objects=client.invoke(name,xmlStr);???
    20. //调用web?Service//输出调用结果??
    21. ????????System.out.println(objects[0].toString());??
    22. } ?
    在这里面传递的xml规范由 服务端自己规范好了,然后去解析、获取参数,执行相应的操作,返回想要的结果给调用的客户端。。

    (编辑:李大同)

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

    推荐文章
      热点阅读