目录

一、什么是cxf

二、CXF包

三、搭建项目

1.maven依赖

2.web.xml文件

3.启动的配置文件

4.发布的接口和实现

5. xml对应的对象

6. 启动

7. 模拟发送soap报文


整合spring 和cxf框架。

一、什么是cxf

CXF是建立在SOAP协议上的一个Web service框架。

什么事SOAP协议,简单来说就是两个不同项目(开发语言不同等)通过xml文件来描述要传输的东西,然后通过HTTP协议传输,接收方把收到的xml解析成需要的对象使用,返回的时候又用xml封装又通过http协议传输,如此就是SOAP协议。而CXF就是两个项目之间为了提供服务,而开发的一个开源框架,使用CXF框架可以快速搭建web service。CXF就是将项目中暴露出来的接口(服务)包装起来,成为wsdl,使用方通过wsdl来调用这些服务。

二、CXF包

首先肯定是下载cxf包了,当然了可以通过这个地址去下载https://mirror.bit.edu.cn/apache/cxf/3.3.6/。

三、搭建项目

这个应该是大家最关注的点了,所以,我们开始

1.maven依赖

既然开始搭建项目,那么必不可少的就是依赖包了。不说了直接上代码。

<?xml version="1.0"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><parent><groupId>com.tzw</groupId><artifactId>tzw-parent</artifactId><version>0.0.1-SNAPSHOT</version></parent><groupId>com.tzw</groupId><artifactId>tzw-three</artifactId><version>0.0.1-SNAPSHOT</version><packaging>war</packaging><name>tzw-three Maven Webapp</name><url>http://maven.apache.org</url><properties><spring.version>4.3.16.RELEASE</spring.version></properties><dependencies><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>3.8.1</version><scope>test</scope></dependency><!-- cxf相关的包 --><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-core</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-bindings-soap</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-bindings-xml</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-databinding-jaxb</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-jaxws</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-frontend-simple</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-transports-http</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-ws-addr</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-ws-policy</artifactId><version>3.2.5</version></dependency><dependency><groupId>org.apache.cxf</groupId><artifactId>cxf-rt-wsdl</artifactId><version>3.2.5</version></dependency><!-- spring 的核心工具包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-core</artifactId><version>${spring.version}</version></dependency><!-- 包含web开发时,用到的Spring框架时所需的核心类,包括WebApplicationContext\struts和jsp集成的类,文件上传,fiter类等辅助类 --><dependency><groupId>org.springframework</groupId><artifactId>spring-web</artifactId><version>${spring.version}</version></dependency><!-- 包括spring-mvc框架的所有类,包括国际化,标签,视图展现等相关的类,如果使用了独立的mvc框架,则无需这个jar文件里的任何类 --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>${spring.version}</version></dependency><!-- 包括spring-context的扩展支持,用于mvc --><!-- <dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>${spring.version}</version></dependency> --><!-- spring-aop包,提供aop的实现 --><dependency><groupId>org.springframework</groupId><artifactId>spring-aop</artifactId><version>${spring.version}</version></dependency><!-- spring Ioc的基础实现,包含访问配置文件、创建和管理bean --><dependency><groupId>org.springframework</groupId><artifactId>spring-beans</artifactId><version>${spring.version}</version></dependency><!-- 在基础Ioc功能上提供扩展服务,还包含多种企业级服务的支持,controller、service、等 --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>${spring.version}</version></dependency><!-- spring表达是语言 --><dependency><groupId>org.springframework</groupId><artifactId>spring-expression</artifactId><version>${spring.version}</version></dependency><!-- 为jdbc,hibernate,jdo,jpa提供一致声明式和编程式事务管理 --><dependency><groupId>org.springframework</groupId><artifactId>spring-tx</artifactId><version>${spring.version}</version></dependency><!-- spring对 object/xml映射的支持,可以让java于xml来回切换--><dependency><groupId>org.springframework</groupId><artifactId>spring-oxm</artifactId><version>${spring.version}</version></dependency><!-- 可以减少很多代码的重用 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.16.16</version></dependency><!-- mybatis框架的工具包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.4.2</version></dependency><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.2</version></dependency><!-- spring 和 mybatis整合包 --><dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.3.1</version></dependency><!-- oracle --><dependency><groupId>com.oracle.jdbc</groupId><artifactId>ojdbc7</artifactId><version>12.1.0.2.0</version></dependency><dependency><groupId>org.apache.commons</groupId><artifactId>commons-dbcp2</artifactId><version>2.1.1</version></dependency><!-- spring 连接jdbc的jar包 --><dependency><groupId>org.springframework</groupId><artifactId>spring-jdbc</artifactId><version>${spring.version}</version></dependency><!-- aop必须包 --><!-- <dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${spring.version}</version></dependency> --><!-- aop必须包 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>1.8.10</version></dependency><dependency><groupId>junit</groupId><artifactId>junit</artifactId><version>4.12</version></dependency><dependency><groupId>dom4j</groupId><artifactId>dom4j</artifactId><version>1.6.1</version></dependency><dependency><groupId>org.springframework</groupId><artifactId>spring-context-support</artifactId><version>4.3.15.RELEASE</version></dependency></dependencies><profiles><profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties></profile></profiles><build><finalName>tzw-three</finalName></build>
</project>

