• webservice--cxf和spring结合,发布restFull风格的服务


    下面是发布一个restFull风格的实例:

    服务端:

    实体:

    复制代码
    
    import java.util.Date;
    
    import javax.xml.bind.annotation.XmlRootElement;
    
    /**
     * 实体
     */
    
    @XmlRootElement(name="student")       
    public class Pojo {
        
        private long id;
        //温度
        private String detail;
        //日期
        private Date  date;
        //最高
        private int temperature_max;
        //最低
        private int temperature_min;
        
        
        public long getId() {
            return id;
        }
        public void setId(long id) {
            this.id = id;
        }
        public String getDetail() {
            return detail;
        }
        public void setDetail(String detail) {
            this.detail = detail;
        }
        public Date getDate() {
            return date;
        }
        public void setDate(Date date) {
            this.date = date;
        }
        public int getTemperature_max() {
            return temperature_max;
        }
        public void setTemperature_max(int temperature_max) {
            this.temperature_max = temperature_max;
        }
        public int getTemperature_min() {
            return temperature_min;
        }
        public void setTemperature_min(int temperature_min) {
            this.temperature_min = temperature_min;
        }
        
        
    }
    复制代码

    一定要在实体类的前边加上annotation ,这样才能让信息在POJO和XML之间转换

    SEI:

    复制代码
    package service;
    
    import java.util.List;
    
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    import javax.ws.rs.Consumes;
    import javax.ws.rs.GET;
    import javax.ws.rs.Path;
    import javax.ws.rs.PathParam;
    import javax.ws.rs.Produces;
    import javax.ws.rs.core.MediaType;
    
    
    import entity.Pojo;
    
    /**
     * 接口
     */
    
    @WebService
    @Path("/student")
    public interface WeatherInterface {
    
        //MediaType
        
        //查询学生列表
        @GET
        @Path("/queryList/{type}")
        @Consumes(MediaType.APPLICATION_XML)
        public List<Pojo> queryWeather(@PathParam("type")String cityName);
        
        
        //查询学生
        @GET
        @Path("/query/{id}")
        @Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML})
        public Pojo queryById(@PathParam("id")long id);
        
    }
    复制代码

    每个方法之前,要用annotation声明http请求的method类型,比如GET,DELETE,POST, PUT

     @Path("/room/{id}")中的id是一个参数,应该在方法的参数列表中声明:  public Pojo queryById(@PathParam("id")long id)

    实现类:

    复制代码
    package service;
    
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Date;
    import java.util.List;
    
    import javax.jws.WebMethod;
    import javax.jws.WebParam;
    import javax.jws.WebResult;
    import javax.jws.WebService;
    
    import com.sun.org.glassfish.gmbal.ParameterNames;
    
    import entity.Pojo;
    
    /**
     * 实现类
     */
    
    public class Impl implements WeatherInterface {
    
        @Override
        public List<Pojo> queryWeather(String cityName) {
            
            List<Pojo> list = new ArrayList<Pojo>();
            
            //日历附件
            Calendar calendar = Calendar.getInstance();
            int day = calendar.get(Calendar.DATE);
            
            Pojo pojo1 = new Pojo();
            pojo1.setId(01);
            pojo1.setDetail("晴1");
            pojo1.setDate(new Date());
            pojo1.setTemperature_max(5);
            pojo1.setTemperature_min(-6);
            
            Pojo pojo2 = new Pojo();
            pojo2.setId(02);
            pojo2.setDetail("晴2");
            calendar.set(Calendar.DATE, day+1);
            pojo2.setDate(calendar.getTime());
            pojo2.setTemperature_max(5);
            pojo2.setTemperature_min(-6);
            
            Pojo pojo3 = new Pojo();
            pojo3.setId(003);
            pojo3.setDetail("晴3");
            calendar.set(Calendar.DATE, day+2);
            pojo3.setDate(calendar.getTime());
            pojo3.setTemperature_max(5);
            pojo3.setTemperature_min(-6);
            
            
            list.add(pojo1);
            list.add(pojo2);
            list.add(pojo3);
            
            return list;
        }
    
        @Override
        public Pojo queryById(long id) {
            Pojo pojo1 = new Pojo();
            pojo1.setId(id);
            pojo1.setDetail("张三");
            pojo1.setDate(new Date());
            pojo1.setTemperature_max(5);
            pojo1.setTemperature_min(-6);
            
            return pojo1;
        }
    
    
    }
    复制代码

     spring配置文件:

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
        xmlns:context="http://www.springframework.org/schema/context"
        xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
        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-3.0.xsd    
            http://www.springframework.org/schema/context    
            http://www.springframework.org/schema/context/spring-context-3.0.xsd    
            http://cxf.apache.org/jaxrs     
            http://cxf.apache.org/schemas/jaxrs.xsd" >
            
    
        <!-- service -->
        <bean id="WeatherInterface" class="service.Impl" />
    
        <!-- 通过jaxrs:server方式来配置webservice -->
       
        <jaxrs:server  address="/weather">
            <jaxrs:serviceBeans>
                <ref bean="WeatherInterface" />
            </jaxrs:serviceBeans>
        </jaxrs:server>
    </beans>    
          
         
    复制代码

    xml配置文件:

    复制代码
    <?xml version="1.0" encoding="UTF-8"?>
    <web-app version="2.5" 
        xmlns="http://java.sun.com/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
        http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
      <display-name></display-name>    
      <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
      </welcome-file-list>
      <!-- 加载spring容器 -->
      <context-param>  
            <param-name>contextConfigLocation</param-name>  
            <param-value>classpath:applicationContext.xml</param-value>  
        </context-param>  
      
        <listener>  
            <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
        </listener>  
      
      <!-- cxf的servlet -->
      <servlet>  
            <servlet-name>CXFServlet</servlet-name>  
            <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>  
            <load-on-startup>1</load-on-startup>  
        </servlet>  
      
        <servlet-mapping>  
            <servlet-name>CXFServlet</servlet-name>  
            <url-pattern>/ws/*</url-pattern>  
        </servlet-mapping> 
    </web-app>
    复制代码

     把项目部署到tomcat,地址栏输入:http://localhost:8989/cxf_rest_spring_service/ws/  

  • 相关阅读:
    Effective C++ 读书笔记之Part1.Accustoming Yourself to C++
    Effective C++ 读书笔记之Part4.Design and Declarations
    Effective C++ 读书笔记之Part5.Implementations
    给程序猿三条身体保健的建议
    亮剑.NET的系列文章之.NET详解(开端)
    [转]英特尔工具使在多个处理器上实现线程化更加轻松
    [转]TrackBack Technical Specification
    Chapter 03 Writing Executable Statements 01
    Chapter 09Manipulating Data 01
    Chapter 00 Overview to PL/SQL
  • 原文地址:https://www.cnblogs.com/baorantHome/p/7417151.html
Copyright © 2020-2023  润新知