• 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/  

  • 相关阅读:
    Java程序:从命令行接收多个数字,求和并输出结果
    大道至简读后感
    大道至简第一章读后感Java伪代码
    Creating a SharePoint BCS .NET Connectivity Assembly to Crawl RSS Data in Visual Studio 2010
    声明式验证超时问题
    Error message when you try to modify or to delete an alternate access mapping in Windows SharePoint Services 3.0: "An update conflict has occurred, and you must re-try this action"
    Upgrading or Redeploying SharePoint 2010 Workflows
    Upgrade custom workflow in SharePoint
    SharePoint 2013中Office Web Apps的一次排错
    How to upgrade workflow assembly in MOSS 2007
  • 原文地址:https://www.cnblogs.com/baorantHome/p/7417151.html
Copyright © 2020-2023  润新知