CXF系列(四):CXF整合spring
生活随笔
收集整理的這篇文章主要介紹了
CXF系列(四):CXF整合spring
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
<project?xmlns="http://maven.apache.org/POM/4.0.0"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?? ??xsi:schemaLocation="http://maven.apache.org/POM/4.0.0?http://maven.apache.org/xsd/maven-4.0.0.xsd">?? ??<modelVersion>4.0.0</modelVersion>?? ?? ??<groupId>com.qqw.example</groupId>?? ??<artifactId>CXF_Spring</artifactId>?? ??<version>0.0.1-SNAPSHOT</version>?? ??<packaging>jar</packaging>?? ?? ??<name>CXF_Spring</name>?? ??<url>http://maven.apache.org</url>?? ?? ??<properties>?? ????<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>?? ??</properties>?? ?? ??<dependencies>?? ????<dependency>?? ??????<groupId>junit</groupId>?? ??????<artifactId>junit</artifactId>?? ??????<version>3.8.1</version>?? ??????<scope>test</scope>?? ????</dependency>?? ?????? ????<!--?添加Spring支持?-->?? ????<dependency>?? ????????<groupId>org.springframework</groupId>?? ????????<artifactId>spring-core</artifactId>?? ????????<version>4.1.7.RELEASE</version>?? ????</dependency>?? ????<dependency>?? ????????<groupId>org.springframework</groupId>?? ????????<artifactId>spring-beans</artifactId>?? ????????<version>4.1.7.RELEASE</version>?? ????</dependency>?? ????<dependency>?? ?????????<groupId>org.springframework</groupId>?? ?????????<artifactId>spring-tx</artifactId>?? ?????????<version>4.1.7.RELEASE</version>?? ????????</dependency>?? ????<dependency>?? ????????<groupId>org.springframework</groupId>?? ????????<artifactId>spring-context</artifactId>?? ????????<version>4.1.7.RELEASE</version>?? ????</dependency>?? ????<dependency>?? ????????<groupId>org.springframework</groupId>?? ????????<artifactId>spring-context-support</artifactId>?? ????????<version>4.1.7.RELEASE</version>?? ????</dependency>?? ??????? ????<dependency>?? ????????<groupId>org.springframework</groupId>?? ????????<artifactId>spring-web</artifactId>?? ????????<version>4.1.7.RELEASE</version>?? ????</dependency>?? ??????? ????<dependency>?? ????????<groupId>org.springframework</groupId>?? ????????<artifactId>spring-webmvc</artifactId>?? ????????<version>4.1.7.RELEASE</version>?? ????</dependency>?? ??????? ????<dependency>?? ????????<groupId>org.springframework</groupId>?? ????????<artifactId>spring-aop</artifactId>?? ????????<version>4.1.7.RELEASE</version>?? ????</dependency>?? ??????? ??????? ????<dependency>?? ????????<groupId>org.springframework</groupId>?? ????????<artifactId>spring-aspects</artifactId>?? ????????<version>4.1.7.RELEASE</version>?? ????</dependency>?? ??????? ????<dependency>?? ????????<groupId>org.springframework</groupId>?? ????????<artifactId>spring-jdbc</artifactId>?? ????????<version>4.1.7.RELEASE</version>?? ????</dependency>?? ?????? ????<!--?添加cxf支持??-->?? ????<dependency>?? ????????<groupId>org.apache.cxf</groupId>?? ????????<artifactId>cxf-core</artifactId>?? ????????<version>3.1.5</version>?? ????</dependency>?? ??????? ????<dependency>?? ????????<groupId>org.apache.cxf</groupId>?? ????????<artifactId>cxf-rt-frontend-jaxws</artifactId>?? ????????<version>3.1.5</version>?? ????</dependency>?? ??????? ????<dependency>?? ????????<groupId>org.apache.cxf</groupId>?? ????????<artifactId>cxf-rt-transports-http</artifactId>?? ????????<version>3.1.5</version>?? ????</dependency>?? ?????? ????<!--實現日志??-->?? ????<dependency>?? ????????<groupId>org.slf4j</groupId>?? ????????<artifactId>slf4j-log4j12</artifactId>?? ????????<version>1.7.22</version>?? ????</dependency>?? ?????? ??</dependencies>?? </project>??
<?xml?version="1.0"?encoding="UTF-8"?>?????? <beans?xmlns="http://www.springframework.org/schema/beans"?????? ????xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"????? ????xmlns:p="http://www.springframework.org/schema/p"???? ????xmlns:aop="http://www.springframework.org/schema/aop"????? ????xmlns:context="http://www.springframework.org/schema/context"???? ????xmlns:jee="http://www.springframework.org/schema/jee"???? ????xmlns:tx="http://www.springframework.org/schema/tx"???? ????xmlns:jaxws="http://cxf.apache.org/jaxws"?? ????xsi:schemaLocation="?????? ????????http://www.springframework.org/schema/aop?http://www.springframework.org/schema/aop/spring-aop-4.0.xsd???? ????????http://www.springframework.org/schema/beans?http://www.springframework.org/schema/beans/spring-beans-4.0.xsd???? ????????http://www.springframework.org/schema/context?http://www.springframework.org/schema/context/spring-context-4.0.xsd???? ????????http://www.springframework.org/schema/jee?http://www.springframework.org/schema/jee/spring-jee-4.0.xsd???? ????????http://www.springframework.org/schema/tx?http://www.springframework.org/schema/tx/spring-tx-4.0.xsd?? ????????http://cxf.apache.org/jaxws?http://cxf.apache.org/schemas/jaxws.xsd">?????? ?????????? ????????<!--這兩個是必須要加的-->?? ????<import?resource="classpath:META-INF/cxf/cxf.xml"/>?? ????????<import?resource="classpath:META-INF/cxf/cxf-servlet.xml"/>?? ?????? ????????<!--?自動掃描?-->?? ????<context:component-scan?base-package="com.qqw"?/>?? ?????? ????<!--?定義服務提供者??-->?? ????<jaxws:endpoint?? ????????implementor="#helloWorld"??//這個就是接口實現類的交給spring容器管理的bean的名稱?? ????????address="/HelloWorld">???//這個是訪問的具體地址,這個任意起名?? ????????<!--?添加in攔截器?-->?? ????????<jaxws:inInterceptors>?? ?????????????<bean?class="org.apache.cxf.interceptor.LoggingInInterceptor"/>?? ?????????????<bean?class="com.qqw.interceptor.MyInterceptor"/>?? ????????</jaxws:inInterceptors>?? ????????<!--?添加out攔截器?-->?? ????????<jaxws:outInterceptors>?? ?????????????<bean?class="org.apache.cxf.interceptor.LoggingInInterceptor"/>?? ????????</jaxws:outInterceptors>?? ?????</jaxws:endpoint>?? </beans>??
3:把前面的cxf服務端的代碼都搬過來,去掉那個main方法。接口的實現類只需加上個注釋 [java]view plaincopy package?com.qqw.webserviceImpl;?? ?? import?java.util.ArrayList;?? import?java.util.HashMap;?? import?java.util.List;?? import?java.util.Map;?? ?? import?javax.jws.WebService;?? ?? import?org.springframework.stereotype.Component;?? ?? import?com.qqw.entity.Role;?? import?com.qqw.entity.User;?? import?com.qqw.webservice.HelloWorld;?? ?? @Component("helloWorld")//和上面配置文件對應的名稱?? @WebService?? public?class?HelloWorldImpl?implements?HelloWorld{?? ?? ????@Override?? ????public?String?say(String?str)?{?? ?????????? ????????return?"hello:"+str;?? ????}?? ?? ????@Override?? ????public?List<Role>?getUserRole(User?user)?{?? ?????????? ????????List<Role>?rList=null;?? ????????if(user!=null){?? ????????????rList=new?ArrayList<Role>();?? ????????????if(user.getName().equals("qqw")){?? ????????????????rList.add(new?Role(1,?"總經理"));?? ????????????????rList.add(new?Role(2,?"技術總監"));?? ????????????}else{?? ????????????????rList.add(new?Role(3,?"程序呀U呢"));?? ????????????}?? ?????????????? ????????}?? ????????return?rList;?? ????}?? ?? ????@Override?? ????public?Map<String,?List<Role>>?getMap()?{?? ?????????? ????????Map<String,?List<Role>>?map=new?HashMap<String,?List<Role>>();?? ????????List<Role>?list=new?ArrayList<Role>();?? ????????list.add(new?Role(1,?"總經理"));?? ????????list.add(new?Role(2,?"技術總監"));?? ????????List<Role>?list1=new?ArrayList<Role>();?? ????????list1.add(new?Role(3,?"程序呀U呢"));?? ????????map.put("qqw",?list);?? ????????map.put("qqw1",?list1);?? ????????return?map;?? ????}?? ?? }??
4:web.xml [html]view plaincopy <?xml?version="1.0"?encoding="UTF-8"?>?? <web-app?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?xmlns="http://java.sun.com/xml/ns/javaee"?xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"?xsi:schemaLocation="http://java.sun.com/xml/ns/javaee?http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"?id="WebApp_ID"?version="3.0">?? ??<display-name>CXF_Spring</display-name>?? ??<welcome-file-list>?? ????<welcome-file>index.html</welcome-file>?? ????<welcome-file>index.htm</welcome-file>?? ????<welcome-file>index.jsp</welcome-file>?? ????<welcome-file>default.html</welcome-file>?? ????<welcome-file>default.htm</welcome-file>?? ????<welcome-file>default.jsp</welcome-file>?? ??</welcome-file-list>?? ??<!--?處理編碼格式?-->?? ????<filter>???? ????????<filter-name>characterEncodingFilter</filter-name>???? ????????<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>???? ????????<init-param>???? ????????????<param-name>encoding</param-name>???? ????????????<param-value>UTF-8</param-value>???? ????????</init-param>???? ????????<init-param>???? ????????????<param-name>forceEncoding</param-name>???? ????????????<param-value>true</param-value>???? ????????</init-param>???? ????</filter>???? ????<filter-mapping>???? ????????<filter-name>characterEncodingFilter</filter-name>???? ????????<url-pattern>/*</url-pattern>???? ????</filter-mapping>?? ?????? ????<!--?Log4J?Start?-->?? ????<context-param>?? ????????<param-name>log4jConfigLocation</param-name>?? ????????<param-value>classpath:log4j.properties</param-value>?? ????</context-param>?? ????<context-param>?? ????????<param-name>log4jRefreshInterval</param-name>?? ????????<param-value>6000</param-value>?? ????</context-param>?? ????<!--?Spring?Log4J?config?-->?? ????<listener>?? ????????<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>?? ????</listener>?? ?????? ????<!--?Spring配置文件?-->?? ????<context-param>?? ????????<param-name>contextConfigLocation</param-name>?? ????????<param-value>classpath:applicationContext.xml</param-value>?? ????</context-param>?? ????<listener>?? ????????<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>?? ????</listener>?? ?????? ????????<!--這個是必須加的-->?? ????<servlet>???? ?????<servlet-name>CXFServlet</servlet-name>???? ?????<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>???? ????</servlet>???? ??????? ????<servlet-mapping>???? ???????<servlet-name>CXFServlet</servlet-name>???? ???????<url-pattern>/webservice/*</url-pattern>???? ????</servlet-mapping>?? ?????? ???? </web-app>??
5:只要把項目部署到tomcat,然后啟動就行了。客戶端的調用這時候會有變化,把客戶端的原先生成的代碼刪掉,重新執行自動生成命令,這里我不粘圖了,具體命令參考前面的,本文只需要把后面改成wsdl2java http://localhost:8080/CXF_spring/webservice/HelloWorld?wsdl就行,刷新客戶端。客戶端調用 [java]view plaincopy package?com.qqw.webservice;?? ?? import?java.util.List;?? ?? import?org.apache.cxf.frontend.ClientProxy;?? import?org.apache.cxf.interceptor.LoggingInInterceptor;?? import?org.apache.cxf.interceptor.LoggingOutInterceptor;?? ?? import?com.qqw.interceptor.AddHeaderInterceptor;?? import?com.qqw.webserviceimpl.HelloWorldImplService;?? ?? public?class?Client?{?? ?? ????/**? ?????*?@param?args? ?????*/?? ????public?static?void?main(String[]?args)?{?? ????????//?TODO?Auto-generated?method?stub?? ?? ????????HelloWorldImplService?hService=new?HelloWorldImplService();?? ????????HelloWorld?helloWorld?=?hService.getHelloWorldImplPort();?? ?????????? ????????org.apache.cxf.endpoint.Client?client?=?ClientProxy.getClient(helloWorld);?? ????????client.getOutInterceptors().add(new?LoggingOutInterceptor());//out日志?? ????????client.getInInterceptors().add(new?LoggingInInterceptor());//in日志?? ????????client.getOutInterceptors().add(new?AddHeaderInterceptor("qqw","123456"));?//?添加自定義攔截器?? ?????? ????????User?user=new?User();?? ????????user.setName("qqw1");?? ????????List<Role>?roleList?=?helloWorld.getUserRole(user);?? ????????for(int?i=0;i<roleList.size();i++){?? ????????????System.out.println("編號:"+roleList.get(i).getId()+"/角色名稱:"+roleList.get(i).getName());?? ????????}?? ????????MyRoleArray?map?=?helloWorld.getMap();?? ????????List<MyRole>?list?=?map.item;?? ????????for(int?i=0;i<list.size();i++){?? ????????????System.out.print(list.get(i).getKey()+":");?? ????????????for(Role?r:list.get(i).getValue()){?? ????????????????System.out.print(r.getId()+","+r.getName());?? ????????????}?? ????????????System.out.println("================");?? ????????}?? ?????????? ?????????? ????}?? ?? }??
最后運行的效果:
本文將介紹CXF與spring的整合開發,整體實例還是基于前三章。不過現在wsdl服務發布到tomcat,就不用發不到jetty了,相應的一些配置和代碼有所改動。
1:pom.xml
[plain]view plaincopy2:spring的配置文件:applicationContext.xml
[html]view plaincopy3:把前面的cxf服務端的代碼都搬過來,去掉那個main方法。接口的實現類只需加上個注釋 [java]view plaincopy
4:web.xml [html]view plaincopy
5:只要把項目部署到tomcat,然后啟動就行了。客戶端的調用這時候會有變化,把客戶端的原先生成的代碼刪掉,重新執行自動生成命令,這里我不粘圖了,具體命令參考前面的,本文只需要把后面改成wsdl2java http://localhost:8080/CXF_spring/webservice/HelloWorld?wsdl就行,刷新客戶端。客戶端調用 [java]view plaincopy
最后運行的效果:
至此,CXF整合spring完畢!!!???完整代碼
總結
以上是生活随笔為你收集整理的CXF系列(四):CXF整合spring的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GBK 和 UTF8编码
- 下一篇: matlab 裕度指令,稳定裕度的计算开