當前位置:才華齋>IT認證>J2EE>

如何壓縮Web Service資料

J2EE 閱讀(2.68W)

在現實應用中有些時候會有比較大的資料物件需要傳輸,或者在一個比較慢的網路環境下發布呼叫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,可以在日誌中看到資料包前後大小和內容。