[ 
https://issues.apache.org/jira/browse/HTTPCORE-270?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13089679#comment-13089679
 ] 

William R. Speirs commented on HTTPCORE-270:
--------------------------------------------

I've attached a diff file which includes the original patch and a test file for 
SocketOutputBuffer.

I'm curious how I was able to force HttpCore to use chars other than the 
default. My client creation code is basically:

                final HttpParams params = new SyncBasicHttpParams();
                final SchemeRegistry registry = new SchemeRegistry();
                
                httpHost = new HttpHost(host);
                
                params.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, 
handleRedirects);
                
params.setBooleanParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, false);
                params.setParameter(ClientPNames.COOKIE_POLICY, 
CookiePolicy.IGNORE_COOKIES);
                
                registry.register(new Scheme("http", HTTP_PORT, 
PlainSocketFactory.getSocketFactory()));
                registry.register(new Scheme("https", HTTPS_PORT, 
SSLSocketFactory.getSocketFactory()));
                
                HttpConnectionParams.setSoTimeout(params, maxTimeout);
                HttpConnectionParams.setConnectionTimeout(params, maxTimeout);
                
                this.connManager = new ThreadSafeClientConnManager(registry);
                this.connManager.setMaxTotal(maxTotalConnections);
                this.connManager.setDefaultMaxPerRoute(maxTotalConnections);

                this.client = new DefaultHttpClient(this.connManager, params);

Then I use this client as you'd expect:
                final HttpResponse serviceResponse = client.execute(httpHost, 
request);

Any thoughts on how this might be getting set inside the HttpClient?

Thanks... 

> IllegalStateException in AbstractSessionOutputBuffer
> ----------------------------------------------------
>
>                 Key: HTTPCORE-270
>                 URL: https://issues.apache.org/jira/browse/HTTPCORE-270
>             Project: HttpComponents HttpCore
>          Issue Type: Bug
>          Components: HttpCore
>    Affects Versions: 4.2-alpha1
>            Reporter: William R. Speirs
>            Priority: Critical
>             Fix For: 4.2-alpha2
>
>         Attachments: SocketOutputBuffer.diff
>
>
> I am using httpclient-4.1.2 & httpcore-4.2-alpha1. In making an 
> DefaultHttpClient.execute() call I get the following exception:
>  java.lang.IllegalStateException: Current state = RESET, new state = FLUSHED
>       at 
> java.nio.charset.CharsetEncoder.throwIllegalStateException(CharsetEncoder.java:951)
>       at java.nio.charset.CharsetEncoder.flush(CharsetEncoder.java:640)
>       at 
> org.apache.http.impl.io.AbstractSessionOutputBuffer.writeEncoded(AbstractSessionOutputBuffer.java:264)
>       at 
> org.apache.http.impl.io.AbstractSessionOutputBuffer.writeLine(AbstractSessionOutputBuffer.java:247)
>       at 
> org.apache.http.impl.conn.LoggingSessionOutputBuffer.writeLine(LoggingSessionOutputBuffer.java:99)
>       at 
> org.apache.http.impl.io.AbstractMessageWriter.write(AbstractMessageWriter.java:97)
>       at 
> org.apache.http.impl.AbstractHttpClientConnection.sendRequestHeader(AbstractHttpClientConnection.java:253)
> On line 264 of AbstractSessionOutputBuffer.java, encoder.flush() is being 
> called. My thought (I have not completely debugged) is that in this instance, 
> cbuf.hasRemaining() is false, and therefor the following calls are being made:
> encoder.reset()
> encoder.flush()
> This is resulting in the above exception.
> I believe the following small patch will short-circuit the code, and fix the 
> issue.
> Thoughts?
> Index: 
> httpcore/src/main/java/org/apache/http/impl/io/AbstractSessionOutputBuffer.java
> ===================================================================
> --- 
> httpcore/src/main/java/org/apache/http/impl/io/AbstractSessionOutputBuffer.java
>      (revision 1160689)
> +++ 
> httpcore/src/main/java/org/apache/http/impl/io/AbstractSessionOutputBuffer.java
>      (working copy)
> @@ -256,6 +256,10 @@
>          if (this.bbuf == null) {
>              this.bbuf = ByteBuffer.allocate(1024);
>          }
> +       if(!cbuf.hasRemaining()) {
> +               return;
> +       }
> +
>          this.encoder.reset();
>          while (cbuf.hasRemaining()) {
>              CoderResult result = this.encoder.encode(cbuf, this.bbuf, true);

--
This message is automatically generated by JIRA.
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