(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice

时间:2023-12-26 10:30:43

这个例子需要建三个Maven项目,其中一个为父项目,另外两个为子项目

首先,建立父项目testParent,选择quickstart:

(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice

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

(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice

然后建立子项目testInterface:

(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice

(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice

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

(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice

建好之后,在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,没有文件的话就自己新建:

(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice

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项目,然后启动项目:

(原创)Maven+Spring+CXF+Tomcat7 简单例子实现webservice

启动成功之后,执行测试类,控制台输出:

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