在CXF客户端中启用gzip压缩

And*_*rte 7 java web-services cxf

我正在尝试让我的客户端使用gzip.我在服务器中启用了GZip功能.似乎客户端没有发送正确的标头:

POST /api/v1/data HTTP/1.1
Content-Type: text/xml; charset=UTF-8
Accept: */*
SOAPAction: ""
User-Agent: Apache CXF 2.6.2
Cache-Control: no-cache
Pragma: no-cache
Host: localhost:8001
Connection: keep-alive
Content-Length: 539
Run Code Online (Sandbox Code Playgroud)

这是我创建客户端的代码:

 private static final QName SERVICE_NAME = new QName(
            "http://xxx/", "IData");
    private static final QName PORT_NAME = new QName(
            "http://xxx/", "IDataPort");
    IData port;

    public void initPort() {
        Service service = Service.create(SERVICE_NAME);
        // Endpoint Address
        String endpointAddress = ClientUtil.getUrl()
                + "data";

        // Add a port to the Service
        service.addPort(PORT_NAME, SOAPBinding.SOAP11HTTP_BINDING,
                endpointAddress);

        port = service.getPort(IData.class);
    }
Run Code Online (Sandbox Code Playgroud)

IData接口实现了GZip Annotation:

@WebService
@GZIP
public interface IData ....
Run Code Online (Sandbox Code Playgroud)

And*_*rte 17

解:

修改后,这就是您所需要的:

Client client = ClientProxy.getClient(port);
client.getInInterceptors().add(new GZIPInInterceptor());
client.getOutInterceptors().add(new GZIPOutInterceptor());
Run Code Online (Sandbox Code Playgroud)

之后它起作用了.

  • 对于JAX-RS RESTful客户端:`Client client = WebClient.client(port); ClientConfiguration config = WebClient.getConfig(client); config.getInInterceptors().add(new GZIPInInterceptor()); config.getOutInterceptors().add(new GZIPOutInterceptor());` (2认同)