CXF实现WebService(完整源码可运行)

首先我们需要新建一个maven项目,在pom中添加依赖和jetty作为测试的web service的web容器。

如下是测试用到的pom文件内容:

<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/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>cn.outofmemory</groupId>
  <artifactId>hello-apache-cxf</artifactId>
  <packaging>war</packaging>
  <version>0.0.1-SNAPSHOT</version>
  <name>hello-apache-cxf Maven Webapp</name>
  <url>http://maven.apache.org</url>
    <properties>  
        <cxf.version>2.2.7</cxf.version>  
    </properties>  


    <dependencies>  
        <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-transports-http</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-rt-transports-http-jetty</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-rt-ws-security</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-rt-ws-policy</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.apache.cxf</groupId>  
            <artifactId>cxf-bundle-jaxrs</artifactId>  
            <version>${cxf.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>javax.ws.rs</groupId>  
            <artifactId>jsr311-api</artifactId>  
            <version>1.1.1</version>  
        </dependency>  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-api</artifactId>  
            <version>1.5.8</version>  
        </dependency>  
        <dependency>  
            <groupId>org.slf4j</groupId>  
            <artifactId>slf4j-jdk14</artifactId>  
            <version>1.5.8</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-httpclient</groupId>  
            <artifactId>commons-httpclient</artifactId>  
            <version>3.0</version>  
        </dependency>  
        <dependency>  
            <groupId>commons-io</groupId>  
            <artifactId>commons-io</artifactId>  
            <version>2.3</version>  
        </dependency>  
        <dependency>  
            <groupId>junit</groupId>  
            <artifactId>junit</artifactId>  
            <version>4.8.1</version>  
            <scope>test</scope>  
        </dependency>  
  </dependencies>


 <build> 
          <defaultGoal>compile</defaultGoal> 
        <finalName>hello-apache-cxf</finalName>  
        <resources>  
            <resource>  
                <directory>src/main/resources</directory>  
            </resource>  
            <resource>  
                <directory>src/main/java</directory>  
                <includes>  
                    <include>**</include>  
                </includes>  
                <excludes>  
                    <exclude>**/*.java</exclude>  
                </excludes>  
            </resource>  
        </resources>  
        <plugins>  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-compiler-plugin</artifactId>  
                <version>2.3.2</version>
                <configuration>  
                    <source>1.5</source>  
                    <target>1.5</target>  
                </configuration>  
            </plugin>  
<plugin>
    <groupId>org.mortbay.jetty</groupId>  
    <artifactId>maven-jetty-plugin</artifactId>  
    <version>6.0.0</version>  
</plugin>   
        </plugins>  
    </build>  
</project>

然后需要定义web service接口,在接口定义中要添加必要的annotation注解来标注出来webservice接口和提供的方法,以及参数等,如下接口文件:

package cn.outofmemory.hello_apache_cxf;


import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebResult;
import javax.jws.WebService;


@WebService
public interface HelloService {


    @WebMethod
    @WebResult String hello(@WebParam String who);


}

定义完接口之后需要实现接口,接口实现代码如下:

package cn.outofmemory.hello_apache_cxf;
public class SimpleHelloService implements HelloService {



    public String hello(String who) {
        return "hello " + who;
    }


}

这个实现类不需要做任何的标注。

这样webservice的实现部分就算完了,我们需要在web容器中运行web service,如下Server代码:

package cn.outofmemory.hello_apache_cxf;


import org.apache.cxf.jaxws.JaxWsServerFactoryBean;


public class Server {


    public static void main(String[] args) throws Exception {
        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();  
        factory.setServiceClass(SimpleHelloService.class);  


        factory.setAddress("http://localhost:8080/ws/HelloService");  
        factory.create();  


        System.out.println("Server start...");  
    }
}

可以运行这个类,然后在浏览器中访问:http://localhost:8080/ws/HelloService。

可以让Server端保持启动状态,下面我们写Client端来调用server端的webservice,如下client端代码:

package cn.outofmemory.hello_apache_cxf;


import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;


public class ServiceClient {
    public static void main(String[] args) {  
        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();  
        factory.setServiceClass(HelloService.class);  
        factory.setAddress("http://localhost:8080/ws/HelloService");  
        HelloService helloworld = (HelloService) factory.create();  
        System.out.println(helloworld.hello("outofmemory.cn"));  
        System.exit(0);  
    }  
}

运行client,可以得到hello outofmemory.cn的输出。

源码,http://download.csdn.net/download/binyulong/10152842

没有更多推荐了,返回首页