详解CXF与Spring的整合

 

 两天的学习,算是初步把CXF框架给给了解了一下,由于先前有WCF的基础,因此学习起来也并不是很难,下面就通过整合一个Spring+CXF框架来为大家介绍一下有关CXF的知识。

 1.什么是CXF

Apache CXF =Celtix + Xfire

支持多种协议:

a)        SOAP1.1,1,2

b)        HTTP

c)        CORBA(CommonObject Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)

d)        并可以与Spring进行快速无缝的整合

e)        灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),IBMWS,BeaWS上面。


 2.环境配置

 需要下载apache-cxf,并配置环境变量jdk和CXF_HOME的环境变量,其中CXF_HOME如下

 详解CXF与Spring的整合_第1张图片

最后配置path和classpath

a)        Path = %JAVA_HOME%\bin;%CXF_HOME%\bin;

b)        CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar;.\build\classes


3.整合Spring+CXF

3.1 新建web项目

项目目录结构为

详解CXF与Spring的整合_第2张图片

放置Spring中的jar包,至于需要那些jar包,手把手搭建SSH+Activiti(附加源码) 

 CXF中的jar包为CXF_HOME\lib下面的全部jar包


3.2 Dao————Service

其中Dao至Service包,就不在多说了,就是一个简单的Spring注入的层级管理,不太懂的,到时候看下面的源码,例如Servcie实现类

<span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">package com.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.Model.Person;
import com.dao.PersonDao;
import com.service.PersonService;

@Service
public class PersonServiceImpl implements PersonService{	
	@Autowired
	PersonDao personDao;
	public void add(Person person) {
		personDao.add(person);
		
	}

}
</span></span>


3.3 配置文件讲解

bean.xml:为Spring的配置文件,用来通过扫描包结构,通过注解进行管理依赖

cxf.xml:是CXF的核心配置文件,主要的有关CXF都在这里配置,如下

<span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"><?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:jaxws="http://cxf.apache.org/jaxws"
	xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd
            http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
            http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
	<!-- 引入CXF Bean定义如下,早期的版本中使用 -->
	<import resource="classpath:META-INF/cxf/cxf.xml" />
	<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
	<import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
	
	<!-- ===============配置带有接口的webservice服务================= address:tomcat的host 
		http://ip:port/projectName/service/后面的一端路径 http://ip:port/projectName/service/bye 
		serviceClass:服务接口的类 -->
	<jaxws:server address="/person" serviceClass="com.service.PersonService">
		<!-- 服务接口的实现类 -->
		<jaxws:serviceBean>
			<bean class="com.service.impl.PersonServiceImpl"></bean>
		</jaxws:serviceBean>
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
		</jaxws:inInterceptors>
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
		</jaxws:outInterceptors>
	</jaxws:server>
	
	
	
	
	<!-- ===============配置类的形式webservice服务================= address:tomcat的host 
		http://ip:port/projectName/service/后面的一端路径 http://ip:port/projectName/service/hello 
		implementor:指定具体的服务的类 -->
	<!-- <jaxws:endpoint id="hello" address="/hello"
		implementor="com.web.service.HelloService">

		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
		</jaxws:outInterceptors>
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
		</jaxws:inInterceptors>
	</jaxws:endpoint> -->
</beans>
</span></span>


上述文件中,有两种服务发布,一种是以接口形式,一种是以类的形式

web.xml:配置的是CXF的核心过滤器以及Spring的监听器

<span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;"><?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_2_5.xsd"
		id="WebApp_ID" version="2.5">
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:cxf-servlet.xml</param-value>
	</context-param>
	
    <servlet>
    	<servlet-name>cxf</servlet-name>
    	<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    	<!-- <init-param>
    		<param-name>config-location</param-name>
    		<param-value>classpath:cxf.xml</param-value>
    	</init-param>
    	<load-on-startup>1</load-on-startup> -->
    </servlet>
    <servlet-mapping>
    	<servlet-name>cxf</servlet-name>
    	<url-pattern>/service/*</url-pattern>
    </servlet-mapping>
    
</web-app>
</span></span>

上面就是整个CXF+Spring的整合,部署到Tomact中,进行访问,访问地址如下

http://localhost:8080/Spring_CXF/service/person?wsdl


 4.客户端访问

如果要通过客户端访问的话,就需要把服务的代码给Down下来,如果CXF_HOME配置正确的话,通过以下来Down下来服务的代码

详解CXF与Spring的整合_第3张图片


关于WSDL2JAVA解释如下

在cxf中,也提供了一个用于生成客户端调用代码的工具。它的功能就如同wsimport一样。

先让我们了解一下cxf的wsdl2java工具,可以生成一堆客户端调用的代码。既可以生成SOAP1.1也可以生成SOAP1.2

此工具位于cxf_home/bin目录下。参数与wsimport有所不同。

它包含以下参数:

a)        d参数,指定代码生成的目录。

b)        p参数,指定生成的新的包结构。

Down下服务端代码后,直接放置到客户端中调用即可,客户端代码如下

<span style="font-family:Comic Sans MS;font-size:18px;"><span style="font-family:Comic Sans MS;font-size:18px;">package com.client;

import com.server.Person;
import com.server.PersonService;
import com.server.PersonServiceService;
import com.service.HelloService;
import com.service.HelloServiceService;

public class client {

	public static void main(String[] args) {

		PersonServiceService personServiceService = new PersonServiceService();
		PersonService personService = personServiceService
				.getPersonServicePort();
		Person person=new Person();
		person.setAge(30);
		person.setName("张三");
		personService.add(person);
		
	}
}
</span></span>




你可能感兴趣的:(详解CXF与Spring的整合)