[ 
https://issues.apache.org/jira/browse/HTTPCLIENT-1180?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Oleg Kalnichevski resolved HTTPCLIENT-1180.
-------------------------------------------

       Resolution: Fixed
    Fix Version/s: 4.2 Beta2

I fixed NPE in ClientGZipContentCompression in SVN trunk. Many thanks for 
reporting the problem.

Oleg
                
> NullPointerException when using HttpHead and Request/Response interceptors
> --------------------------------------------------------------------------
>
>                 Key: HTTPCLIENT-1180
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1180
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient
>    Affects Versions: 4.1.3
>         Environment: Operating System: Windows 7 64 bit, Software Platform : 
> JDK 1.7.0.2
>            Reporter: Peter Joole
>              Labels: nullpointerexception
>             Fix For: 4.2 Beta2
>
>
> When you try to execute a HttpHead object instead of a HttpGet object while 
> using the add request/response interceptors, you get a nullpointerexception.
> I can replicate the exception when using the ClientGZipContentCompression 
> example that can be found at the HttpClient examples. But instead of using 
> the HttpGet object I execute a HttpHead object. When I comment the 
> interceptor parts out, I don't get the exception. 
> This is the error stack trace I get when executing the code in netbeans:
> Exception in thread "main" java.lang.NullPointerException
>       at 
> testhttphead.ClientGZipContentCompression$2.process(ClientGZipContentCompression.java:74)
>       at 
> org.apache.http.protocol.ImmutableHttpProcessor.process(ImmutableHttpProcessor.java:116)
>       at 
> org.apache.http.protocol.HttpRequestExecutor.postProcess(HttpRequestExecutor.java:342)
>       at 
> org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:472)
>       at 
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
>       at 
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
>       at 
> org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
>       at 
> testhttphead.ClientGZipContentCompression.main(ClientGZipContentCompression.java:92)
> Java Result: 1
> Here is the code that gives me the error:
> package testhttphead;
> import java.io.IOException;
> import java.io.InputStream;
> import java.util.zip.GZIPInputStream;
> import org.apache.http.*;
> import org.apache.http.client.methods.HttpHead;
> import org.apache.http.entity.HttpEntityWrapper;
> import org.apache.http.impl.client.DefaultHttpClient;
> import org.apache.http.protocol.HttpContext;
> import org.apache.http.util.EntityUtils;
> /**
>  * Demonstration of the use of protocol interceptors to transparently modify
>  * properties of HTTP messages sent / received by the HTTP client.
>  * <p/>
>  * In this particular case HTTP client is made capable of transparent content
>  * GZIP compression by adding two protocol interceptors: a request interceptor
>  * that adds 'Accept-Encoding: gzip' header to all outgoing requests and a
>  * response interceptor that automatically expands compressed response 
> entities
>  * by wrapping them with a uncompressing decorator class. The use of protocol
>  * interceptors makes content compression completely transparent to the 
> consumer
>  * of the {@link org.apache.http.client.HttpClient HttpClient} interface.
>  */
> public class ClientGZipContentCompression {
>     public final static void main(String[] args) throws Exception {
>         DefaultHttpClient httpclient = new DefaultHttpClient();
>         try {
>             httpclient.addRequestInterceptor(new HttpRequestInterceptor() {
>                 public void process(
>                         final HttpRequest request,
>                         final HttpContext context) throws HttpException, 
> IOException {
>                     if (!request.containsHeader("Accept-Encoding")) {
>                         request.addHeader("Accept-Encoding", "gzip");
>                     }
>                 }
>             });
>             httpclient.addResponseInterceptor(new HttpResponseInterceptor() {
>                 public void process(
>                         final HttpResponse response,
>                         final HttpContext context) throws HttpException, 
> IOException {
>                     HttpEntity entity = response.getEntity();
>                     Header ceheader = entity.getContentEncoding();
>                     if (ceheader != null) {
>                         HeaderElement[] codecs = ceheader.getElements();
>                         for (int i = 0; i < codecs.length; i++) {
>                             if (codecs[i].getName().equalsIgnoreCase("gzip")) 
> {
>                                 response.setEntity(
>                                         new 
> GzipDecompressingEntity(response.getEntity()));
>                                 return;
>                             }
>                         }
>                     }
>                 }
>             });
>             HttpHead httpHead = new HttpHead("http://www.howest.be";);
>             // Execute HTTP request
>             System.out.println("executing request " + httpHead.getURI());
>             HttpResponse response = httpclient.execute(httpHead);
>             System.out.println("----------------------------------------");
>             System.out.println(response.getStatusLine());
>             System.out.println(response.getLastHeader("Content-Encoding"));
>             System.out.println(response.getLastHeader("Content-Length"));
>             System.out.println("----------------------------------------");
>             HttpEntity entity = response.getEntity();
>             if (entity != null) {
>                 String content = EntityUtils.toString(entity);
>                 System.out.println(content);
>                 
> System.out.println("----------------------------------------");
>                 System.out.println("Uncompressed size: " + content.length());
>             }
>         } finally {
>             // When HttpClient instance is no longer needed,
>             // shut down the connection manager to ensure
>             // immediate deallocation of all system resources
>             httpclient.getConnectionManager().shutdown();
>         }
>     }
>     static class GzipDecompressingEntity extends HttpEntityWrapper {
>         public GzipDecompressingEntity(final HttpEntity entity) {
>             super(entity);
>         }
>         @Override
>         public InputStream getContent()
>                 throws IOException, IllegalStateException {
>             // the wrapped entity's getContent() decides about repeatability
>             InputStream wrappedin = wrappedEntity.getContent();
>             return new GZIPInputStream(wrappedin);
>         }
>         @Override
>         public long getContentLength() {
>             // length of ungzipped content is not known
>             return -1;
>         }
>     }
> }
> With kind regards,
> Peter

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to