泰山神 发表于 2017-1-1 08:17:39

Apache CXF实战之一

Apache的CXF现在几乎成了Java领域构建Web Service的首选类库,并且它也确实简单易用,下面就通过几篇系列文章做一下简单介绍。
当然首先想到的当然还是那个Hello World示例。这个系列文章中用到的例子都是基于Maven构建的工程,下面是我的pom.xml文件内容

[*]<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>com.googlecode.garbagecan.cxfstudy</groupId>  
[*]    <artifactId>cxfstudy</artifactId>  
[*]    <packaging>war</packaging>  
[*]    <version>1.0-SNAPSHOT</version>  
[*]    <name>cxfstudy 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>1.4</version>  
[*]        </dependency>  
[*]        <dependency>  
[*]            <groupId>junit</groupId>  
[*]            <artifactId>junit</artifactId>  
[*]            <version>4.8.1</version>  
[*]            <scope>test</scope>  
[*]        </dependency>  
[*]    </dependencies>  
[*]      
[*]    <build>  
[*]        <finalName>cxfstudy</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.mortbay.jetty</groupId>  
[*]                <artifactId>maven-jetty-plugin</artifactId>  
[*]                <configuration>  
[*]                    <contextPath>/</contextPath>  
[*]                    <connectors>  
[*]                        <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">  
[*]                            <port>9000</port>  
[*]                        </connector>  
[*]                    </connectors>  
[*]                </configuration>  
[*]            </plugin>  
[*]            <plugin>  
[*]                <groupId>org.apache.maven.plugins</groupId>  
[*]                <artifactId>maven-compiler-plugin</artifactId>  
[*]                <configuration>  
[*]                    <source>1.5</source>  
[*]                    <target>1.5</target>  
[*]                </configuration>  
[*]            </plugin>  
[*]        </plugins>  
[*]    </build>  
[*] 
[*]</project> 
下面来看看HelloWorld的具体例子。
1.创建HelloWorld 接口类

[*]package com.googlecode.garbagecan.cxfstudy.helloworld;  
[*] 
[*]import javax.jws.WebMethod;  
[*]import javax.jws.WebParam;  
[*]import javax.jws.WebResult;  
[*]import javax.jws.WebService;  
[*] 
[*]@WebService 
[*]public interface HelloWorld {  
[*]    @WebMethod 
[*]    @WebResult String sayHi(@WebParam String text);  
[*]} 
2.创建HelloWorld实现类

[*]package com.googlecode.garbagecan.cxfstudy.helloworld;  
[*] 
[*]public class HelloWorldImpl implements HelloWorld {  
[*] 
[*]    public String sayHi(String name) {  
[*]        String msg = "Hello " + name + "!";  
[*]        return msg;  
[*]    }  
[*]} 
3.创建Server端测试类

[*]package com.googlecode.garbagecan.cxfstudy.helloworld;  
[*] 
[*]import org.apache.cxf.jaxws.JaxWsServerFactoryBean;  
[*] 
[*]// http://localhost:9000/HelloWorld?wsdl  
[*]public class Server {  
[*]    public static void main(String[] args) throws Exception {  
[*]        JaxWsServerFactoryBean factory = new JaxWsServerFactoryBean();  
[*]        factory.setServiceClass(HelloWorldImpl.class);  
[*]          
[*]        factory.setAddress("http://localhost:9000/ws/HelloWorld");  
[*]        factory.create();  
[*] 
[*]        System.out.println("Server start...");  
[*]        Thread.sleep(60 * 1000);  
[*]        System.out.println("Server exit...");  
[*]        System.exit(0);  
[*]    }  
[*]}  
4.创建Client端测试类

[*]package com.googlecode.garbagecan.cxfstudy.helloworld;  
[*] 
[*]import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;  
[*] 
[*]public class Client {  
[*]    public static void main(String[] args) {  
[*]        JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();  
[*]        factory.setServiceClass(HelloWorld.class);  
[*]        factory.setAddress("http://localhost:9000/ws/HelloWorld");  
[*]        HelloWorld helloworld = (HelloWorld) factory.create();  
[*]        System.out.println(helloworld.sayHi("kongxx"));  
[*]        System.exit(0);  
[*]    }  
[*]} 
5.测试
首先运行Server类来启动Web Service服务,然后访问http://localhost:9000/ws/HelloWorld?wsdl地址来确定web service启动正确。
运行Client测试类,会在命令行输出Hello kongxx!的message
页: [1]
查看完整版本: Apache CXF实战之一