如何壓縮Web Service數據
在現實應用中有些時候會有比較大的數據對象需要傳輸,或者在一個比較慢的網絡環境下發布調用web service,此時可以通過壓縮數據流的.方式來減小數據包的大小,從而提高web service的性能。下面yjbys小編為大家準備了關於如何壓縮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,可以在日誌中看到數據包前後大小和內容。
-
關於JavaEE中10個安全控制
很多常見攻擊,例如跨站點腳本攻擊(XSS)、SQL注入、跨站點偽造請求(CSRF),以及XML外部實體(XXE)絲毫沒有涵蓋。你可以阻止web應用程序和web服務暴露於這些攻擊,但這需要一定量的工作和測試。幸運的是,OpenWebApplicationSecurityProject(OWASP)公佈了10大最關鍵的we...
-
J2EE發展趨勢
在舊金山舉行的2011年JavaOne大會上,甲骨文公司展示了其推動Java平台企業版(JavaEE)發展的最新成果。JavaEE繼續大受歡迎,並有越來越多的開發人員採用,包括OracleGlassFishServer在內的JavaEE組件獲得了4000萬次下載。自2009年12月推出以來,6個主要IT廠商已經推出...
-
J2EE當前持久層設計常見問題
當前J2EE項目中,面臨的一個共同問題就是如果控制事務的併發訪問,雖然有些持久層框架已經為我們做了很多工作,但是理解原理,對於我們開發來説還是很有用處的。下面小編為大家整理了J2EE當前持久層設計的常見問題,一起來看看吧:事務併發訪問控制策略當前J2EE項目中,面臨...
-
Java EE的Web服務體系結構
Web服務(WebServices)是目前程序設計領域中的一項新技術,是一個嶄新的分佈式計算模式,在不同系統平台之間具有互操作性,通過因特網,實現不同應用程序之間的遠程過程調用。下面小編為大家整理了關於JavaEE的Web服務體系結構,一起來看看吧:Web服務使用基於XML的消息處...