cxf3.14+spring4.2以rest风格发布webservice

来源:互联网 发布:无法开启网络发现 编辑:程序博客网 时间:2024/05/20 03:07

1 开发工具
Idea
spring4.2
cxf3.14
2 maven 依赖 pom.xml

    <dependency>          <groupId>commons-logging</groupId>          <artifactId>commons-logging</artifactId>          <version>1.1.3</version>      </dependency>      <dependency>          <groupId>org.apache.cxf</groupId>          <artifactId>cxf-rt-frontend-jaxws</artifactId>          <version>3.1.4</version>      </dependency>      <!-- https://mvnrepository.com/artifact/org.apache.cxf/cxf-rt-transports-http-jetty -->      <dependency>          <groupId>org.apache.cxf</groupId>          <artifactId>cxf-rt-transports-http-jetty</artifactId>          <version>3.1.4</version>      </dependency>      <!-- https://mvnrepository.com/artifact/javax.ws.rs/javax.ws.rs-api -->      <dependency>          <groupId>javax.ws.rs</groupId>          <artifactId>javax.ws.rs-api</artifactId>          <version>2.1</version>      </dependency>       <dependency>          <groupId>org.apache.cxf</groupId>          <artifactId>cxf-rt-frontend-jaxrs</artifactId>          <version>3.1.4</version>      </dependency>      <!--解决cxf3x版本不自动提供转化json格式数据-->      <dependency>          <groupId>com.fasterxml.jackson.jaxrs</groupId>          <artifactId>jackson-jaxrs-json-provider</artifactId>          <version>2.5.2</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-aop</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-context</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-beans</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-core</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-expression</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>       <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-tx</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-web</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-webmvc</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-webmvc-portlet</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>      <dependency>          <groupId>org.springframework</groupId>          <artifactId>spring-websocket</artifactId>          <version>4.2.0.RELEASE</version>      </dependency>      <dependency>          <groupId>junit</groupId>          <artifactId>junit</artifactId>          <version>RELEASE</version>      </dependency>

3 web.xml配置

<?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">  <display-name>apptest1</display-name>  <welcome-file-list>    <welcome-file>index.html</welcome-file>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>  <!-- 配置spring资源路径 -->  <context-param>    <param-name>contextConfigLocation</param-name>    <param-value>classpath:SpringMVCServlet-servlet.xml</param-value>  </context-param>  <!--配置spring上下文监听器  -->  <listener>    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  </listener>  <!-- 字符集过滤 -->  <filter>    <description>字符集过滤器</description>    <filter-name>encodingFilter</filter-name>    <filter-class>org.springframework.web.filter.CharacterEncodingFilter    </filter-class>    <init-param>      <description>字符集编码</description>      <param-name>encoding</param-name>      <param-value>UTF-8</param-value>    </init-param>  </filter>  <filter-mapping>    <filter-name>encodingFilter</filter-name>    <url-pattern>/*</url-pattern>  </filter-mapping>  <!-- springmvc的配置 -->  <!--<servlet>    <servlet-name>SpringMVCServlet</servlet-name>    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>    <init-param>      <param-name>contextConfigLocation</param-name>      <param-value>classpath:SpringMVCServlet-servlet.xml</param-value>    </init-param>    <load-on-startup>1</load-on-startup>  </servlet>  <servlet-mapping>    <servlet-name>SpringMVCServlet</servlet-name>    <url-pattern>/</url-pattern>  </servlet-mapping>-->  <!-- cxf的Servlet -->  <servlet>    <servlet-name>cxf</servlet-name>    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>    <load-on-startup>2</load-on-startup>  </servlet>  <!-- 配置cxf的访问地址 -->  <!-- 本系统中webService必须以/ws/*开头 -->  <servlet-mapping>    <servlet-name>cxf</servlet-name>    <url-pattern>/ws/*</url-pattern>  </servlet-mapping></web-app>

4 spring的配置文件 SpringMVCServlet-servlet.xml

