[
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]