荟萃馆

位置:首页 > IT认证 > J2EE

如何压缩Web Service数据

J2EE2.79W

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

如何压缩Web Service数据

  1. 首先模拟一个可以存放大数据的pojo对象,这个对象可以通过构造参数给定的size来模拟一个size大小的字符串。

package ress;

public class BigData {

private String name;

private String data;

public BigData() {

}

public BigData(String name, int size) {

= name;

StringBuilder sb = new StringBuilder();

for (int i = 0; i < size; i++) {

nd("0");

}

= ring();

}

public String getName() {

return name;

}

public void setName(String name) {

= name;

}

public String getData() {

return data;

}

public void setData(String data) {

= data;

}

}

  2. Web Service接口类,和普通的接口定义没有什么区别。

package ress;

import ethod;

import aram;

import esult;

import ervice;

@WebService

public interface BigDataService {

@WebMethod

@WebResult BigData getBigData(@WebParam String name, @WebParam int size);

}

  3. Web Service实现类

package ress;

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方法中的

nInterceptors()(new GZIPInInterceptor());

utInterceptors()(new GZIPOutInterceptor());

和testGetBigData方法中的

nInterceptors()(new GZIPInInterceptor());

utInterceptors()(new GZIPOutInterceptor());

上面两段代码就是告诉CXF使用压缩Interceptor来压缩和解压缩数据包。

package ress;

import nt;

import oint;

import ntProxy;

import ingInInterceptor;

import ingOutInterceptor;

import sProxyFactoryBean;

import sServerFactoryBean;

import InInterceptor;

import OutInterceptor;

import rt;

import reClass;

import ;

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();

nInterceptors()(new LoggingInInterceptor());

utInterceptors()(new LoggingOutInterceptor());

nInterceptors()(new GZIPInInterceptor());

utInterceptors()(new GZIPOutInterceptor());

erviceClass(s);

ddress(address);

te();

}

@Test

public void testGetBigData() {

JaxWsProxyFactoryBean factoryBean = new JaxWsProxyFactoryBean();

ddress(address);

erviceClass(s);

Object obj = te();

Client client = lient(obj);

Endpoint endpoint = ndpoint();

nInterceptors()(new GZIPInInterceptor());

utInterceptors()(new GZIPOutInterceptor());

BigDataService service = (BigDataService) obj;

rtNotNull(service);

String name = "my big data";

int size = 1024 * 1024 * 10;

long start = entTimeMillis();

BigData bigData = igData(name, size);

long stop = entTimeMillis();

tln("Time: " + (stop - start));

rtNotNull(bigData);

rtEquals(name, ame());

rtEquals(size, ata()th());

}

}

  5. 运行此unit test,可以在日志中看到数据包前后大小和内容。

标签:SERVICE web 压缩