<?xml version="1.0" encoding="UTF-8"?><beans xsi:schemaLocation="                     http://www.springframework.org/schema/context                     http://www.springframework.org/schema/context/spring-context-4.2.xsd                     http://www.springframework.org/schema/beans                     http://www.springframework.org/schema/beans/spring-beans-4.2.xsd                     http://www.springframework.org/schema/mvc                     http://www.springframework.org/schema/mvc/spring-mvc-4.2.xsd                     http://www.springframework.org/schema/aop                     http://www.springframework.org/schema/aop/spring-aop-4.2.xsd                     http://www.springframework.org/schema/tx                     http://www.springframework.org/schema/tx/spring-tx-4.2.xsd                    http://cxf.apache.org/core                    http://cxf.apache.org/schemas/core.xsd                    http://cxf.apache.org/bindings/soap                     http://cxf.apache.org/schemas/configuration/soap.xsd                    http://cxf.apache.org/jaxrs                    http://cxf.apache.org/schemas/jaxrs.xsd                    http://cxf.apache.org/jaxws                     http://cxf.apache.org/schemas/jaxws.xsd"xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans"       xmlns:jaxws="http://cxf.apache.org/jaxws"       xmlns:jaxrs="http://cxf.apache.org/jaxrs"xmlns:cxf="http://cxf.apache.org/core"xmlns:soap="http://cxf.apache.org/bindings/soap">    <import resource="classpath:META-INF/cxf/cxf.xml" />    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />    <context:component-scan base-package="com.wyn.app;com.ws.weather"></context:component-scan>    <bean id="studentService" class="com.wyn.app.serviceImp.StudentServiceImpl"></bean>    <!--jaxrs搭配restful相关配置-->    <jaxrs:server id="studentServiceT" address="/student">        <!--输入拦截器设置-->        <jaxrs:inInterceptors>        </jaxrs:inInterceptors>        <!--输出拦截器设置-->        <jaxrs:outInterceptors>        </jaxrs:outInterceptors>        <!--serviceBeans:暴露的WebService服务类-->        <jaxrs:serviceBeans>            <ref bean="studentService"/>        </jaxrs:serviceBeans>        <!--支持的协议-->        <jaxrs:extensionMappings>            <entry key="json" value="application/json"/>            <entry key="xml" value="application/xml"/>        </jaxrs:extensionMappings>        <!--编码格式-->        <jaxrs:languageMappings>        </jaxrs:languageMappings>        <!--对象转换-->        <jaxrs:providers>            <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider"/>        </jaxrs:providers>    </jaxrs:server>    <!-- 对模型视图名称的解析,即在模型视图名称添加前后缀 -->    <!-- <bean p:suffix=".jsp" p:prefix="/" class="org.springframework.web.servlet.view.InternalResourceViewResolver"/> -->    <!--配置ModelAndView(jsp)解析器  -->    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">          <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>          <property name="prefix" value="/"></property>          <property name="suffix" value=".jsp"></property><!--可为空,方便实现自已的依据扩展名来选择视图解释类的逻辑  -->    </bean>    <!-- 静态资源的访问方式 -->    <mvc:default-servlet-handler/></beans>

5 实体类 Student

package com.wyn.app.entity;import javax.xml.bind.annotation.XmlRootElement;import java.util.Date;/** * Created by wangyanan on 2017/8/25. */@XmlRootElementpublic class Student {    private long id;    private String name;    private Date birthday;    public long getId() {        return id;    }    public void setId(long id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public Date getBirthday() {        return birthday;    }    public void setBirthday(Date birthday) {        this.birthday = birthday;    }    @Override    public String toString() {        return "Student{" +                "id=" + id +                ", name='" + name + '\'' +                ", birthday=" + birthday +                '}';    }}

实体类 StudentList

package com.wyn.app.entity;import javax.xml.bind.annotation.XmlRootElement;import java.util.List;/** * Created by wangyanan on 2017/8/25. */@XmlRootElementpublic class StudentList {    List<Student> studentList;    public List<Student> getStudentList() {        return studentList;    }    public void setStudentList(List<Student> studentList) {        this.studentList = studentList;    }}

6 service 接口层

package com.wyn.app.service;import com.wyn.app.entity.Student;import com.wyn.app.entity.StudentList;import javax.jws.WebService;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;/** * Created by wangyanan on 2017/8/25. */@WebService@Path("/student")//@Produces(MediaType.APPLICATION_JSON)public interface StudentService {    //查询学生信息    @GET //http中的GET方法    @Path("/query/{id}") //id参数通过URL访问传递    @Produces(MediaType.APPLICATION_XML) //返回XML    public Student queryStudent(@PathParam("id")long id);    //查询学生列表    @GET //http中的GET方法    @Path("/querylist/{type}") //JSON格式    //@Produces({ "text/html;charset=utf-8", MediaType.TEXT_HTML })    //@Produces({MediaType.APPLICATION_JSON,"application/json;charset=utf-8"})    @Produces(MediaType.APPLICATION_JSON)    //@Produces(MediaType.APPLICATION_XML) //返回XML    //如果想让json返回xml需要在rest的url后边添加?_type=xml    public StudentList queryStudentList(@PathParam("type")String type) throws Exception;    //public Response queryStudentList(@QueryParam("type")String type) throws Exception;}

7 serviceImp 接口实现类层

package com.wyn.app.serviceImp;import com.wyn.app.entity.Student;import com.wyn.app.entity.StudentList;import com.wyn.app.service.StudentService;import java.util.ArrayList;import java.util.Date;import java.util.List;/** * Created by wangyanan on 2017/8/25. */public class StudentServiceImpl implements StudentService{    public Student queryStudent(long id) {            //使用静态数据            Student student = new Student();            student.setId(id);            student.setName("张三");            student.setBirthday(new Date());            return student;    }    public StudentList queryStudentList(String type) throws Exception {        StudentList studentList=new StudentList();        List<Student> list = new ArrayList<Student>();        Student student1 = new Student();        student1.setId(1L);        student1.setName("张三");        student1.setBirthday(new Date());        Student student2 = new Student();        student2.setId(2L);        student2.setName("王五");        student2.setBirthday(new Date());        list.add(student1);        list.add(student2);        studentList.setStudentList(list);        return studentList;        /*JSONArray jsonArray = JSONArray.fromObject(student1);        return Response.ok(jsonArray.toString()).build();*/    }}

8 访问接口
这里写图片描述
这里写图片描述

原创粉丝点击