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/