pom

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.icil</groupId>
    <artifactId>springwebservice_rest_ser</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>war</packaging>





    <!--配置版本号 -->
    <properties>
        <jackson.version>1.9.13</jackson.version>
        <cxf.version>3.1.9</cxf.version>
        <mysql.version>5.1.34</mysql.version>
        <spring.version>4.3.0.RELEASE</spring.version>
        <hibernate.version>5.1.0.Final</hibernate.version>
        <querydsl.version>4.1.4</querydsl.version>
    </properties>


    <dependencies>
        <!-- Spring Framework -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-beans</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-core</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context-support</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-context</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-jdbc</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-orm</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-tx</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-web</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-test</artifactId>
            <version>${spring.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc -->
        <dependency>
            <groupId>org.springframework</groupId>
            <artifactId>spring-webmvc</artifactId>
            <version>${spring.version}</version>
        </dependency>

        <!-- Spring Framework end -->

        <!-- c3p0 start -->
        <!-- https://mvnrepository.com/artifact/com.mchange/c3p0 -->
        <dependency>
            <groupId>com.mchange</groupId>
            <artifactId>c3p0</artifactId>
            <version>0.9.5.2</version>
        </dependency>
        <!-- c3p0 end -->

        <!-- ehcache start -->
        <!-- <dependency> <groupId>net.sf.ehcache</groupId> <artifactId>ehcache-core</artifactId> 
            <version>2.6.11</version> </dependency> -->
        <!-- ehcache end -->

        <!--JPA start -->
        <dependency>
            <groupId>org.springframework.data</groupId>
            <artifactId>spring-data-jpa</artifactId>
            <version>1.10.4.RELEASE</version>
        </dependency>
        <!--JPA end -->

        <!--hibernate start -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-ehcache -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-ehcache</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-c3p0 -->
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-c3p0</artifactId>
            <version>${hibernate.version}</version>
        </dependency>

        <!--hibernate end -->



        <!--mysql start -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mysql.version}</version>
        </dependency>
        <!--mysql end -->

        <!--logger start -->
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-api</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>jcl-over-slf4j</artifactId>
            <version>1.7.7</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-core</artifactId>
            <version>1.1.2</version>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.2</version>
        </dependency>
        <!--logger end -->




        <!--test start -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <!--test end -->

        <!--common start -->
        <dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.3.2</version>
        </dependency>
        <!--common end -->

        <!-- https://mvnrepository.com/artifact/javax.servlet/jstl -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
            <version>1.2</version>
        </dependency>

        <!-- CXF -->
        <!--cxf-rt-frontend-jaxws支持soap类型服务 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxws</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <!--cxf-rt-frontend-jaxrs支持rest服务 -->
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-frontend-jaxrs</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.cxf</groupId>
            <artifactId>cxf-rt-transports-http</artifactId>
            <version>${cxf.version}</version>
        </dependency>
        <!--用于跨域的jar包 -->
        <dependency>
            <groupId>com.thetransactioncompany</groupId>
            <artifactId>java-property-utils</artifactId>
            <version>1.9</version>
        </dependency>
        <dependency>
            <groupId>com.thetransactioncompany</groupId>
            <artifactId>cors-filter</artifactId>
            <version>1.7</version>
        </dependency>
        
        
        
        
        <!-- Jackson Json处理工具包   用于处理bean 到 json json dao  bean   -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.4.2</version>
            </dependency>
        
        
        
        
        <!--json-->
        <dependency>  
            <groupId>org.codehaus.jackson</groupId>  
            <artifactId>jackson-core-asl</artifactId>  
            <version>${jackson.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.codehaus.jackson</groupId>  
            <artifactId>jackson-mapper-asl</artifactId>  
            <version>${jackson.version}</version>  
        </dependency> 
        <!-- 用于序列化json服务 -->
        <dependency>  
            <groupId>org.codehaus.jackson</groupId>  
            <artifactId>jackson-jaxrs</artifactId>  
            <version>${jackson.version}</version>  
        </dependency>  
        <dependency>  
            <groupId>org.codehaus.jackson</groupId>  
            <artifactId>jackson-xc</artifactId>  
            <version>${jackson.version}</version>  
        </dependency>


    </dependencies>


    <build>
        <finalName>testjpa</finalName>
        <plugins>
              <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-resources-plugin</artifactId>
                <version>2.5</version>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
            <!-- 引入tomcat插件 -->
            <plugin>
                <groupId>org.apache.tomcat.maven</groupId>
                <artifactId>tomcat7-maven-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <path>/</path>
                    <port>8099</port>
                </configuration>
            </plugin>

        </plugins>
    </build>


















</project>
View Code

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
  <display-name>webservice</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  
  
  

<!-- 配置过滤器 将POST请求转换为PUT和DELETE请求 -->
  <filter>
      <filter-name>HiddenHttpMethodFilter</filter-name>
      <filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
      <filter-name>HiddenHttpMethodFilter</filter-name>
      <url-pattern>/*</url-pattern>
</filter-mapping>
  
  
  
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:application*.xml</param-value>
  </context-param>
  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>cxf</servlet-name>
    <servlet-class> org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>cxf</servlet-name>
    <url-pattern>/webservice/*</url-pattern>
  </servlet-mapping>
</web-app>
View Code

applicationcontent.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:soap="http://cxf.apache.org/bindings/soap"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd
                        http://www.springframework.org/schema/aop
                        http://www.springframework.org/schema/aop/spring-aop.xsd
                        http://www.springframework.org/schema/tx 
                        http://www.springframework.org/schema/tx/spring-tx.xsd
                        http://cxf.apache.org/bindings/soap 
                        http://cxf.apache.org/schemas/configuration/soap.xsd
                        http://cxf.apache.org/jaxws 
                        http://cxf.apache.org/schemas/jaxws.xsd
                        ">
    <!-- 引入CXF Bean定义如下,早期的版本中使用 -->
    <!-- <import resource="classpath:META-INF/cxf/cxf.xml" />
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml" />
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> -->
    
    <!-- 配置自动扫描的包 -->
    <context:component-scan base-package="com.icil"></context:component-scan>

    <!-- 配置 C3P0 数据源 -->
    <context:property-placeholder location="classpath:db.properties"/>

    <bean id="dataSource"
        class="com.mchange.v2.c3p0.ComboPooledDataSource">
        <property name="user" value="${jdbc.user}"></property>
        <property name="password" value="${jdbc.password}"></property>
        <property name="driverClass" value="${jdbc.driverClass}"></property>
        <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>    
        
        <!-- 配置其他属性 -->
    </bean>
    
    <!-- 配置 EntityManagerFactory -->
    <bean id="entityManagerFactory"
        class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
        <property name="dataSource" ref="dataSource"></property>
        <!-- 配置 JPA 提供商的适配器. 可以通过内部 bean 的方式来配置 -->
        <property name="jpaVendorAdapter">
            <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"></bean>
        </property>    
        <!-- 配置实体类所在的包 -->
        <property name="packagesToScan" value="com.icil.entity"></property>
        <!-- 配置 JPA 的基本属性. 例如 JPA 实现产品的属性 -->
        <property name="jpaProperties">
            <props>
                <prop key="hibernate.show_sql">true</prop>
                <prop key="hibernate.format_sql">true</prop>
                <prop key="hibernate.hbm2ddl.auto">update</prop>
            </props>
        </property>
    </bean>
    
    <!-- 配置 JPA 使用的事务管理器 -->
    <bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory"></property>    
    </bean>
    
    <!-- 配置支持基于注解是事务配置 -->
    <tx:annotation-driven transaction-manager="transactionManager"/>
  

   <!-- CXF 注册服务 -->
  <!-- <bean id="customerService" class="com.icil.service.CustomerServiceImpl"></bean> --> 
    <!-- <jaxws:server id="myService" address="/customer">
        <jaxws:serviceBean>
            <ref bean="customerService"/>
        </jaxws:serviceBean>
    </jaxws:server> -->



</beans>
View Code

applicationWebService.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"   
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:jaxrs="http://cxf.apache.org/jaxrs"
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-4.0.xsd   
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
    http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd">  

    <!--
        <import resource="classpath:META-INF/cxf/cxf.xml"/>
        <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
        <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml"/>
        <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>-->
        
     <bean id="customerService" class="com.icil.service.CustomerServiceImpl"></bean> 
    <jaxrs:server id="webService" address="/">
        <!--输入拦截器设置-->
        <jaxrs:inInterceptors>
            <bean class="com.icil.interceptor.BeforeInterceptor1"></bean>
            <bean class="com.icil.interceptor.BeforeInterceptor"></bean>
        </jaxrs:inInterceptors>

        <!--输出拦截器设置-->
        <jaxrs:outInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"> </bean>
            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
        </jaxrs:outInterceptors>
        
        <!--serviceBeans:暴露的WebService服务类-->
        <jaxrs:serviceBeans>
            <ref bean="customerService"/>
        </jaxrs:serviceBeans>
            
        <!--支持的协议-->
        <jaxrs:extensionMappings>
            <entry key="json" value="application/json"/>
            <entry key="xml" value="application/xml"/>
        </jaxrs:extensionMappings>
        <!--编码格式-->
        <jaxrs:languageMappings>
        
        </jaxrs:languageMappings>
        
        <!--对象转换, 此处可以定义多个-->
        <jaxrs:providers>
             <!-- 注册数据转换器,该转换器会自动将JavaBean转换为json数据 -->
            <bean class="org.codehaus.jackson.jaxrs.JacksonJaxbJsonProvider"/>
            <!--  JAX-RS 自动将传送的数据解析成 JAXBElement 包装类 -->
            <bean class="org.apache.cxf.jaxrs.provider.JAXBElementProvider" />  
        </jaxrs:providers>
    </jaxrs:server>
</beans>
View Code

db.properties

jdbc.user=root
jdbc.password=dAhlofwww
jdbc.driverClass=com.mysql.jdbc.Driver
jdbc.jdbcUrl=jdbc:mysql:///sea
View Code

inteface:

package com.icil.service;


import java.util.List;

import javax.jws.WebService;
import javax.ws.rs.BeanParam;
import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.FormParam;
import javax.ws.rs.GET;
import javax.ws.rs.MatrixParam;
import javax.ws.rs.POST;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.MediaType;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestAttribute;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import com.icil.entity.Customer;
@WebService
@Path("/customerService")
//@Produces({MediaType.APPLICATION_JSON,"application/json;charset=utf-8"}) //返回JSON
public interface CustomerService {
    
   @Produces({MediaType.APPLICATION_XML,MediaType.APPLICATION_XML})//@Produces  输出数据的格式 
   @GET //http中的get方法
   @Path("/find/{id}") // @PathParam("id")//可以获取URI中指定规则的参数
   Customer findCustomerById( @PathParam("id")int cid);
   
   @Produces({MediaType.APPLICATION_JSON,"application/json;charset=utf-8"}) //返回JSON
   @GET  
   @Path("/findCustomers")
   List<Customer> findCustomerAll();
   
   
   @GET  //查找
   @Path("/findAll")
   String findAllCustomer();  //该方法实现已将对象转为json
   
   
   
   
  /*   @PUT  //putch修改  update 
       @Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
       @Path("/updateCustomerName/{cid}/{cname}")
       void updateCustomerName(@PathParam("cid")int cid,@PathParam("cname") String cname);
   */
  
   
   /*******************put  参数 形式  *******************/
   //http://locahost/customerService/updateCustomerName ? cid=2&cname="AAAAA"
   @PUT //putch修改  updPate 
  // @Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
   @Path("/updateCustomerName/{cid}/{cname}")
  // @QueryParam 用于获取GET请求中的查询参数
   void updateCustomerName1(@PathParam("cid") int cid,@PathParam("cname") String cname);
   
   
   
   
   
   /*******************get  参数 形式1  *******************/
   //http://locahost/customerService/updateCustomerName ? cid=2&cname="AAAAA"
   @GET//putch修改  updPate 
  // @Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
   @Path("/updateCustomerName")
  // @QueryParam 用于获取GET请求中的查询参数
   void updateCustomerName(@QueryParam("cid") int cid,@QueryParam("cname") String cname);
   
       
   
   /*******************get  参数 形式2 *******************/
   /**
    * @matrixparam注释可以用来绑定包含多个   property (属性)=value(值) 方法参数表达式。
    * 例如,你要调用一个网址 
            *   http://locahost/customerService/updateCustomerName ? cid=2&cname="AAAAA"
    * 
    */
  /*   @PUT
       @Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
       @Path("/updateCustomerName")
       public String updateCustomerName(@MatrixParam("cid") String cid, @MatrixParam("cname") String cname) ;
  
   */
   
   
   
   
   /*******************表单提交 post  参数问题1 ********************************/
   
   //@FormParam,从POST请求的表单参数中获取数据
   @POST  
        /*    application/x-www-form-urlencoded: 窗体数据被编码为名称/值对。
               当action为get时候,浏览器用x-www-form-urlencoded的编码方式把form数据转换成一个字串(name1=value1&name2=value2…),
                然后把这个字串append到url后面,用?分割,加载这个新的url。*/
// @Consumes("application/x-www-form-urlencoded")
 //  @Consumes(value={"text/xml", "application/json"})
   @Path("/addForm")
   public void  addCustomerForm(@FormParam(value="cname") String cname);
   
   
   
   
   /*******************表单提交 post  参数问题2 ********************************/
   
   //@BeanParam的使用
  // 当请求参数很多时,比如客户端提交一个修改用户的PUT请求,请求中包含很多项用户信息。这时可以用@BeanParam。

   @POST
   //@Consumes(MediaType.APPLICATION_JSON)
   @Consumes(MediaType.APPLICATION_XML)
   @Path("/add")
   public void  add(@RequestBody Customer customer);

   
   
   
   
   @POST  //增加   不安全 ,每次都不一样,都会创建资源
   @Consumes(MediaType.APPLICATION_JSON)
   @Path("addCustomer")
   void addCustomer(Customer customer);
   
   
   
   @DELETE // 删除  
   //@Consumes(MediaType.APPLICATION_JSON)//接受数据的格式
   @Path("/deleteCustomerById/{cid}")
   void deleteCustomerById(@PathParam("cid")int cid );
   
}
View Code

inteceptor

package com.icil.interceptor;

import org.apache.cxf.interceptor.Fault;
import org.apache.cxf.interceptor.InterceptorChain;
import org.apache.cxf.message.Message;
import org.apache.cxf.phase.AbstractPhaseInterceptor;
import org.apache.cxf.phase.Phase;
import org.springframework.stereotype.Component;

/**
 *自定义拦截器0
 */
@Component
public class BeforeInterceptor  extends AbstractPhaseInterceptor<Message>{

    public BeforeInterceptor() {
        super(Phase.POST_INVOKE); //在方法调用之后调用
        // TODO Auto-generated constructor stub
    }

    @Override
    public void handleMessage(Message mes) throws Fault {
        System.out.println("在方法调用之后调用:已经调用");
        
    }

    

}
View Code

 

posted on 2018-04-16 18:26  lshan  阅读(330)  评论(0编辑  收藏  举报