在现实应用中有些时候会有比较大的数据对象需要传输,或者在一个比较慢的网络环境下发布调用web service,此时可以通过压缩数据流的方式来减小数据包的大小,从而提高web service的性能。下面来看看怎样来做到这一点。

鼓楼ssl适用于网站、小程序/APP、API接口等需要进行数据传输应用场景,ssl证书未来市场广阔!成为成都创新互联公司的ssl证书销售渠道,可以享受市场价格4-6折优惠!如果有意向欢迎电话联系或者加微信:028-86922220(备注:SSL证书合作)期待与您的合作!
1. 首先模拟一个可以存放大数据的pojo对象,这个对象可以通过构造参数给定的size来模拟一个size大小的字符串。
- package com.googlecode.garbagecan.cxfstudy.compress;
 - public class BigData {
 - private String name;
 - private String data;
 - public BigData() {
 - }
 - public BigData(String name, int size) {
 - this.name = name;
 - StringBuilder sb = new StringBuilder();
 - for (int i = 0; i < size; i++) {
 - sb.append("0");
 - }
 - this.data = sb.toString();
 - }
 - public String getName() {
 - return name;
 - }
 - public void setName(String name) {
 - this.name = name;
 - }
 - public String getData() {
 - return data;
 - }
 - public void setData(String data) {
 - this.data = data;
 - }
 - }
 
2. Web Service接口类,和普通的接口定义没有什么区别。
- package com.googlecode.garbagecan.cxfstudy.compress;
 - import javax.jws.WebMethod;
 - import javax.jws.WebParam;
 - import javax.jws.WebResult;
 - import javax.jws.WebService;
 - @WebService
 - public interface BigDataService {
 - @WebMethod
 - @WebResult BigData getBigData(@WebParam String name, @WebParam int size);
 - }
 
3. Web Service实现类
- package com.googlecode.garbagecan.cxfstudy.compress;
 - public class BigDataServiceImpl implements BigDataService {
 - public BigData getBigData(String name, int size) {
 - BigData bigData = new BigData(name, size);
 - return bigData;
 - }
 - }
 
4. 测试类,这片文章使用了JUnit测试类来做测试。setUpBeforeClass方法用来启动Service, testGetBigData方法用来测试web service。
注意setUpBeforeClass方法中的
factoryBean.getInInterceptors().add(new GZIPInInterceptor());
factoryBean.getOutInterceptors().add(new GZIPOutInterceptor());
和testGetBigData方法中的
endpoint.getInInterceptors().add(new GZIPInInterceptor());
endpoint.getOutInterceptors().add(new GZIPOutInterceptor());
上面两段代码就是告诉CXF使用压缩Interceptor来压缩和解压缩数据包。
- package com.googlecode.garbagecan.cxfstudy.compress;
 - import org.apache.cxf.endpoint.Client;
 - import org.apache.cxf.endpoint.Endpoint;
 - import org.apache.cxf.frontend.ClientProxy;
 - import org.apache.cxf.interceptor.LoggingInInterceptor;
 - import org.apache.cxf.interceptor.LoggingOutInterceptor;
 - import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;
 - import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
 - import org.apache.cxf.transport.http.gzip.GZIPInInterceptor;
 - import org.apache.cxf.transport.http.gzip.GZIPOutInterceptor;
 - import org.junit.Assert;
 - import org.junit.BeforeClass;
 - import org.junit.Test;
 - public class BigDataServiceTest {
 - private static final String address = "http://localhost:9000/ws/compress/bigDataService";
 - @BeforeClass
 - public static void setUpBeforeClass() throws Exception {
 - JaxWsServerFactoryBean factoryBean = new JaxWsServerFactoryBean();
 - factoryBean.getInInterceptors().add(new LoggingInInterceptor());
 - factoryBean.getOutInterceptors().add(new LoggingOutInterceptor());
 - factoryBean.getInInterceptors().add(new GZIPInInterceptor());
 - factoryBean.getOutInterceptors().add(new GZIPOutInterceptor());
 - factoryBean.setServiceClass(BigDataServiceImpl.class);
 - factoryBean.setAddress(address);
 - factoryBean.create();
 - }
 - @Test
 - public void testGetBigData() {
 - JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();
 - factoryBean.setAddress(address);
 - factoryBean.setServiceClass(BigDataService.class);
 - Object obj = factoryBean.create();
 - Client client = ClientProxy.getClient(obj);
 - Endpoint endpoint = client.getEndpoint();
 - endpoint.getInInterceptors().add(new GZIPInInterceptor());
 - endpoint.getOutInterceptors().add(new GZIPOutInterceptor());
 - BigDataService service = (BigDataService) obj;
 - Assert.assertNotNull(service);
 - String name = "my big data";
 - int size = 1024 * 1024 * 10;
 - long start = System.currentTimeMillis();
 - BigData bigData = service.getBigData(name, size);
 - long stop = System.currentTimeMillis();
 - System.out.println("Time: " + (stop - start));
 - Assert.assertNotNull(bigData);
 - Assert.assertEquals(name, bigData.getName());
 - Assert.assertEquals(size, bigData.getData().length());
 - }
 - }
 
5. 运行此unit test,可以在日志中看到数据包前后大小和内容。
原文链接:http://blog.csdn.net/kongxx/article/details/7530216
【系列文章】
                当前标题:ApacheCXF实战之五:压缩WebService数据
                
                链接地址:http://www.csdahua.cn/qtweb/news6/69406.html
            
网站建设、网络推广公司-快上网,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 快上网