cxf数据压缩

一、HTTP数据的压缩

  在http协议中当content-encoding对应的值为gzip,deflate,x-gzip,x-deflate时,数据是经过了压缩之后再进行传输的。有些时候我们当我们传输的数据比较大的时候,可以采取这种方式,从而提高数据的传输速度。在web service中,当某个接口返回的数据比较大的时候,也可以进行压缩处理。

二、示例

  1、使用soap协议的web service

  实体类:

package com.cxf.compress.ws;public class Person {private String name;private String homeAddress;private String companyAddress;public Person() {StringBuilder sb = new StringBuilder();for (int i = 1; i < 10; ++i) {sb.append("X");}this.name = sb.toString();this.homeAddress = sb.toString();this.companyAddress = sb.toString();}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getHomeAddress() {return homeAddress;}public void setHomeAddress(String homeAddress) {this.homeAddress = homeAddress;}public String getCompanyAddress() {return companyAddress;}public void setCompanyAddress(String companyAddress) {this.companyAddress = companyAddress;}
}

  接口MyService:

package com.cxf.compress.ws;
import java.util.List;import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;@WebService
public interface MyService{@WebMethod@WebResult(name = "personResult")public List<Person> getPerson();
}

  实现类MyServiceImpl:

package com.cxf.compress.ws;
import java.util.ArrayList;
import java.util.List;public class MyServiceImpl implements MyService {@Overridepublic List<Person> getPerson() {List<Person> list = new ArrayList<Person>();list.add(new Person());list.add(new Person());list.add(new Person());list.add(new Person());return list;}
}

  服务端启动类:

package com.cxf.compress.ws;import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
import org.apache.cxf.transport.common.gzip.GZIPInInterceptor;
import org.apache.cxf.transport.common.gzip.GZIPOutInterceptor;
/*** 使用数据压缩**/
public class MyServer {public static void main(String[] args) {JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();factoryBean.getInInterceptors().add(new GZIPInInterceptor());//解压使用 gzip的请求factoryBean.getInInterceptors().add(new LoggingInInterceptor());GZIPOutInterceptor out = new GZIPOutInterceptor();out.setThreshold(0);//压缩数据的阀值设置为0, 默认超过1k的数据才使用gzip压缩,设置为0,表示响应的数据只要大于0就进行压缩处理
        factoryBean.getOutInterceptors().add(out);//返回的数据使用gizp压缩factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());String address = "http://localhost:8080/cxf/myservice";factoryBean.setAddress(address);factoryBean.setServiceClass(MyServiceImpl.class);factoryBean.create();}
}

  客户端请求类:

package com.cxf.compress.ws;import java.util.List;import org.apache.cxf.endpoint.Client;
import org.apache.cxf.endpoint.Endpoint;
import org.apache.cxf.frontend.ClientProxy;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
import org.apache.cxf.transport.common.gzip.GZIPInInterceptor;
import org.apache.cxf.transport.common.gzip.GZIPOutInterceptor;public class MyClient {public static void main(String[] args) {JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();factoryBean.setAddress("http://localhost:8080/cxf/myservice");factoryBean.setServiceClass(MyService.class);Object object = factoryBean.create();Client client = ClientProxy.getClient(object);Endpoint endpoint = client.getEndpoint();endpoint.getInInterceptors().add(new GZIPInInterceptor());//解压使用 gzip的请求
GZIPOutInterceptor out = new GZIPOutInterceptor();out.setThreshold(0);//压缩数据的阀值设置为0, 默认超过1k的数据才使用gzip压缩,设置为0,表示响应的数据只要大于0就进行压缩处理
endpoint.getOutInterceptors().add(out);//返回的数据使用gizp压缩
MyService service = (MyService) object;List<Person> list = service.getPerson();System.out.println("name: " + list.get(0).getName());}
}

  2、restful web service

  实体类Person:

package com.cxf.compress.rs;import java.util.Date;import javax.xml.bind.annotation.XmlRootElement;@XmlRootElement(name = "person")
public class Person {private int id;private String name;private Date date;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Date getDate() {return date;}public void setDate(Date date) {this.date = date;}}

  服务接口MyService:

package com.cxf.compress.rs;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;@Path("person") 
@Produces("*/*")
public interface MyService {@GET@Path("/")public java.util.List<Person> getAll();}

