hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "William R. Speirs (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (HTTPCORE-270) IllegalStateException in AbstractSessionOutputBuffer
Date Tue, 23 Aug 2011 19:20:29 GMT

    [ 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: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


Mime
View raw message