Apache CXF实战之五 压缩Web Service数据

分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow

也欢迎大家转载本篇文章。分享知识,造福人民,实现我们中华民族伟大复兴!

               

本文链接:http://blog.csdn.net/kongxx/article/details/7530216

Apache CXF实战之一 Hello World Web Service

Apache CXF实战之二 集成Sping与Web容器

Apache CXF实战之三 传输Java对象

Apache CXF实战之四 构建RESTful 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;@WebServicepublic 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,可以在日志中看到数据包前后大小和内容。







           

给我老师的人工智能教程打call!http://blog.csdn.net/jiangjunshow

这里写图片描述

猜你喜欢

转载自blog.csdn.net/mm2zzyzzp/article/details/84136935