• CXF_Spring_Rest


    一、接口类

    <PRE class=java name="code">@Path("/rest_HelloWorld")
    public interface Rest_HelloWorld {
    	@GET 
    	@Produces (MediaType.TEXT_PLAIN) 
    	@Path("/say/{name}") 
    	public String say(@PathParam("name")String name);
    	
    	@GET 
    	@Produces (MediaType.TEXT_PLAIN) 
    	@Path("/sayHello/{name}") 
    	public String sayHello(@PathParam("user")User user);
    	
    	@GET 
    	@Produces ({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML}) 
    	@Path("/getList/{id}") 
    	public List<User> getList(@PathParam("id")Long id);
    	
    }</PRE>
     
    

    (1)、@Path,标注资源类或方法的相对路径

    (2)、@GET,@PUT,@POST,@DELETE,标注方法是用的HTTP请求的类型

      GET 列出资源集合的所有成员。
      PUT 使用一个集合更新(替换)另一个集合。
      POST 在集合中创建数字资源, 
      DELETE 删除整个资源集合。

    (3)、@Produces,标注返回的MIME媒体类型,( 注解标注,这个注解可以包含一组字符串,默认值是*/*,它指定REST 服务的响应结果的MIME 类型,例如:application/xml、application/json、image/jpeg 等),你也可以同时返回多种类型,但具体生成结果时使用哪种格式取决于ContentType。

         CXF 默认返回的是JSON 字符串。

    (4)、@PathParam,@QueryParam,@HeaderParam,@CookieParam,@MatrixParam,@FormParam,分别标注方法的参数来自于HTTP请求的不同位置,例如@PathParam来自于URL的路径,@QueryParam来自于URL的查询参数,@HeaderParam来自于HTTP请求的头信息,@CookieParam来自于HTTP请求的Cookie。

    2、接口实现类

    @Service("rest_HelloWorldImpl")
    public class Rest_HelloWorldImpl implements Rest_HelloWorld {
    
    	public String say(String name) {
    			return name+",您好!";
    	}
    
    	public String sayHello(User user) {
    		return user.getName()+",您好!";
    	}
    	
    	public List<User> getList(Long id){
    		List<User> list = new ArrayList<User>();
    		
    		Long sid=1L;
    		User user = new User(sid,"张三"+sid,21);
    		list.add(user);
    		
    		sid=2L;
    	    user = new User(sid,"张三"+sid,21);
    		list.add(user);
    		
    		sid=3L;
    		user = new User(sid,"张三"+sid,21);
    		list.add(user);
    		return list;
    	}
    }
    

    3、CXF在Spring中的配置

    <?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.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-servlet.xml" />
    	
    
    	<bean id="inMessageInterceptor" class="org.apache.cxf.interceptor.LoggingInInterceptor" />
    	<bean id="outMessageInterceptor" class="org.apache.cxf.interceptor.LoggingOutInterceptor"/>
    
       <!--id:名称(随意配),implementor:指定接口具体实现类,address:随意配-->
    	<jaxws:endpoint id="helloWorld"  implementor="#HelloWorldImpl" address="/HelloWorld"  >
    		<!-- 输入日志拦截器 -->
    	   <jaxws:inInterceptors>
    	   		<ref bean="inMessageInterceptor"/>
    	   </jaxws:inInterceptors>
    	   <!-- 输出日志拦截器 -->
    	   <jaxws:outInterceptors>
    	      <ref bean="outMessageInterceptor"/>
    	   </jaxws:outInterceptors>
    	   <jaxws:properties>
    	      <entry key="mtom_enabled" value="true"></entry>
    	   </jaxws:properties>
    	</jaxws:endpoint>
    	
    	<jaxrs:server id="rest_HelloWorld" address="/">
    		<jaxrs:inInterceptors>
    		   <ref bean="inMessageInterceptor"/>
    		</jaxrs:inInterceptors>
    		<jaxrs:outInterceptors>
    		    <ref bean="outMessageInterceptor"/>
    		</jaxrs:outInterceptors>
    		<jaxrs:serviceBeans>
    			<ref bean="rest_HelloWorldImpl" />
    		</jaxrs:serviceBeans>
    		<jaxrs:extensionMappings>
    			<entry key="json" value="application/json" />
    			<entry key="xml" value="application/xml" />
    		</jaxrs:extensionMappings>
    		<jaxrs:languageMappings>
    			<entry key="en" value="en-gb" />
    		</jaxrs:languageMappings>
    	</jaxrs:server>
    
    	<!-- WebService 客户端 spring 配置文件cxf与Spring集成,cxf里提供了一个工厂类org.apache.cxf.jaxws.JaxWsProxyFactoryBean,
    	可以方便实现的调用WebService。serviceClass属性是接口类,address是webService的路径在其他bean里如果要调用webservice,
    	只要将client这个bean注入到需要使用的bean里。-->
    	<bean id="client" class="com.exp.service.outer.HelloWorld" factory-bean="clientFactory" factory-method="create" />
    	<bean id="clientFactory" class="org.apache.cxf.jaxws.JaxWsProxyFactoryBean">
    		<property name="serviceClass" value="com.exp.service.outer.HelloWorld" />
    		<property name="address" value="http://localhost:8080/demo/webservice/HelloWorld" />
    	</bean>
    </beans>
    

      

    4、访问

      http://localhost:8080/demo/webservice/rest_HelloWorld/getList/1

      返回JSON格式: http://localhost:8080/demo/webservice/rest_HelloWorld/getList/1?_type=json

      返回XML格式: http://localhost:8080/demo/webservice/rest_HelloWorld/getList/1?_type=xml

    5、资料:

        http://www.ibm.com/developerworks/cn/web/wa-aj-tomcat/

        (clience)http://alvinalexander.com/java/java-apache-httpclient-restful-client-examples

      

  • 相关阅读:
    20111013 18:32 女友刁钻无聊问题之标准答案
    20111013 17:40 学ACM有什么用
    typedef用法(1)
    深入C++的new(20111115 15:08 )
    用四个0算二十四点
    20111010 20:14 HDU 4021 (15数码)
    pku3020 Antenna Placement (解法1)
    C++箴言:理解typename的两个含义
    20110907 00:16 ubuntu 如何修改当前用户名
    vc6.0中添加msdn 20111105 11:52
  • 原文地址:https://www.cnblogs.com/caroline4lc/p/4419355.html
Copyright © 2020-2023  润新知