文档章节

webservice+restful+cxf(服务端客户端调用)

建-少
 建-少
发布于 2015/11/25 18:46
字数 611
阅读 39
收藏 0

1.web.xml

<servlet>
<servlet-name>CXFServlet</servlet-name>
<display-name>CXF Servlet</display-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>

 2.rest.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:jaxrs="http://cxf.apache.org/jaxrs"
 xmlns:cxf="http://cxf.apache.org/core"
 xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://cxf.apache.org/jaxrs
http://cxf.apache.org/schemas/jaxrs.xsd
http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
 <import resource="classpath:META-INF/cxf/cxf.xml" />
 <import resource="classpath:META-INF/cxf/cxf-extension-jaxrs-binding.xml" />
 <import resource="classpath:META-INF/cxf/cxf-servlet.xml" />
 <jaxrs:server id="restServiceContainer" address="/rest">
  <jaxrs:serviceBeans>
   <ref bean="restSample" />
   <ref bean="restVuln" />
  </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>
</beans>

3.java

@Path(value = "/sample")
public interface RESTSample {
 @GET
    @Produces(MediaType.TEXT_PLAIN)
    @Path("/test/{param}")
    public String doRequestTest(@PathParam("param") String param, 
            @Context HttpServletRequest servletRequest, @Context HttpServletResponse servletResponse);

4.直接访问路径  其中ws是web.xml中的配置,rest是rest.xml文件中的配置,demo是项目path路径

(1)直接显示发布接口

http://192.168.28.101:8080/project/ws

(2)直接访问资源,直接得到  demo资源下list的数据并且用xml格式返回

http://192.168.28.101:8080/project7.0/ws/rest/demo/list?_type=xml //同样可以使用_type=json返回数据

5.上边都是服务端发布,接下来是客户端调用

 private static WebClient client;
    
    @Before
    public void init() {
        // 手动创建webClient对象,注意这里的地址是发布的那个/rest地址
        String url = "http://192.168.28.101:8080/project/ws/rest/";
        client = WebClient.create(url);
        // 从Spring Ioc容器中拿webClient对象
//        ApplicationContext ctx = new ClassPathXmlApplicationContext("WEB-INF/applicationContext-client.xml");
//        client = (WebClient) ctx.getBean("webClient", WebClient.class);
    }
    @After
    public void destory(){
    }
   
    
    //自己�??发的
    @Test
    public void testGet() {
     try {
        System.out.println(client.path("sample").accept(MediaType.TEXT_PLAIN).get(String.class));
     } catch (Exception e) {
      e.printStackTrace();
     }
    }
    
    @Test
    public void testRequest() {
        System.out.println(client.path("sample/request/234234").accept(MediaType.TEXT_PLAIN).get(String.class));
    }
    
    @Test
    public void testBean() {
        User user = client.path("sample/bean/{id}", 25).accept(MediaType.APPLICATION_XML).get(User.class);
        System.out.println(user);
    }
    
    @Test
    public void testList() {
        System.out.println("--------------"+client.path("sample/list").accept(MediaType.APPLICATION_XML).get(Users.class).getUsers());
    }

6.针对返回json数据显示格式调整

<bean id="jsonProvider" class="org.apache.cxf.jaxrs.provider.json.JSONProvider">
<property name="serializeAsArray" value="true" />
<property name="arrayKeys" ref="jsonKeys" />
<property name="produceMediaTypes" ref="jsonTypes" />
<property name="consumeMediaTypes" ref="jsonTypes" />
<property name="ignoreNamespaces" value="true" />
<property name="dropRootElement" value="true" />
<property name="ignoreMixedContent" value="true" />
<property name="supportUnwrapped" value="true" />
<property name="attributesToElements" value="true" />
</bean>

7.针对restful拦截器使用

<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>

大工搞成,下边可以下载

链接:http://pan.baidu.com/s/1i3LdDGD 密码:4rqe

© 著作权归作者所有

建-少
粉丝 3
博文 50
码字总数 8874
作品 0
昌平
私信 提问
WCF服务端实例的生命周期

本篇主要介绍WCF服务的生命周期,以及通过配置来控制处理客户端请求的服务实例的建立和销毁的时机。 WCF共有三种方式来控制服务端实例的生命周期: 1.PreCall方式 对于客户端的每一个请求,服...

zting科技
2017/11/13
0
0
grpc双向流式调用——构建一个简单的流数据分析器

本文地址:https://www.jianshu.com/p/69e3ed94f630 传送门: grpc实战——构建一个简单的名称解析服务 grpc实战——服务端流式调用 grpc实战——客户端流式调用 本实例源码 关于grpc,之前已...

程序员Sunny
2018/07/15
0
0
分布式Java--基于远程调用实现系统间通信

分布式系统之间通信可以分为两种: 基于消息方式实现系统间通信 基于远程调用方式实现系统间通信 基于远程调用实现系统间通信 远程调用方式就是尽可能将系统间的调用模拟为系统内的调用,让使...

akane_oimo
2018/09/15
310
0
用httpinvoker使两个系统之间的方法可以互相调用

业务场景:两个系统之间可能存在通信(方法的调用),这时用httpinvoker可以实现轻量级的解决方案 分为服务端和客户端,客户端调用服务端提供的接口; 客户端配置: 可存在多个互相的调用。 ...

shimmerkaiye
2018/11/02
14
0
gRPC & Protocol Buffer 构建高性能接口实践

介绍如何使用 gRPC 和 ProtoBuf,快速了解 gRPC 可以参考这篇文章第一段:gRPC quick Start。 接口开发是软件开发占据举足轻重的地位,是现代软件开发之基石。体现在无论是前后端分离的 Web ...

hww_面条酱
2017/10/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Cloud Sleuth 整合 feign 源码分析

org.springframework.cloud.sleuth.instrument.web.client.feign.TraceFeignClient 包括创建span一些参数

xiaomin0322
7分钟前
1
0
Less 延伸

extend 是一个 Less 伪类,它通过使用 :extend 选择器在一个选择器中扩展其他选择器样式。 扩展语法 扩展可以是附加到选择器,也可以是集中放置在规则,看上去像是带有选择器参数的可选伪类,...

凌兮洛
7分钟前
1
0
RedHat 7.0系统中安装mysql 5.7.22

在安装之前,首先要查看的是,你的系统中有没有已经安装过的情况。键入rpm -qa|grep mysql,如果无任何显示,则表示没有安装过相关组件,如果有,则根据显示出来的名字,键入rpm -e --nodeps...

最菜最菜之小菜鸟
13分钟前
2
0
RPA:企业信息孤岛的“克星”

为了降本增效,近来世界范围内掀起一股流程优化的热潮,转型升级成为众多企业时刻挂在嘴边的热词。不过在企业数字化转型的过程中,信息孤岛的出现,往往成为了企业升级的绊脚石。 信息孤岛:...

UiBot
13分钟前
2
0
我的测试

我的测试

daiison
13分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部