zoukankan      html  css  js  c++  java
  • 使用cxf发布restful的webservice

    restful的webservice开发

    创建项目

    第一步:导入相关的依赖

    <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <maven.compiler.source>1.7</maven.compiler.source>
            <maven.compiler.target>1.7</maven.compiler.target>
            <org.springframework.version>4.3.2.RELEASE</org.springframework.version>
        </properties>
    
        <dependencies>
    
    
            <!--junit-->
            <dependency>
                <groupId>junit</groupId>
                <artifactId>junit</artifactId>
                <version>4.12</version>
                <scope>test</scope>
            </dependency>
    
            <!--javaEE规范-->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>servlet-api</artifactId>
                <version>2.5</version>
                <scope>provided</scope>
            </dependency>
    
            <!--jstl-->
            <dependency>
                <groupId>jstl</groupId>
                <artifactId>jstl</artifactId>
                <version>1.2</version>
            </dependency>
    
    
            <!--spring相关jar-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-expression</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aspects</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${org.springframework.version}</version>
                <scope>test</scope>
            </dependency>
    
    
            <!--引入springmvc-->
            <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
                <version>${org.springframework.version}</version>
            </dependency>
    
    
            <!--引入CXF开发SOAP的webservicejar-->
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxws</artifactId>
                <version>3.1.6</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-transports-http</artifactId>
                <version>3.1.6</version>
            </dependency>
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-core</artifactId>
                <version>3.1.6</version>
            </dependency>
    
            <!--引入CXF开发RestFulwebservice 的jar-->
            <dependency>
                <groupId>org.apache.cxf</groupId>
                <artifactId>cxf-rt-frontend-jaxrs</artifactId>
                <version>3.1.6</version>
            </dependency>
            <!--restful的对象转为json的数据格式依赖jar-->
            <dependency>
                <groupId>com.colobu</groupId>
                <artifactId>fastjson-jaxrs-json-provider</artifactId>
                <version>0.1.0</version>
            </dependency>
    
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.47</version>
            </dependency>
    
    
        </dependencies>
        <build>
            <finalName>cxf_restful_webservice_server</finalName>
            <pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
                <plugins>
                    <plugin>
                        <artifactId>maven-clean-plugin</artifactId>
                        <version>3.0.0</version>
                    </plugin>
                    <!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
                    <plugin>
                        <artifactId>maven-resources-plugin</artifactId>
                        <version>3.0.2</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <version>3.7.0</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-surefire-plugin</artifactId>
                        <version>2.20.1</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-war-plugin</artifactId>
                        <version>3.2.0</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-install-plugin</artifactId>
                        <version>2.5.2</version>
                    </plugin>
                    <plugin>
                        <artifactId>maven-deploy-plugin</artifactId>
                        <version>2.8.2</version>
                    </plugin>
                </plugins>
            </pluginManagement>
        </build>

    第二步:创建webservice接口和实现类

    @WebService
    public interface WeatherService {
    
        public String queryWeather(String cityName);
    
    
    }
    ==
    /**
     * @path : 用在方法上 代表当前服务方法的访问路径  ""
     * @GET  : 用在方法上 代表当前服务方法只能通过GET方式访问
     * @PathParam : 用来方法的参数上 代表获取请求路径中的参数  value属性用来书写路径的中参数的别名
     * @Produces  : 用在方法上  用来控制方法的响应类型
     */
    @WebService
    public class WeatherServiceImpl implements  WeatherService {
    
    
        @Override
        @POST
        @Path("/queryWeather/{cc}/")
        @Produces("text/plain;charset=UTF-8")
        public String queryWeather(@PathParam(value="cc") String cityName) {
            if("北京".equals(cityName)){
                return "晴......";
            }
            return "挺冷.....";
        }
    }
    =============================================================
    @WebService
    public interface UserWebService {
    
        Result save(User user);
    
        Result update(User user);
    
        Result delete(String id);
    
        Result findOne(String id);
    
        Result findAll();
    
    }
    ===
    @WebService
    public class UserWebServiceImpl implements UserWebService {
    
    
        @Override
        @POST
        @Path("/save")
        @Produces("application/json;charset=UTF-8")
        public Result save(User user) {
            Result result = new Result();
            try {
                System.out.println("接收用户:" +user);
                result.setStatus(1);
            } catch (Exception e) {
                e.printStackTrace();
                result.setStatus(0);
                result.setMessage(e.getMessage());
            }
            return result;
        }
    
        @Override
        @PUT
        @Path("/update")
        @Produces("application/json;charset=UTF-8")
        public Result update(User user) {
            Result result = new Result();
            try {
                System.out.println("更新的用户信息:" +user);
                result.setStatus(1);
            } catch (Exception e) {
                e.printStackTrace();
                result.setStatus(0);
                result.setMessage(e.getMessage());
            }
            return result;
        }
    
        @Override
        @DELETE
        @Path("/delete/{id}/")
        @Produces("application/json;charset=UTF-8")
        public Result delete(@PathParam("id") String id) {
            Result result = new Result();
            try {
                System.out.println("删除的对象的id: "+id);
                result.setStatus(1);
            } catch (Exception e) {
                e.printStackTrace();
                result.setStatus(0);
                result.setMessage(e.getMessage());
            }
            return result;
        }
    
        @Override
        @GET
        @Path("/findOne/{id}/")
        @Produces("application/json;charset=UTF-8")
        public Result findOne(@PathParam("id") String id) {
            Result result;
            try {
                System.out.println("查询对象的id: "+id);
                User user = new User(id, "小黑", 23, new Date());
                result  = new Result();
                result.getResult().add(user);
                result.setStatus(1);
            } catch (Exception e) {
                e.printStackTrace();
                result = new Result();
                result.setStatus(0);
                result.setMessage(e.getMessage());
            }
            return result;
        }
    
        @Override
        @GET
        @Path("/findAll")
        @Produces("application/json;charset=UTF-8")
        public Result findAll() {
            Result result = new Result();
            try {
                System.out.println("查询所有对象信息.......");
                List<User> users = new ArrayList<>();
                users.add(new User("21","小三",23,new Date()));
                users.add(new User("22","小四",23,new Date()));
                users.add(new User("23","小五",23,new Date()));
                users.add(new User("24","小六",23,new Date()));
                users.add(new User("25","小七",23,new Date()));
                result.getResult().addAll(users);
                result.setStatus(1);
            } catch (Exception e) {
                e.printStackTrace();
                result.setStatus(0);
                result.setMessage(e.getMessage());
            }
            return result;
        }
    }

    第三步:配置spring-cxf.xml配置文件,通过restful方式发布服务

    <?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:jaxrs="http://cxf.apache.org/jaxrs"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">
    
    
    
    
        <!--注册服务实现类-->
        <bean id="weatherService" class="com.baizhi.restful.webservice.WeatherServiceImpl"></bean>
    
        <bean id="userWebService" class="com.baizhi.restful.webservice.UserWebServiceImpl"></bean>
    
        <!--使用restful形式发布服务jaxws  jaxrs
    
            服务地址:http://localhost:8989/cxf_restful_webservice_server/cxf/ws/queryWeather/北京/
        -->
        <jaxrs:server address="/ws" serviceClass="com.baizhi.restful.webservice.WeatherService">
            <jaxrs:serviceBeans>
                <ref bean="weatherService"></ref>
            </jaxrs:serviceBeans>
        </jaxrs:server>
    
    
    
        <jaxrs:server address="/userservice" serviceClass="com.baizhi.restful.webservice.UserWebService">
            <jaxrs:serviceBeans>
                <ref bean="userWebService"/>
            </jaxrs:serviceBeans>
            <!--配置底层转换json的工具包-->
            <jaxrs:providers>
                <bean class="com.alibaba.fastjson.support.jaxrs.FastJsonProvider"/>
            </jaxrs:providers>
        </jaxrs:server>
    
    
    
    
    </beans>

    第四步:在spring配置文件中引入xcf子配置文件

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
           xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
           xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
    
    
    
    
    
    
        <!--引入子配置文件-->
        <import resource="classpath:spring-cxf.xml"/>
    </beans>

    第五步:配置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>classpath:spring-basic.xml</param-value>
      </context-param>
      
      <!--配置工厂启动的监听器-->
      <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
      </listener>
      
      <!--配置CXF的Servlet-->
      <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
      </servlet>
      
      <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/cxf/*</url-pattern>
      </servlet-mapping>
    </web-app>

    第六步:配置tomcat启动项目

     第七步:访问swdl    

    地址:http://localhost:9999/cxf_restful_webservice_server/cxf/ws/queryWeather/北京/
  • 相关阅读:
    eclipse中SVN分支合并到主干
    Nginx+Php-fpm+MySQL+Redis源代码编译安装指南
    php-fpm的重启/关闭
    修改PHP上传文件大小限制的方法
    【转】Android AlertDialog自定义布局
    unity 多线程
    今天无意中发现的WWW.threadPriority
    Socket.IO for Unity 简要介绍
    shader一般都是用工具调试的
    METAL渲染是什么?
  • 原文地址:https://www.cnblogs.com/karlz/p/14443820.html
Copyright © 2011-2022 走看看