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

Posted baorant

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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/  

以上是关于webservice--cxf和spring结合,发布restFull风格的服务的主要内容,如果未能解决你的问题,请参考以下文章

WebService—CXF整合Spring实现接口发布和调用过程2

WebService CXF Spring

WebService--CXF与Spring的整合(jaxws:endpoint形式配置)

webservice -- cxf客户端调用axis2服务端

关于webservice(CXF)的一些理解

cxf整合spring代码