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

WebService CXF学习(入门篇4):整合Spring框架

发布时间:2020-12-16 23:17:48 所属栏目:安全 来源:网络整理
导读:通过前面两节的讲解,相信你对CXF框架开始有一些认识了。在当今项目开发中,Spring框架基上都用到过,那么它怎么与CXF结合呢,这就是我们这一间要讲的内容。好了,闲话少说。 ??? 首先,在前面基础上再导入几个spring要用到的几个.jar包: ??? spring-core.j

通过前面两节的讲解,相信你对CXF框架开始有一些认识了。在当今项目开发中,Spring框架基上都用到过,那么它怎么与CXF结合呢,这就是我们这一间要讲的内容。好了,闲话少说。
??? 首先,在前面基础上再导入几个spring要用到的几个.jar包:
??? spring-core.jar
??? spring-jdbc.jar
??? spring-context.jar
??? spring-orm.jar
??? spring-beans.jar
??? spring-tx.jar
??? 包导入完之后,我们还不能开如干活,配置几荐参数,便于下一步工作。
??? 配置CXF框架
??? 我的电脑->属性->高级->环境变量
??? 创建一个CXF_HOEM变量,值为CXF框架所在根目录,修改一下
??? CLASSPATH=%CXF_HOME%/lib;PATH=%CXF_HOME%/bin;这时有会问为什么要配置这两个参数据呢,其实配置这两个参数用途与配置JAVA变量一下,在DOS窗口下直接运行java2ws,wsdl2java等可执行文件。当然你没有配置也可以进到CXF框架的bin目录下远行这个几个可执行文件。
?? 配置好了后,你在DOS窗口下输入java2ws,看看配置是否效。肯定没有成功,原因是使用6.0的JDK,我们还得在%JAVA_HOME%/jre/lib目录下创建一下endorsed文件夹,将jaxb-api.jar,jaxws.jar拷贝进去。现在再运一下java2ws,成功运行,配置生效了。
??? 基本工作做得差不多,整合spring框架正式开始:
??? 第一步:新一个web project,导入要用到.jar包,其实CXF利用org.apache.cxf.transport.servlet.CXFServlet来拦截所有web请求,将其配置到web.xml中。配置如下:

