您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關Apache CXF中如何壓縮Web Service數據,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
在現實應用中有些時候會有比較大的數據對象需要傳輸,或者在一個比較慢的網絡環境下發布調用web service,此時可以通過壓縮數據流的方式來減小數據包的大小,從而提高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,可以在日志中看到數據包前后大小和內容。
上述就是小編為大家分享的Apache CXF中如何壓縮Web Service數據了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。