今天閒來無事使用Maven搭建了一個CXF的webservice。在網上找了些資料也不是特別的全面,自己慢慢也算是終於搞定了,在這裏記錄一下,代碼在git@osc上。
首先我們自然是創建一個Maven項目,項目目錄結構如下:
POM.xml配置如下:
<?xml version="1.0" encoding="UTF-8"?>
<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>Young.Hu</groupId>
<artifactId>cxfdemo</artifactId>
<version>1.0-SNAPSHOT</version>
<name>CXF Demo</name>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-rt-frontend-jaxws</artifactId>
<version>2.7.4</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.9</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-core</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-beans</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context-support</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-web</artifactId>
<version>3.2.2.RELEASE</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.mortbay.jetty</groupId>
<artifactId>maven-jetty-plugin</artifactId>
<version>6.1.26</version>
</plugin>
</plugins>
</build>
</project>
CXFDemoImpl如下:
package cxfdemo;
import javax.jws.WebService;
@WebService()
public class CXFDemoImpl implements CXFDemo {
public String sayHello(String foo) {
return "hello "+foo;
}
}
TestEndpoint代碼如下:
package cxfdemo.test;
import javax.xml.ws.Endpoint;
import junit.framework.Assert;
import junit.framework.TestCase;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import cxfdemo.CXFDemo;
import cxfdemo.CXFDemoImpl;
public class TestEndpoint extends TestCase {
private static final String ADDRESS = "http://localhost:9000/cxfdemo";
protected void setUp() throws Exception {
super.setUp();
System.out.println("Starting Server");
CXFDemoImpl demo = new CXFDemoImpl();
Endpoint.publish(ADDRESS, demo);
System.out.println("Start success");
}
public void testSayHello(){
JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
factory.setServiceClass(CXFDemo.class);
factory.setAddress(ADDRESS);
CXFDemo client = (CXFDemo)factory.create();
Assert.assertEquals(client.sayHello("foo"), "hello foo");
}
}
修改web.xml文件:
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd" >
<web-app>
<display-name>Archetype Created Web Application</display-name>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/cxfdemo-beans.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>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/services/*</url-pattern>
</servlet-mapping>
</web-app>
創建cxfdemo-beans.xml文件:
<?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"
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">
<jaxws:endpoint id="cxfDemo" implementor="cxfdemo.CXFDemoImpl" address="/cxfdemo" />
</beans>
到這裏,搭建任務完成。使用maven命令啓動jetty:
mvn jetty:run
確認啓動沒有錯誤訪問http://localhost:8080/cxfdemo/services能看到如下圖頁面:
使用soapui如下圖,輸入參數值能得到ws的返回信息: