欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Apache CXF实现WebService入门教程(附完整源码),cxfwebservice,Apache CXF实现

来源: javaer 分享于  点击 31687 次 点评:270

Apache CXF实现WebService入门教程(附完整源码),cxfwebservice,Apache CXF实现


Apache CXF实现WebService非常简单实用,只需要几步就可以实现一个简单的web service。

首先我们需要新建一个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/xsd/maven-4.0.0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>cn.outofmemory</groupId>  <artifactId>hello-apache-cxf</artifactId>  <version>0.0.1-SNAPSHOT</version>  <packaging>jar</packaging>  <name>hello-apache-cxf</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>          <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.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>

然后需要定义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;@WebServicepublic 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:9000/ws/HelloService");          factory.create();          System.out.println("Server start...");      }}

可以运行这个类,然后在浏览器中访问:http://localhost:9000/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:9000/ws/HelloService");          HelloService helloworld = (HelloService) factory.create();          System.out.println(helloworld.hello("byrx.net"));          System.exit(0);      }  }

运行client,可以得到hello byrx.net的输出。

下载本文源代码

相关栏目:

用户点评