如何压缩Web Service数据
在现实应用中有些时候会有比较大的数据对象需要传输,或者在一个比较慢的.网络环境下发布调用Web service,此时可以通过压缩数据流的方式来减小数据包的大小,从而提高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,可以在日志中看到数据包前后大小和内容。
-
计算机二级c++主要考试内容
C++是一种面向对象的计算机程序设计语言。C++这个词在中国大陆的程序员圈子中通常被读做C加加,而西方的程序员通常读做Cplusplus,CPP。下面是小编整理的关于计算机二级c++主要考试内容,欢迎参考!基本要求1.掌握C++语言的基本语法规则。2.熟练掌握有关类与对象的相...
-
2016年最新J2EE面试题及答案
J2EE核心是一组技术规范与指南,其中所包含的各类组件、服务架构及技术层次,均有共同的标准及规格,让各种依循J2EE架构的不同平台之间,存在良好的兼容性,解决过去企业后端使用的信息产品彼此之间无法兼容,企业内部或外部难以互通的窘境。下面本站小编为大家整理了关于...
-
2016年J2EE认证试题(附答案)
J2EE用来建设大型的分布式企业级应用程序。或者用更时髦的名词说就是电子商务应用程序。下面本站小编为大家推荐的是J2EE认证考试题,希望对大家有所帮助!一、基础问答1.下面哪些类可以被继承?java.lang.Thread(T)java.lang.Number(T)java.lang.Double(F)java.la...
-
2017年计算机二级office备考相关知识积累
多媒体技术从不同的角度有着不同的定义。比如有人定义多媒体计算机是一组硬件和软件设备;结合了各种视觉和听觉媒体,能够产生令人印象深刻的视听效果。下面是小编整理的关于计算机二级office备考相关知识积累,欢迎大家参考!一、多媒体技术的概念与应用。1.多媒体...