关闭

CXF 和Spring 整合,客户端代码如何调用举例说明

1062人阅读 评论(1) 收藏 举报
分类:

通过前面两节的讲解,相信你对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
  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
  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
  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
  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
  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
  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
  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整合成功。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:192951次
    • 积分:4681
    • 等级:
    • 排名:第6194名
    • 原创:199篇
    • 转载:379篇
    • 译文:1篇
    • 评论:62条