  服务接口实现类MyServiceImpl:

package com.cxf.compress.rs;
import java.util.Date;
import java.util.List;import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;public class MyServiceImpl implements MyService {@Overridepublic List<Person> getAll() {List<Person> persons = new java.util.ArrayList<Person>();Person person = new Person();person.setId(111);person.setName("zhangsan");person.setDate(new Date());Person person2 = new Person();person2.setId(222);person2.setName("lisi");person2.setDate(new Date());persons.add(person);persons.add(person2);return persons;}}

  服务类Server:

package com.cxf.compress.rs;import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;
import org.apache.cxf.transport.common.gzip.GZIPInInterceptor;
import org.apache.cxf.transport.common.gzip.GZIPOutInterceptor;public class Server {public static void main(String[] args) {JAXRSServerFactoryBean factoryBean = new JAXRSServerFactoryBean();factoryBean.setAddress("http://localhost:8080/myservice");factoryBean.setResourceClasses(MyServiceImpl.class);factoryBean.getInInterceptors().add(new GZIPInInterceptor());//解压使用 gzip的请求factoryBean.getInInterceptors().add(new LoggingInInterceptor());GZIPOutInterceptor out = new GZIPOutInterceptor();out.setThreshold(0);//压缩数据的阀值设置为0, 默认超过1k的数据才使用gzip压缩,设置为0,表示响应的数据只要大于0就进行压缩处理
        factoryBean.getOutInterceptors().add(out);//返回的数据使用gizp压缩factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());factoryBean.create();}
}

  客户端访问类Client:

package com.cxf.compress.rs;import java.io.IOException;
import java.io.InputStream;
import java.io.StringWriter;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.TransformerFactoryConfigurationError;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;import org.apache.cxf.helpers.IOUtils;
import org.apache.cxf.io.CachedOutputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpStatus;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
import org.apache.http.entity.ContentType;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.w3c.dom.Document;
import org.w3c.dom.Element;public class Client {public static void main(String[] args) throws Exception {String getResult = get("http://localhost:8080/myservice/person");System.out.println(getResult);}private static String get(String url) throws IOException,ParserConfigurationException {HttpGet get = new HttpGet(url);get.setHeader("Accept", "application/json");get.addHeader("Accept-Encoding" ,"gzip"); //请求使用数据压缩CloseableHttpClient client = HttpClients.createDefault();String responseContent = null;CloseableHttpResponse response = null;try {response = client.execute(get);HttpEntity entity = response.getEntity();// 响应体if (response.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {// 响应码responseContent = EntityUtils.toString(entity, "UTF-8");}} catch (ClientProtocolException e) {e.printStackTrace();}return responseContent;}}

  对于使用了gzip进行压缩之后的响应,通过topMon进行监听后,传输的数据大小会小很多。  

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400964.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ER图

1、E-R图也称实体-联系图(Entity Relationship Diagram)&#xff0c;提供了表示实体类型、属性和联系的方法&#xff0c;用来描述现实世界的概念模型。2、它是描述现实世界概念结构模型的有效方法。是表示概念模型的一种方式&#xff0c;用矩形表示实体型&#xff0c;矩形框内写…

CXP 协议中upconnection 与downconnection的说明及其区别

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

事件接收器

今天温习了一下事件接收器&#xff0c;顺便记录一下。 1、用vs开发事件接收器&#xff0c;如果是针对列表或者列表项的&#xff0c;则不能够具体到某一列表&#xff1b;但是实际应用中大部分是要求具体到某一列表的&#xff0c;那怎么办呢&#xff1f;在这里本猪猪给大家推荐一…

python redis插件安装

#tar xvzf redis-py-2.2.1.tar.gz#cd redis-py-2.2.1#python setup.py install附件&#xff1a;https://app.yinxiang.com/shard/s41/res/689fcc84-4411-4ee6-b7a9-6bbaefb8a3b1/redis-py-2.2.1.tar.gz转载于:https://www.cnblogs.com/biboxie/p/4233318.html

Eclipse之文件【默认编码格式设置】,防止乱码等问题

文件默认编码格式设置步骤如下&#xff1a; 这里显示的是workspace的视图 其他格式文件的视图如下&#xff1a; 转载于:https://www.cnblogs.com/TCB-Java/p/6857923.html

浏览器上写代码,4核8G微软服务器免费用,Codespaces真香

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

简单的创建一个性能计数器

一、性能监控的作用性能监控可以用于获取关于应用程序的正常行为的一般消息&#xff0c;性能监控是一个强大的工具&#xff0c;有助于理解系统的工作负载&#xff0c;观察变化和趋势&#xff0c;尤其是运行在服务器上的应用程序二、性能监控类&#xff08;System.Diagnostics&a…

一些简单的链表算法一

链表是很重要的一种数据结构&#xff0c;又是一种看似简单但很难熟练掌握的东西&#xff0c;究其主要原因应该就是它与指针结合的太紧密了。为了让大家更好的学习&#xff0c;特将一些简单的算法罗列如下&#xff0c;大家一起探讨&#xff08;用c写的而且是不带头结点的&#x…

dubbo是如何实现可扩展的?(二)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

李卓豪:网易数帆数据中台逻辑数据湖的实践

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

域名商2014年度报告:35互联域名总量增至33.4万

IDC评述网&#xff08;idcps.com&#xff09;01月21日报道&#xff1a;据域名统计机构WebHosting.info数据&#xff0c;截至2014年12月29日&#xff0c;35互联域名总量为334,559个&#xff0c;年净增长6,614个&#xff0c;与环比去年14,032个的年净增长量&#xff0c;涨幅约缩小…

RabbitMQ消息队列———安装(一)

一、RabbitMQ队列 不同进程间的通信&#xff0c;简称IPC。不同的进程间的通信&#xff0c;可以基于队列解决&#xff0c;将生产者和消费者进行解耦&#xff0c;中间的队列作为其桥梁。RabbitMQ是一个在AMQP基础上完整的&#xff0c;可复用的企业消息系统。他遵循Mozilla Public…

App机型测试

1. 目前&#xff0c; Android APP开发完成后&#xff0c;通常需要在哪些机型上进行测试&#xff1f;  2. 目前&#xff0c; 开发Android APP时&#xff0c;需要考虑的分辨率有哪些&#xff1f;  这两个问题可以合起来回答的。  http://developer.android.com/about/dashb…

程序分析与优化 - 5 指针分析

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

linux 系统下配置java环境变量

liunx桌面版本系统下载地址&#xff1a;http://www.ubuntukylin.com/downloads/ 1、源码包准备&#xff1a; 首先到官网下载jdk&#xff0c;http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html&#xff0c;我下载jdk-7u45-linux-x64.tar.gz…

ECShop目录

ECShop2.5.1_Beta upload 的目录┣ activity.php 活动列表┣ affiche.php 广告处理文件┣ affiliate.php 生成商品列表┣ article.php 文章内容┣ article_cat.php文章分类┣ auction.php 拍卖前台文件┣ brand.php 品牌列表┣ captcha.php 生成验证码┣ catalog.php 列出所以分…

HTML 编辑器

可以使用专业的 HTML 编辑器来编辑 HTML&#xff0c;几款常用的编辑器&#xff1a; Notepad&#xff1a;https://notepad-plus-plus.org/Sublime Text&#xff1a;http://www.sublimetext.com/HBuilder&#xff1a;http://www.dcloud.io/Notepad Notepad是 Windows操作系统下的…

程序员的十个等级

2019独角兽企业重金招聘Python工程师标准>>> 自西方文艺复兴以来&#xff0c;中国在自然科学方面落后西方很多&#xff0c;软件领域也不例外。当然现在中国的许多程序员们对此可能有许多不同的意见&#xff0c;有些人认为中国的程序员水平远落后于西方&#xff0c;有…

.NET Core中JWT+Auth2.0实现SSO,附完整源码(.NET6)

&#x1f680; 优质资源分享 &#x1f680; 学习路线指引&#xff08;点击解锁&#xff09;知识定位人群定位&#x1f9e1; Python实战微信订餐小程序 &#x1f9e1;进阶级本课程是python flask微信小程序的完美结合&#xff0c;从项目搭建到腾讯云部署上线&#xff0c;打造一…

11步提高代码质量和整体工作效率

作为专业程序员这些年来学到的能真正提高代码质量和整体工作效率的11件事情。 1. 永远不要复制代码 不 惜任何代价避免重复的代码。如果一个常用的代码片段出现在了程序中的几个不同地方&#xff0c;重构它&#xff0c;把它放到一个自己的函数里。重复的代码会导致你的同事 在读…