1. 程式人生 > >CXF整合spring例項

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());
	}

}

結果如下:

表示成功