范文网 > 资料大全 > 综合资料 > 如何压缩Web Service数据

如何压缩Web Service数据

蓝玉 分享 更新时间:
投诉

如何压缩Web Service数据

在现实应用中有些时候会有比较大的数据对象需要传输,或者在一个比较慢的.网络环境下发布调用web service,此时可以通过压缩数据流的方式来减小数据包的大小,从而提高web service的性能。下面yjbys小编为大家准备了关于如何压缩Web Service数据的文章,欢迎阅读。

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,可以在日志中看到数据包前后大小和内容。

如何压缩Web Service数据

将本文的Word文档下载到电脑,方便收藏和打印
推荐度:
点击下载文档文档为doc格式