2013-02-12 4 views
1

Java CXF WS 클라이언트의 HTTP 요청 헤더에서 gZip을 설정/요청하려고하지만 어떤 이유로 인해 무시됩니다. 나는 gZipped 응답을 얻지 않는다. 여기에 내가 설정하려고하는 방법입니다. Apache CXF 2.3.2를 사용하고 있습니다. 내가 뭘 놓치고 있니? 나를Java CXF WS 클라이언트 - gZip HTTP 요청 헤더가 무시됩니다.

// 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); 

참조하십시오

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.... 

} 

답변

관련 문제