2013-02-12 197 views
1

我想在我的Java CXF WS客戶端中設置/請求HTTP請求頭中的gZip,但由於某些原因它被IGNORED。我不回覆gzip的迴應。這是我如何設置。我正在使用Apache CXF 2.3.2。我錯過了什麼?Java CXF WS客戶端 - 忽略gZip HTTP請求頭被忽略

public class LoggerXML implements SOAPHandler<SOAPMessageContext> { 
    private String uniqueIdentifier; 
    private String sessionId; 

    public LoggerXML(String sessionId, String uniqueIdentifier) { 
     this.sessionId = sessionId; 
     this.uniqueIdentifier = uniqueIdentifier; 
    } 

    protected final void setLogStream(PrintStream ps) { 
     // out = ps; 
    } 

    public void init(Map c) { 
     uniqueIdentifier = ""; 
    } 

    public Set<QName> getHeaders() { 
     return null; 
    } 

    public boolean handleMessage(SOAPMessageContext smc) { 

     Boolean outboundProperty = (Boolean) 
     smc.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY); 
     if(outboundProperty){ 
      // Creating HTTP headers & setting gZip. 
      Map<String, List<String>> headers = (Map<String, 
             List<String>>) smc.get(MessageContext.HTTP_REQUEST_HEADERS); 
      if(headers == null){ 
       //System.out.println("LoggerXML.handleMessage: headers = null"); 
       headers = new HashMap<String, List<String>>(); 
      } 
      // Add HTTP headers to the web service request 
      headers.put("Accept-Encoding", Collections.singletonList("gzip,deflate")); 
      //headers.put("Content-Encoding", Collections.singletonList("gzip")); 
      //headers.put("Accept-Encoding", Collections.singletonList("gzip")); 

      smc.put(MessageContext.HTTP_REQUEST_HEADERS, headers); 
      //smc.put("org.apache.cxf.transport.common.gzip.GZIPOutInterceptor.UseGzip","YES"); 

     } 

     return true; 
    } 

    public boolean handleFault(SOAPMessageContext smc) { 
     return true; 
    } 

    // nothing to clean up 
    public void close(MessageContext messageContext) { 
    } 

    // nothing to clean up 
    public void destroy() { 
    } 

// Other Methods.... 

} 

回答

0

此代碼對我的作品

// Get the underlying Client object from the proxy object of service interface 
Client proxy = ClientProxy.getClient(stub); 

    // Creating HTTP headers 
Map<String, List<String>> headers = new HashMap<String, List<String>>(); 
headers.put("Accept-Encoding", Arrays.asList("gzip")); 

    // Add HTTP headers to the web service request 
proxy.getRequestContext().put(Message.PROTOCOL_HEADERS, headers); 

參見:http://singztechmusings.wordpress.com/2011/09/17/apache-cxf-how-to-add-custom-http-headers-to-a-web-service-request/