(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice
这个例子需要建三个Maven项目,其中一个为父项目,另外两个为子项目
首先,建立父项目testParent,选择quickstart:

输入项目名称和模块名称,然后创建:

然后建立子项目testInterface:


再建立子项目projectImpl,过程跟上面以上,只是类型要选webapp(到时候启动工程或者打包都是以这个项目为主的):

建好之后,在testParent的pom.xml里面写入下面内容,主要是加入了cxf,junit,logback,springframework的依赖,在父项目加入依赖,子项目就不需要再加入依赖了:
<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>testParent</groupId>
<artifactId>testParent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>pom</packaging> <name>testParent</name>
<url>http://maven.apache.org</url> <build>
<finalName>testParent</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
</plugins>
</build> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<org.springframework.version>3.2.8.RELEASE</org.springframework.version>
<cxf.version>2.7.7</cxf.version>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency> <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-api</artifactId>
<version>${cxf.version}</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-security-cors</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-ws-policy</artifactId>
<version>${cxf.version}</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-core</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxrs</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>${cxf.version}</version>
</dependency> <dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-rs-extension-providers</artifactId>
<version>${cxf.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<type>jar</type>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>net.logstash.logback</groupId>
<artifactId>logstash-logback-encoder</artifactId>
<version>4.7</version>
<exclusions>
<exclusion>
<artifactId>logback-classic</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
<exclusion>
<artifactId>logback-core</artifactId>
<groupId>ch.qos.logback</groupId>
</exclusion>
<exclusion>
<artifactId>jackson-databind</artifactId>
<groupId>com.fasterxml.jackson.core</groupId>
</exclusion> </exclusions>
</dependency> <dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>${org.springframework.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-orm</artifactId>
<version>${org.springframework.version}</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.8.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${org.springframework.version}</version>
</dependency>
</dependencies>
<modules>
<module>testInterface</module>
<module>projectImpl</module>
</modules>
</project>
然后在testInterface的src/main/java下面新建类
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType; @Path("/a")
public interface TestIn1 { @GET
@Path("/doGet/{first}/{last}")
@Produces(MediaType.APPLICATION_XML)
public String doGet(@PathParam(value="first") String firstName,@PathParam(value="last") String lastName); @POST
@Path("/itemComfirm")
@Produces(MediaType.APPLICATION_XML)
public String itemComfirm(String xmlParam,@Context HttpServletRequest req,@Context HttpServletResponse res);
}
然后在projectImpl的pom.xml修改,这里加入对testInterface子项目的依赖:
<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>
<parent>
<groupId>testParent</groupId>
<artifactId>testParent</artifactId>
<version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>projectImpl</artifactId>
<packaging>war</packaging> <dependencies>
<dependency>
<groupId>testParent</groupId>
<artifactId>testInterface</artifactId>
<version>122</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
</dependencies>
</project>
然后在projectImpl的src/main/java下面新建类,并且实现testInterface子项目中的TestIn1接口:
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; public class TestIn1Impl implements TestIn1 { public String doGet(String firstName, String lastName) { return "hihihihi"+","+firstName+","+lastName;
} public String itemComfirm(String xmlParam, HttpServletRequest req, HttpServletResponse res) { return "hahahaha"+","+xmlParam;
} }
再然后在下图路径修改application.xml和web.xml,没有文件的话就自己新建:

application.xml:
jaxrs:extensionMappings和jaxrs:languageMappings表示可根据URL后缀不同来进行不同的配置,例如/testURL.xml,那么该请求的请求头就会设置为application/xml,为/testURL.en,则会用en-gb来解析请求内容。详情可参考:http://cxf.apache.org/docs/jax-rs.html
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd"> <bean id="TestIn1Impl" class="TestIn1Impl"/>
<jaxrs:server id="TestIn1ImplServiceContainer">
<jaxrs:serviceBeans>
<ref bean="TestIn1Impl" />
</jaxrs:serviceBeans> <jaxrs:extensionMappings>
<entry key="xml" value="application/xml" />
</jaxrs:extensionMappings> <jaxrs:languageMappings>
<entry key="en" value="en-gb"/>
</jaxrs:languageMappings>
</jaxrs:server> </beans>
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">
<display-name>fsp-api</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:application.xml</param-value>
</context-param> <!-- spring context listener -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- CXF -->
<servlet>
<servlet-name>cxf</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>cxf</servlet-name>
<url-pattern>/testParent/*</url-pattern>
</servlet-mapping> </web-app>
然后再写一个测试类:
import javax.ws.rs.core.MediaType; import org.apache.cxf.jaxrs.client.WebClient;
import org.junit.After;
import org.junit.Before;
import org.junit.Test; public class TestClient1 { private WebClient client;
private String url="http://localhost:8080/testParent/testParent/a"; @Before
public void setUp() throws Exception{
System.out.println("setupbegan");
client=WebClient.create(url).header("charset", "UTF-8").encoding("UTF-8").acceptEncoding("UTF-8");
} @After
public void tearDown() throws Exception{
System.out.println("tearDownbegan");
client=null;
} @Test
public void testItemConfirm(){
System.out.println("began");
String xmlaaParam="<a>ddd</a>";
String responseMsg=client.path("itemComfirm").accept(MediaType.APPLICATION_XML).post(xmlaaParam,String.class);
System.out.println("response :"+responseMsg);
System.out.println("end");
} @Test
public void testDoGet() {
System.out.println("began");
String responseString = client.path("doGet/"+"dsdsd"+"/"+"uyuy"+"")
.accept(MediaType.APPLICATION_XML)
.get(String.class);
System.out.println("response :"+responseString);
System.out.println("end");
} }
最后,在Eclipse的sever插件中加入ProjetImpl项目,然后启动项目:

启动成功之后,执行测试类,控制台输出:
setupbegan
began
response :hihihihi,dsdsd,uyuy
end
tearDownbegan
setupbegan
began
response :hahahaha,<a>ddd</a>
end
tearDownbegan
如有错误,欢迎指出。
转载请注明出处:http://www.cnblogs.com/Starshot/p/6889751.html
(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice的更多相关文章
- idea+maven+spring+cxf创建webservice应用(二)生成客户端程序
idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...
- c# spring aop的简单例子
刚刚完成了一个c#的spring aop简单例子,是在mac下用Xamarin Studio开发的.代码如下: 接口 using System; using System.Collections.Ge ...
- maven+springmvc+cxf 实现简单webservice小例子
1.首先你需要创建一个maven项目[当然是web项目] 2.pom.xml添加以下 <properties> <cxf.version>2.2.3</cxf.versi ...
- Eclipse+Maven+Spring+CXF 构建webservice 服务
一. 软件准备 Eclipse 4.2.1 Maven 2.2.1 Spring 3.2.6 CXF 3.0.2 二. 步骤 首先,在Eclipse中用maven构建一个quickstart版本的ma ...
- MAC环境下idea:maven+Spring+Dubbo+Zookeeper简单工程搭建
: 一:安装软件:tomcatZookeeperDubbo+admin 二:工程: 总工程 API Pom.xml:不用引用任何东西 Provider Pom.xml:要denpend ...
- spring容器BeanFactory简单例子
在Spring中,那些组成你应用程序的主体及由Spring Ioc容器所管理的对象,都被称之为bean.简单来讲,bean就是Spring容器的初始化.配置及管理的对象.除此之外,bean就与应用程序 ...
- Maven配置dubbo环境简单例子
环境准备: 1.zookeeper:zookeeper-3.4.6版本 2.maven:apache-maven-3.3.9版本 3.dubbo监控工具:dubbo-admin-2.5.4-SNAPS ...
- 使用 CXF 做 webservice 简单例子(转载)
使用 CXF 做 webservice 简单例子 Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩展的服务,您可以将这 ...
- Spring框架系列(2) - Spring简单例子引入Spring要点
上文中我们简单介绍了Spring和Spring Framework的组件,那么这些Spring Framework组件是如何配合工作的呢?本文主要承接上文,向你展示Spring Framework组件 ...
随机推荐
- vue获取dom元素内容
通过ref来获取dom元素 在vue官网上对ref的解释 ref 被用来给元素或子组件注册引用信息.引用信息将会注册在父组件的 $refs 对象上.如果在普通的 DOM 元素上使用,引用指向的就是 D ...
- (练习题)利用构造器函数实现三个小实例——不使用String()与Array()构造器和Math对象,不使用内建的方法的方法和属性。
1)在String()构造器不存在的情况下自定义一个myString()构造器函数.由于String()不存在,因此您在写构造器函数时不能使用任何属于内建String对象的方法和属性.并让你所创建的对 ...
- 系统启动 之 Linux系统启动概述(2)
博客:http://blog.csdn.net/younger_china/article/details/51615916 Linu系统启动是一个"冗长乏味"的过程,那么我们现就 ...
- 人生苦短,我用Python
Life is short, You need Python. 工作中常常要用到脚本来完成许多重复性的工作,刚开始是查数据库的时候,也曾用shell 来写脚本,但终于还是觉得shell太艰涩, 一行命 ...
- 关于获取URL中传值的解决方法
在我们页面的URL中包含着很多信息,包括域名,协议等等这里就不一一介绍了),对于我们开发者而言,使用比较多的就是页面之间的传值.为什么要页面传值呢?很简单,当你在浏览一个商品页面的时候你要看到一个商品 ...
- 窝上课不听,how to learn C language easily(1)
C language 学习心得 附:为啥起这么霸气侧漏,招大神们鄙视的标题,正如我在<C language>随笔的介绍中写的,这是一个写个妹纸们看的C language的文章.没错!!写这 ...
- 计算进程消费cpu和内存
Linux下没有直接可以调用系统函数知道CPU占用和内存占用.那么如何知道CPU和内存信息呢.只有通过proc伪文件系统来实现. proc伪文件就不介绍了,只说其中4个文件.一个是/proc/stat ...
- Scrapy 爬虫框架入门案例详解
欢迎大家关注腾讯云技术社区-博客园官方主页,我们将持续在博客园为大家推荐技术精品文章哦~ 作者:崔庆才 Scrapy入门 本篇会通过介绍一个简单的项目,走一遍Scrapy抓取流程,通过这个过程,可以对 ...
- css元素水平垂直居中的十种方法
四月底在杭州金诚的前端面试过程中,问到了父元素中子元素水平和垂直居中的方式,因为平时疏于整理,只说上来两种.后来面试过了,所以现在回想到这个问题,所以针对各种情况集中整理一下. 首先看页面结构和元素的 ...
- Springboot(一):入门篇
什么是spring boot spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员 ...