2.web.xml文件

搭建好maven库后,我们要发布服务,那么我们就会搭建一个web工程,而web工程最开始的就是web.xml了。

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><display-name>tzw-three</display-name><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-application.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><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>CXFServlet</servlet-name><url-pattern>/ws/*</url-pattern></servlet-mapping>
</web-app>

我们这里对比一下spring+spring mvc的web.xml配置

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:web="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd
http://xmlns.jcp.org/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0"><display-name>tzw-web</display-name><welcome-file-list><welcome-file>index.jsp</welcome-file></welcome-file-list><context-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-application.xml</param-value></context-param><listener><listener-class>org.springframework.web.context.ContextLoaderListener</listener-class></listener><servlet><servlet-name>tzwServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:mvc/mvc-servlet.xml</param-value></init-param></servlet><servlet-mapping><servlet-name>tzwServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping></web-app>

对比结果,其实我们发现,就是吧原来的DispatcherServlet换成了CXFServlet。其他的大致相同。

3.启动的配置文件

同理,cxf启动时也会加载spring配置。这里我加载了spring-application.xml文件。在这里用了import 标签,来加载其他的配置文件。

<?xml version="1.0" encoding="UTF-8"?><!-- 本文件作为Spring加载的配置文件,包含其他Spring配置文件,以避免修改web.xml。 --><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:jms="http://www.springframework.org/schema/jms"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/jms http://www.springframework.org/schema/jms/spring-jms.xsd"><import resource="spring-ws.xml" /> </beans>

spring-ws.xml,在这个文件中才是真正的webservice配置。

<?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.xsdhttp://cxf.apache.org/jaxwshttp://cxf.apache.org/schemas/jaxws.xsd"><bean id="coreTransport" class="com.tzw.transport.CoreTransport"></bean><jaxws:server id="IWTrans" serviceClass="com.tzw.transport.IWTransport" address="/coreTransport"><jaxws:serviceBean><ref bean="coreTransport"></ref>       </jaxws:serviceBean></jaxws:server></beans>

<jaxws:server>标签申明要发布的接口服务,以及访问地址

<jaxws:serviceBean> 一般是接口的实现。

4.发布的接口和实现

接口:IWTransport

package com.tzw.transport;import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;import com.tzw.transbean.Head;
import com.tzw.transbean.Message;@WebService
public interface IWTransport {@WebMethod(action="process")@WebResult(name="response")public Message process(@WebParam(name="request")Message message);}

实现:CoreTransport

package com.tzw.transport;import com.tzw.transbean.Body;
import com.tzw.transbean.Head;
import com.tzw.transbean.Message;import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;@WebService
public class CoreTransport implements IWTransport{public Message process(Message message) {System.out.println("进入WebService服务");System.out.println(message.toString());Message response = new Message();Body body = new Body();body.setContent("收到报文");body.setMsgId("123456");response.setBody(body);return response;}}

在这个接口中,实现的方法是process方法,该方法目前的参数是一个Message类,是一个复杂参数。当然,这个参数也可以是任何简单的参数类型(String int 等)。

既然webservice是将xml文件解析为对象使用,那么Message自然就是所谓的对象。

注解说明:

@WebService  这个是用来申明一个WebService服务的

@WebParam  声明一个WebService参数

@WebMethod 声明一个WebService方法

@WebResult 声明一个WebService 返回值

5. xml对应的对象

Message.java

package com.tzw.transbean;import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import java.io.Serializable;
@XmlRootElement(name = "message")
@XmlAccessorType(XmlAccessType.FIELD)
public class Message implements Serializable{@XmlElement(name = "body")private Body body;@XmlElement(name = "head")private Head head;public Body getBody() {return body;}public void setBody(Body body) {this.body = body;}public Head getHead() {return head;}public void setHead(Head head) {this.head = head;}@Overridepublic String toString() {return "Message [body=" + body + ", head=" + head + "]";}}

Head.java

package com.tzw.transbean;import javax.xml.bind.annotation.*;
import java.io.Serializable;
@XmlRootElement(name = "head")
@XmlAccessorType(XmlAccessType.FIELD)
public class Head implements Serializable{public String getUsername() {return username;}public String getPassword() {return password;}@XmlElement(name = "username")public String username;@XmlElement(name = "password")public String password;public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Head [username=" + username + ", password=" + password + "]";}}

Body.java

package com.tzw.transbean;import javax.xml.bind.annotation.*;
import java.io.Serializable;
@XmlRootElement(name = "head")
@XmlAccessorType(XmlAccessType.FIELD)
public class Head implements Serializable{public String getUsername() {return username;}public String getPassword() {return password;}@XmlElement(name = "username")public String username;@XmlElement(name = "password")public String password;public void setUsername(String username) {this.username = username;}public void setPassword(String password) {this.password = password;}@Overridepublic String toString() {return "Head [username=" + username + ", password=" + password + "]";}}

注解说明

@XmlRootElement  声明一个Xml文件的根元素

@mlAccessorType(XmlAccessType.FIELD) 

@XmlElement 声明一个Xml文件的根元素

6. 启动

将项目放入tomcat中启动。

在这里可以修改想要的参数,tomcat的名称,路径,jdk,端口号

这里指定启动的项目,点击+ 可以添加

这说明一下 tzw-three:war 和 tzw-three:war exploded 

1.war模式这种可以称之为是发布模式,就是先将WEB工程打成war包,然后再将其上传到服务器进行发布 。;
2.war exploded模式是将WEB工程以当前文件夹的位置关系上传到服务器,即直接把文件夹、jsp页面 、classes等等移到Tomcat 部署文件夹里面,进行加载部署。因此这种方式支持热部署,一般在开发的时候也是用这种方式。

当tomcat启动成功之后

我们输入http://localhost:8080/tzw-three/ws,这里为什么加/ws呢,别忘了,这是我们web.xml中配置的路径

如果展示上图则表示成功,接着我们点击 WSDL:.......,就会出现一下页面。当然直接输入http://localhost:8080/tzw-three/ws/coreTransport?wsdl也是可以的。

7. 模拟发送soap报文

接下来我们用soupUI模拟发送报文。

1.new soap project

2 创建,

3.生成

点击运行,收到响应报文。

JAXB(Java API for XML Binding)注解

@XmlRootElement   将一个Java类映射为一段XML的根节点
参数:name          定义这个根节点的名称
      namespace    定义这个根节点命名空间

@XmlAccessorType  定义映射这个类中的何种类型需要映射到XML。可接收四个参数,分别是:
      XmlAccessType.FIELD:映射这个类中的所有字段到XML
      XmlAccessType.PROPERTY:映射这个类中的属性(get/set方法)到XML
      XmlAccessType.PUBLIC_MEMBER:将这个类中的所有public的field或property同时映射到XML(默认)
      XmlAccessType.NONE:不映射

@XmlElement  指定一个字段或get/set方法映射到XML的节点。如,当一个类的XmlAccessorType 被标注为PROPERTY时,在某一个没有get/set方法的字段上标注此注解,即可将该字段映射到XML。
参数:defaultValue  指定节点默认值
         name             指定节点名称
         namespace    指定节点命名空间
         required         是否必须(默认为false)
         nillable           该字段是否包含 nillable="true" 属性(默认为false)
         type               定义该字段或属性的关联类型
————————————————
版权声明:本文为CSDN博主「jstkss」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/zlgydx/article/details/51217359

这就完成cxf搭建webService并发布,接下来我们将进行优化等,还有拦截器等学习。

spring + cxf相关推荐

  1. spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)

    这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题 场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据: WebSer ...

  2. 使用Spring+CXF开发WebService

    Apache CXF 提供方便的Spring整合方法,可以通过注解.Spring标签式配置来暴露Web Services和消费Web Services 各种类型的Annotation.@WebServ ...

  3. Spring+CXF之集成

    本文介绍CXF+Spring使用注解的集成,用到的接口等java类与 XFire+Spring整合相同,不再给出,只给出配置信息.使用CXF版本为2.6.2,Spring为3.1.1,测试环境为Tom ...

  4. spring+cxf调用webservice接口

    一.导入Spring和cxf的jar,在第一节中有说明. 二.编写Spring配置文件ClientBeans.xml ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ...

  5. Maven+Spring+CXF+Tomcat7 简单例子实现webservice

    这个例子需要建三个Maven项目,其中一个为父项目,另外两个为子项目 首先,建立父项目testParent,选择quickstart: 输入项目名称和模块名称,然后创建: 然后建立子项目testInt ...

  6. Spring+CXF的WebServices简单示例

    本文就最简单的WebServices示例来演示Spring和CXF的整合. 使用Maven创建webapp项目,pom如下 <properties><cxf.version>2 ...

  7. Eclipse+Maven+Spring+CXF 构建webservice 服务

    一.   软件准备 Eclipse 4.2.1 Maven 2.2.1 Spring 3.2.6 CXF 3.0.2 软件下载和Eclipse 安装 maven插件等请參考其它文章. 二.   步骤 ...

  8. Android开发中调用Spring CXF整合发布的WebService接口为什么抛出异常错误?

    摘要:最近在协助同事搞Android调用WebService接口,再测试的过程中发现老师报错,经过baidu,google,终于解决了,现在记录一下: 一:错误信息: 2015-10-28 18:50 ...

  9. Spring+CXF开发WebService

    ps:所有源码下载地址: http://download.csdn.net/download/gaowenhui2008/7977097 准备工作: 下载spring,apache-cxf,soapU ...

最新文章

  1. java 高并发解决方案
  2. Android中的context
  3. 大数据独角兽TOP10榜单发布,“内永洪,外Tableau”领跑BI领域
  4. 空净厂商为何对“9颗星”认证趋之若鹜?
  5. 上验证cudnn是否安装成功_windows和linux上的tensorflow安装(极简安装方法)
  6. Navicat——MySQL之delimiter默认设置问题
  7. Python输入输出详解
  8. smarty php5.5,smarty如何完美兼容php5.5和preg_replace_callback如何替换preg_r
  9. steam显示不能连接网络连接服务器,steam请检查网络连接
  10. Fingerprint 解锁流程
  11. KubeEdge入门到精通-KubeEdge v1.3部署指南!
  12. android dialog的格式显示,详解Android Dialog对话框的五种形式
  13. Microsoft 解决方案框架版本 3.0 概述(MSF3.0)
  14. Classification分类学习
  15. Linq 语法(转载)
  16. 少儿编程网站源码和scratch课程
  17. 架构成长之路 | 图解分布式共识算法Paxos议会协议
  18. 关于小G蛋白活化检测试剂盒
  19. 数据中心网络学习资料
  20. jQuery实现一个学生成绩单录入系统

热门文章

  1. python:pop()函数用法
  2. 保障项目成功的4个关键机制
  3. [Linux]TaskWarrior(任务管理工具)
  4. 第7章 sed、gawk介绍与正则表达式-----------(gawk编辑器简单使用)
  5. 基于JAVA新闻信息管理系统设计与实现 开题报告
  6. 机器人 魂斗罗铁血兵团_《魂斗罗·铁血兵团》ENDING
  7. linux 魔术分区,分区”魔术师”的磁盘管理
  8. QQ影音的网站已经关闭
  9. 职称计算机教程pdf,年模块职称计算机考试.pdf
  10. 罗德与施瓦茨SMBV100A 信号发生器