CXF整合spring例項
本文為CXF3.x整合spring4.x
關於CXF的介紹可以自行百度,這裡直接上例項程式碼:
1.新建maven project,在pom中新增 cxf所依賴的jar包,spring,mybatis等其他所依賴的jar包
pom內容如下:
<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.bojoy</groupId> <artifactId>abojoy-user</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>war</packaging> <dependencies> <!-- 1.資料庫連線 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>5.1.38</version> </dependency> <dependency> <groupId>commons-dbcp</groupId> <artifactId>commons-dbcp</artifactId> <version>1.3</version> </dependency> <dependency> <groupId>commons-pool</groupId> <artifactId>commons-pool</artifactId> <version>1.5.5</version> </dependency> <!-- 2.mybatis --> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis</artifactId> <version>3.2.8</version> </dependency> <dependency> <groupId>org.mybatis</groupId> <artifactId>mybatis-spring</artifactId> <version>1.2.2</version> </dependency> <!-- 3.Spring --> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-context</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-jdbc</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-orm</artifactId> <version>4.0.0.RELEASE</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>4.0.0.RELEASE</version> </dependency> <!-- 4.輔助 --> <dependency> <groupId>javax.servlet</groupId> <artifactId>servlet-api</artifactId> <version>2.5</version> <scope>provided</scope> </dependency> <dependency> <groupId>log4j</groupId> <artifactId>log4j</artifactId> <version>1.2.17</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <version>1.7.7</version> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-log4j12</artifactId> <version>1.7.7</version> </dependency> <!-- 5.CXF --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-transports-http</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-ws-security</artifactId> <version>3.0.5</version> </dependency> <dependency> <groupId>org.apache.ws.security</groupId> <artifactId>wss4j</artifactId> <version>1.5.2</version> </dependency> </dependencies> </project>
2.WEB-INF下的web.xml中新增spring監聽器ContextLoaderListerner和CXFServlet 整個web.xml內容如下
<?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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <!-- 1.啟動spring容器 --> <!-- needed for ContextLoaderListener --> <context-param> <param-name>contextConfigLocation</param-name> <param-value>classpath:applicationContext.xml</param-value> </context-param> <!-- Bootstraps the root web application context before servlet initialization --> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> <servlet> <servlet-name>cxf</servlet-name> <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>cxf</servlet-name> <url-pattern>/*</url-pattern> </servlet-mapping> </web-app>
3.整合mybaits,和cxf框架
3.1 配置spring檔案
在src/main/resources下新建 applicationContext.xml,內容如下:其中要beans新增xmlns:jaxws="http://cxf.apache.org/jaxws"和 在xsi:schemaLocation=後新增http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd 並在Window-Preferences-XML-XML Catalog中配置相應的約束。約束可以輸入 http://cxf.apache.org/jaxws下載右擊然後儲存至本地 如果沒有新增約束,會報萬用字元的匹配很全面, 但無法找到元素 jaxws:server異常。
applicationcontext內容如下:
<?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:context="http://www.springframework.org/schema/context"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd">
<context:property-placeholder location="classpath:dbconfig.properties" />
<!--1. 配置資料來源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${driverClassName}" />
<property name="url" value="${url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
<!-- 2.和mybatis整合 -->
<bean id="sqlSessionFactoryBean" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<property name="configLocation" value="classpath:mybatis-config.xml" />
<!-- mapper檔案和mapper介面在相同包下不用配置,不同包下需要配置 一下內容 -->
<!-- <property name="mapperLocations" value="classpath:mapper/*.xml"></property> -->
</bean>
<!-- 3.將mapper介面掃描進入spring Ioc容器 -->
<!-- mapper的批量掃描,從mapper的包中掃描mapper的介面,自動建立代理物件並且在spring的容器中註冊,這樣就不用再spring配置檔案xml中配置bean了,它繼承了FactoryBean
呼叫了getObject() 方法返回所需要的bean -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.bojoy.mapper" />
<!-- 單個數據源時候不用配置,多個數據源的時候要配置 -->
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactoryBean" />
</bean>
<jaxws:endpoint address="/testServiceInf"
implementorClass="com.bojoy.service.LoginServiceInf">
<jaxws:implementor>
<bean class="com.bojoy.service.LoginServiceImp"></bean>
</jaxws:implementor>
</jaxws:endpoint>
</beans>
3.2新建dbconfig.properties並新增內容
#oracle.jdbc.driver.OracleDriver
#jdbc:oracle:thin:@localhost:1521:v6orcl
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/user?useUnicode=true&characterEncoding=UTF8
jdbc.username=root
jdbc.password=123456
3.3配置log4j
log4j.rootLogger=DEBUG, b
log4j.appender.b=org.apache.log4j.ConsoleAppender
log4j.appender.b.layout=org.apache.log4j.PatternLayout
log4j.appender.b.layout.ConversionPattern=%5p %m%n
#
log4j.logger.org.mybatis=DEBUG
#log4j.logger.org.apache.struts2=on
#log4j.logger.com.opensymphony.xwork2=off
log4j.logger.com.ibatis=on
#log4j.logger.org.hibernate=OFF
log4j.logger.org.springframework=off
#log4j.logger.com.opensymphony.xwork2=ERROR
3.4新建mybatis配置檔案mybatis-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration SYSTEM "http://mybatis.org/dtd/mybatis-3-config.dtd" >
<configuration>
<!-- 如果mapper檔案和介面在同一個包中,這個就不需要寫了-->
<!-- <mappers>
<package name="com/bojoy/mapper" />
</mappers> -->
</configuration>
4.編寫bean和mapper,service 內容如下:
4.1 javabean內容如下
package com.bojoy.bean;
public class T_MALL_ADDRESS {
private int id;
private String yh_dz;
private String dzzt;
private int yh_id;
private String shjr;
private String lxfsh;
public String getShjr() {
return shjr;
}
public void setShjr(String shjr) {
this.shjr = shjr;
}
public String getLxfsh() {
return lxfsh;
}
public void setLxfsh(String lxfsh) {
this.lxfsh = lxfsh;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getYh_dz() {
return yh_dz;
}
public void setYh_dz(String yh_dz) {
this.yh_dz = yh_dz;
}
public String getDzzt() {
return dzzt;
}
public void setDzzt(String dzzt) {
this.dzzt = dzzt;
}
public int getYh_id() {
return yh_id;
}
public void setYh_id(int yh_id) {
this.yh_id = yh_id;
}
}
package com.bojoy.bean;
public class T_MALL_USER {
private int id;
private String yh_mch;
private String yh_nch;
private String yh_mm;
private String yh_xm;
private String yh_shjh;
private String yh_yx;
private String yh_tx;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getYh_mch() {
return yh_mch;
}
public void setYh_mch(String yh_mch) {
this.yh_mch = yh_mch;
}
public String getYh_nch() {
return yh_nch;
}
public void setYh_nch(String yh_nch) {
this.yh_nch = yh_nch;
}
public String getYh_mm() {
return yh_mm;
}
public void setYh_mm(String yh_mm) {
this.yh_mm = yh_mm;
}
public String getYh_xm() {
return yh_xm;
}
public void setYh_xm(String yh_xm) {
this.yh_xm = yh_xm;
}
public String getYh_shjh() {
return yh_shjh;
}
public void setYh_shjh(String yh_shjh) {
this.yh_shjh = yh_shjh;
}
public String getYh_yx() {
return yh_yx;
}
public void setYh_yx(String yh_yx) {
this.yh_yx = yh_yx;
}
public String getYh_tx() {
return yh_tx;
}
public void setYh_tx(String yh_tx) {
this.yh_tx = yh_tx;
}
}
4.2 新建mapper介面和檔案
LoginMapper介面內容如下
package com.bojoy.mapper;
import com.bojoy.bean.T_MALL_USER;
public interface LoginMapper {
T_MALL_USER login(T_MALL_USER user);
}
LoginMapper.xml內容如下
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper SYSTEM "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="com.bojoy.mapper.LoginMapper">
<select id="login" parameterType="com.bojoy.bean.T_MALL_USER"
resultType="com.bojoy.bean.T_MALL_USER">
select * from t_mall_user where
yh_mch=#{yh_mch}
and yh_mm= #{yh_mm}
</select>
</mapper>
4.3新建webservice介面和繼承類,程式碼如下
LoginServiceInf介面程式碼如下:
package com.bojoy.service;
import javax.jws.WebService;
import com.bojoy.bean.T_MALL_USER;
@WebService
public interface LoginServiceInf {
T_MALL_USER login(T_MALL_USER user);
}
LoginServiceImp繼承類如下:
package com.bojoy.service;
import org.springframework.beans.factory.annotation.Autowired;
import com.bojoy.bean.T_MALL_USER;
import com.bojoy.mapper.LoginMapper;
public class LoginServiceImp implements LoginServiceInf {
@Autowired
LoginMapper loginMapper;
@Override
public T_MALL_USER login(T_MALL_USER user) {
T_MALL_USER user_info = loginMapper.login(user);
return user_info;
}
}
右擊工程run as on server 如下
可以開啟SOAPUI工具進行測試
5.編寫客戶端程式碼呼叫如下 。
新建java工程,直接拷貝剛才的LoginServiceInf.java 到新建的包com.bojoy.service下,
然後編寫測試類Test01進行測試
package com.sale.test;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import com.bojoy.service.LoginServiceInf;
import com.sale.bean.T_MALL_USER;
public class Test01 {
public static void main(String[] args) {
JaxWsProxyFactoryBean jpf = new JaxWsProxyFactoryBean();
jpf.setAddress("http://localhost:8083/abojoy-user/testServiceInf?wsdl");
jpf.setServiceClass(LoginServiceInf.class);
LoginServiceInf loginServiceInf = (LoginServiceInf) jpf.create();
T_MALL_USER user = new T_MALL_USER();
user.setYh_mch("xiaoming");
user.setYh_mm("123");
T_MALL_USER user_info = loginServiceInf.login(user);
System.out.println(user_info.toString());
}
}
結果如下:
表示成功