[html] view plain copy print ?
  1. <web-app>??
  2. ????<context-param>??
  3. ????????<param-name>contextConfigLocation</param-name>??
  4. ????????<param-value>??
  5. ????????????/WEB-INF/classes/applicationContext-*.xml,/WEB-INF/classes/webservice.xml??
  6. ????????</param-value>??
  7. ????</context-param>??
  8. ??
  9. ????<listener>??
  10. ????????<listener-class>??
  11. ????????????org.springframework.web.context.ContextLoaderListener??
  12. ????????</listener-class>??
  13. ????</listener>??
  14. ??
  15. ????[color=red]<servlet>??
  16. ????????<servlet-name>CXFServlet</servlet-name>??
  17. ????????<display-name>CXF?Servlet</display-name>??
  18. ????????<servlet-class>??
  19. ????????????org.apache.cxf.transport.servlet.CXFServlet??
  20. ????????</servlet-class>??
  21. ????????<load-on-startup>1</load-on-startup>??
  22. ????</servlet>??
  23. ??
  24. ????<servlet-mapping>??
  25. ????????<servlet-name>CXFServlet</servlet-name>??
  26. ????????<url-pattern>/*</url-pattern>??
  27. ????</servlet-mapping>[/color]??
  28. </web-app>??


注意一下绿色字体
????? CXF框架配置好了,我就来开发一个WebService接口

[html] view plain copy print ?
  1. ?????@WebService??
  2. ?????public?interface?IService?{??
  3. ??
  4. //public?void?save(@WebParam(name="info")String?xml);??
  5. public?void?save(@WebParam(name="dto")UserInfoDTO?dto,@WebParam(name="flag")boolean?flag);??
  6. public?void?update(@WebParam(name="info")String?xml);??
  7. public?void?delete(@WebParam(name="id")int?id);??
  8. public?@WebResult(name="String")String?get(@WebParam(name="id")int?id);??
  9. ????}??


这里面有四个方法,其中有一个涉及到对象,这一点前面一节讲到怎么处理它。放在这里是再回顾前节内容。
??? 创建一个WebService接口实现类

[java] view plain copy print ?
  1. ???@WebService??
  2. ???public?class?ServiceImpl?implements?IService?{??
  3. private?Logger?log?=?LoggerFactory.getLogger(ServiceImpl.class);??
  4. ??
  5. public?void?delete(int?id)?{??
  6. ????log.info("delete?id?is?{}?user"+id);??
  7. }??
  8. ??
  9. public?void?save(UserInfoDTO?dto,boolean?flag)?{??
  10. ????System.out.println("name:"+dto.getName());??
  11. }??
  12. ??
  13. public?void?update(String?xml)?{??
  14. }??
  15. ??
  16. public?String?get(int?id){??
  17. ????return?null;??
  18. }??
  19. ??}??
  20. ?????


于本节只讲解与Spring整合,没有涉及到数据库,因就打印一下传递过来的对象内容来证明整合成功。与spring,hibernate整合后面章节会讲到,请留意后面章节。
?? 传递对象,当然创建对象啦

[java] view plain copy print ?
  1. ??@XmlType(name="ServerUserInfo")??
  2. ??@XmlAccessorType(XmlAccessType.FIELD)??
  3. ??public?class?UserInfoDTO?implements?java.io.Serializable?{??
  4. ??
  5. private?static?final?long?serialVersionUID?=?-4666026219400887433L;??
  6. private?Integer?id;??
  7. private?String?name;??
  8. private?Integer?age;??
  9. private?Integer?address;??
  10. ??
  11. public?Integer?getId()?{??
  12. ????return?id;??
  13. }??
  14. ??
  15. public?void?setId(Integer?id)?{??
  16. ????this.id?=?id;??
  17. }??
  18. ??
  19. public?String?getName()?{??
  20. ????return?name;??
  21. }??
  22. ??
  23. public?void?setName(String?name)?{??
  24. ????this.name?=?name;??
  25. }??
  26. ??
  27. public?Integer?getAge()?{??
  28. ????return?age;??
  29. }??
  30. ??
  31. public?void?setAge(Integer?age)?{??
  32. ????this.age?=?age;??
  33. }??
  34. ??
  35. public?Integer?getAddress()?{??
  36. ????return?address;??
  37. }??
  38. ??
  39. public?void?setAddress(Integer?address)?{??
  40. ????this.address?=?address;??
  41. }??
  42. ??
  43. public?UserInfoDTO()?{??
  44. }??
  45. ??
  46. ???}??


做了这么多工作,有人又会问,怎么现在做的与spring框架就没一点联系,呵呵,确实是这样。开戏开场了,利用Spring来发布WebService接口:

[html] view plain copy print ?
  1. <?xml?version="1.0"?encoding="UTF-8"?>??
  2. <beans?xmlns="http://www.springframework.org/schema/beans"??
  3. ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
  4. ????[color=red]xmlns:jaxws="http://cxf.apache.org/jaxws"[/color]??
  5. ????xsi:schemaLocation="??
  6. ????????http://www.springframework.org/schema/beans???
  7. ????????http://www.springframework.org/schema/beans/spring-beans-2.0.xsd??
  8. ????????http://cxf.apache.org/jaxws???
  9. ????????http://cxf.apache.org/schemas/jaxws.xsd">??
  10. ????[color=red]??
  11. ????????<!--导入与CXF框架有关的xml-->??
  12. ????????<import?resource="classpath:META-INF/cxf/cxf.xml"?/>??
  13. ????<import?resource="classpath:META-INF/cxf/cxf-extension-soap.xml"?/>??
  14. ????<import?resource="classpath:META-INF/cxf/cxf-servlet.xml"?/>[/color]??
  15. ??
  16. ????????<!--布布WebService接口-->??
  17. ????<jaxws:endpoint?id="service"??
  18. ????????implementor="com.itdcl.service.ServiceImpl"?address="/Service">??
  19. ??????????
  20. ????</jaxws:endpoint>??
  21. </beans>??


服务端开发工作基本结束。现在打包部署到Tomcat6.0.18(本人目前使用的测试服务器,你当然可以使用别的服务器)
??? 服务器启动完成后,打开浏览器在地址栏中输入http://localhost:port/project name/Service?wsdl看看接口是否发成功。
??? 接下来就是开发一个客户端了。
??? 另建一个web project,现在前面的参数配置要起作用了,cmd进入DOS环境下输入wsdl2java -p com.itdcl.service(自定义包名) http://localhost:port/project name/Service?wsdl(前提是服务器没停止)
??? 敲击Enter,wsdl2java工具帮你将发布出来的wsdl文件转换成webservice接口,到指定目录下将com.itdcl.service拷到刚才另建的web project的src目录下。
??? 现在,我们就来创建一个客户端程序:

[java] view plain copy print ?
  1. ????public?class?SampleClient?{??
  2. ??
  3. ublic?static?void?main(String[]?args)?{??
  4. ApplicationContext?context?=?new?ClassPathXmlApplicationContext(??
  5. ????????"beans.xml");??
  6. ????
  7. ?IService?service?=?(IService)context.getBean("service");??
  8. ?ServerUserInfo?userInfo?=?new?ServerUserInfo();??
  9. ?userInfo.setAddress(1);??
  10. ?userInfo.setAge(100);??
  11. ?userInfo.setName("Jason");??
  12. ??
  13. ?service.save(userInfo,true);??
  14. ?service.delete(1);??
  15. ??
  16. ??
  17. ?}??


看得仔细的朋友就会问了,ServerUserInfo 这个类那来的,你进到com.itdcl.service目录下就会看到,是WebService发布出来的。
??? 到目前为止,客户端还没有完成,你没有看到程序中ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");这个bean.xml就是spring框架来注删除WebService接口的。好啦,创建一个bean.xml,内容如下:

[html] view plain copy print ?
  1. ??<?xml?version="1.0"?encoding="UTF-8"?>??
  2. ??<beans?xmlns="http://www.springframework.org/schema/beans"??
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"??
  4. [color=red]xmlns:jaxws="http://cxf.apache.org/jaxws[/color]"??
  5. xsi:schemaLocation="??
  6. ????http://www.springframework.org/schema/beans???
  7. ????http://www.springframework.org/schema/beans/spring-beans-2.0.xsd??
  8. ????[color=red]http://cxf.apache.org/jaxws???
  9. ????http://cxf.apache.org/schemas/jaxws.xsd[/color]">??
  10. <jaxws:client?id="service"??
  11. ????address="http://localhost:9999/cxf/Service"??
  12. ????serviceClass="com.itdcl.service.IService"?/>??
  13. ??</beans>??

留意一下绿色字体 ??? 剩下的事就是运行客户端程序了,没有异常抛出,打印出:name:Josen,则恭喜你CXF框架与Spring整合成功。

(编辑:李大同)

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

    推荐文章
      热点阅读