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


    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;
    
    @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: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("outofmemory.cn"));  
            System.exit(0);  
        }  
    }

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

    下载本文源代码

    相关:

    WebService学习总结(三)——使用JDK开发WebService

    简单的WebService实现

    cxf+spring发布webservice和调用

  • 相关阅读:
    搭建论坛
    修改ecshop页面
    通信失败的原因
    UCenter教程
    discuz论坛 手机登录
    discuz论坛 安装短信插件
    eccshop获取商品详情属性的字段调用值
    php与discuz形成的对接
    php
    php论坛
  • 原文地址:https://www.cnblogs.com/langtianya/p/4924158.html
Copyright © 2020-2023  润新知