Deprecated DefaultResponseParser in favor of DefaultHttpResponseParser
git-svn-id: https://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk@1334646 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
parent
bfe3b7201f
commit
aa412a29b9
|
@ -26,7 +26,7 @@
|
|||
|
||||
package org.apache.http.conn.params;
|
||||
|
||||
import org.apache.http.impl.conn.DefaultResponseParser;
|
||||
import org.apache.http.impl.conn.DefaultHttpResponseParser;
|
||||
|
||||
/**
|
||||
* Parameter names for HTTP client connections.
|
||||
|
@ -53,7 +53,7 @@ public interface ConnConnectionPNames {
|
|||
* Use {@link java.lang.Integer#MAX_VALUE} for unlimited number.
|
||||
* </p>
|
||||
*
|
||||
* @deprecated Use custom {@link DefaultResponseParser} implementation
|
||||
* @deprecated Use custom {@link DefaultHttpResponseParser} implementation
|
||||
*/
|
||||
public static final String MAX_STATUS_LINE_GARBAGE = "http.connection.max-status-line-garbage";
|
||||
|
||||
|
|
|
@ -221,7 +221,7 @@ public class DefaultClientConnection extends SocketHttpClientConnection
|
|||
final HttpResponseFactory responseFactory,
|
||||
final HttpParams params) {
|
||||
// override in derived class to specify a line parser
|
||||
return new DefaultResponseParser
|
||||
return new DefaultHttpResponseParser
|
||||
(buffer, null, responseFactory, params);
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,120 @@
|
|||
/*
|
||||
* ====================================================================
|
||||
* Licensed to the Apache Software Foundation (ASF) under one
|
||||
* or more contributor license agreements. See the NOTICE file
|
||||
* distributed with this work for additional information
|
||||
* regarding copyright ownership. The ASF licenses this file
|
||||
* to you under the Apache License, Version 2.0 (the
|
||||
* "License"); you may not use this file except in compliance
|
||||
* with the License. You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing,
|
||||
* software distributed under the License is distributed on an
|
||||
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
|
||||
* KIND, either express or implied. See the License for the
|
||||
* specific language governing permissions and limitations
|
||||
* under the License.
|
||||
* ====================================================================
|
||||
*
|
||||
* This software consists of voluntary contributions made by many
|
||||
* individuals on behalf of the Apache Software Foundation. For more
|
||||
* information on the Apache Software Foundation, please see
|
||||
* <http://www.apache.org/>.
|
||||
*
|
||||
*/
|
||||
|
||||
package org.apache.http.impl.conn;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import org.apache.http.annotation.ThreadSafe;
|
||||
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.http.HttpException;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.HttpResponseFactory;
|
||||
import org.apache.http.NoHttpResponseException;
|
||||
import org.apache.http.ProtocolException;
|
||||
import org.apache.http.StatusLine;
|
||||
import org.apache.http.impl.io.AbstractMessageParser;
|
||||
import org.apache.http.io.SessionInputBuffer;
|
||||
import org.apache.http.message.LineParser;
|
||||
import org.apache.http.message.ParserCursor;
|
||||
import org.apache.http.params.HttpParams;
|
||||
import org.apache.http.util.CharArrayBuffer;
|
||||
|
||||
/**
|
||||
* Default HTTP response parser implementation.
|
||||
* <p>
|
||||
* The following parameters can be used to customize the behavior of this
|
||||
* class:
|
||||
* <ul>
|
||||
* <li>{@link org.apache.http.params.CoreConnectionPNames#MAX_HEADER_COUNT}</li>
|
||||
* <li>{@link org.apache.http.params.CoreConnectionPNames#MAX_LINE_LENGTH}</li>
|
||||
* </ul>
|
||||
*
|
||||
* @since 4.2
|
||||
*/
|
||||
@ThreadSafe // no public methods
|
||||
public class DefaultHttpResponseParser extends AbstractMessageParser<HttpResponse> {
|
||||
|
||||
private final Log log = LogFactory.getLog(getClass());
|
||||
|
||||
private final HttpResponseFactory responseFactory;
|
||||
private final CharArrayBuffer lineBuf;
|
||||
|
||||
public DefaultHttpResponseParser(
|
||||
final SessionInputBuffer buffer,
|
||||
final LineParser parser,
|
||||
final HttpResponseFactory responseFactory,
|
||||
final HttpParams params) {
|
||||
super(buffer, parser, params);
|
||||
if (responseFactory == null) {
|
||||
throw new IllegalArgumentException
|
||||
("Response factory may not be null");
|
||||
}
|
||||
this.responseFactory = responseFactory;
|
||||
this.lineBuf = new CharArrayBuffer(128);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected HttpResponse parseHead(
|
||||
final SessionInputBuffer sessionBuffer) throws IOException, HttpException {
|
||||
//read out the HTTP status string
|
||||
int count = 0;
|
||||
ParserCursor cursor = null;
|
||||
do {
|
||||
// clear the buffer
|
||||
this.lineBuf.clear();
|
||||
int i = sessionBuffer.readLine(this.lineBuf);
|
||||
if (i == -1 && count == 0) {
|
||||
// The server just dropped connection on us
|
||||
throw new NoHttpResponseException("The target server failed to respond");
|
||||
}
|
||||
cursor = new ParserCursor(0, this.lineBuf.length());
|
||||
if (lineParser.hasProtocolVersion(this.lineBuf, cursor)) {
|
||||
// Got one
|
||||
break;
|
||||
} else if (i == -1 || reject(this.lineBuf, count)) {
|
||||
// Giving up
|
||||
throw new ProtocolException("The server failed to respond with a " +
|
||||
"valid HTTP response");
|
||||
}
|
||||
if (this.log.isDebugEnabled()) {
|
||||
this.log.debug("Garbage in response: " + this.lineBuf.toString());
|
||||
}
|
||||
count++;
|
||||
} while(true);
|
||||
//create the status line from the status string
|
||||
StatusLine statusline = lineParser.parseStatusLine(this.lineBuf, cursor);
|
||||
return this.responseFactory.newHttpResponse(statusline, null);
|
||||
}
|
||||
|
||||
protected boolean reject(CharArrayBuffer line, int count) {
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
|
@ -34,7 +34,7 @@ import org.apache.http.annotation.ThreadSafe;
|
|||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
import org.apache.http.HttpException;
|
||||
import org.apache.http.HttpResponse;
|
||||
import org.apache.http.HttpMessage;
|
||||
import org.apache.http.HttpResponseFactory;
|
||||
import org.apache.http.NoHttpResponseException;
|
||||
import org.apache.http.ProtocolException;
|
||||
|
@ -58,9 +58,11 @@ import org.apache.http.util.CharArrayBuffer;
|
|||
* </ul>
|
||||
*
|
||||
* @since 4.0
|
||||
*
|
||||
* @deprecated (4.2) use {@link DefaultHttpResponseParser}
|
||||
*/
|
||||
@ThreadSafe // no public methods
|
||||
public class DefaultResponseParser extends AbstractMessageParser<HttpResponse> {
|
||||
public class DefaultResponseParser extends AbstractMessageParser<HttpMessage> {
|
||||
|
||||
private final Log log = LogFactory.getLog(getClass());
|
||||
|
||||
|
@ -83,10 +85,6 @@ public class DefaultResponseParser extends AbstractMessageParser<HttpResponse> {
|
|||
this.maxGarbageLines = getMaxGarbageLines(params);
|
||||
}
|
||||
|
||||
/**
|
||||
* @since 4.2
|
||||
*/
|
||||
@SuppressWarnings("deprecation")
|
||||
protected int getMaxGarbageLines(final HttpParams params) {
|
||||
return params.getIntParameter(
|
||||
org.apache.http.conn.params.ConnConnectionPNames.MAX_STATUS_LINE_GARBAGE,
|
||||
|
@ -94,7 +92,7 @@ public class DefaultResponseParser extends AbstractMessageParser<HttpResponse> {
|
|||
}
|
||||
|
||||
@Override
|
||||
protected HttpResponse parseHead(
|
||||
protected HttpMessage parseHead(
|
||||
final SessionInputBuffer sessionBuffer) throws IOException, HttpException {
|
||||
//read out the HTTP status string
|
||||
int count = 0;
|
||||
|
|
|
@ -39,13 +39,14 @@ import org.apache.http.message.BasicLineParser;
|
|||
import org.apache.http.mockup.SessionInputBufferMockup;
|
||||
import org.apache.http.params.BasicHttpParams;
|
||||
import org.apache.http.params.HttpParams;
|
||||
import org.apache.http.util.CharArrayBuffer;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Test;
|
||||
|
||||
/**
|
||||
* Tests for <code>DefaultResponseParser</code>.
|
||||
*/
|
||||
public class TestDefaultResponseParser {
|
||||
public class TestDefaultHttpResponseParser {
|
||||
|
||||
@Test
|
||||
public void testResponseParsingWithSomeGarbage() throws Exception {
|
||||
|
@ -60,7 +61,7 @@ public class TestDefaultResponseParser {
|
|||
|
||||
HttpParams params = new BasicHttpParams();
|
||||
SessionInputBuffer inbuffer = new SessionInputBufferMockup(s, "US-ASCII", params);
|
||||
HttpMessageParser<HttpResponse> parser = new DefaultResponseParser(
|
||||
HttpMessageParser<HttpResponse> parser = new DefaultHttpResponseParser(
|
||||
inbuffer,
|
||||
BasicLineParser.DEFAULT,
|
||||
new DefaultHttpResponseFactory(),
|
||||
|
@ -91,15 +92,15 @@ public class TestDefaultResponseParser {
|
|||
|
||||
HttpParams params = new BasicHttpParams();
|
||||
SessionInputBuffer inbuffer = new SessionInputBufferMockup(s, "US-ASCII", params);
|
||||
HttpMessageParser<HttpResponse> parser = new DefaultResponseParser(
|
||||
HttpMessageParser<HttpResponse> parser = new DefaultHttpResponseParser(
|
||||
inbuffer,
|
||||
BasicLineParser.DEFAULT,
|
||||
new DefaultHttpResponseFactory(),
|
||||
params) {
|
||||
|
||||
@Override
|
||||
protected int getMaxGarbageLines(HttpParams params) {
|
||||
return 2;
|
||||
protected boolean reject(final CharArrayBuffer line, int count) {
|
||||
return count >= 2;
|
||||
}
|
||||
|
||||
};
|
||||
|
@ -110,7 +111,7 @@ public class TestDefaultResponseParser {
|
|||
public void testResponseParsingNoResponse() throws Exception {
|
||||
HttpParams params = new BasicHttpParams();
|
||||
SessionInputBuffer inbuffer = new SessionInputBufferMockup("", "US-ASCII", params);
|
||||
HttpMessageParser<HttpResponse> parser = new DefaultResponseParser(
|
||||
HttpMessageParser<HttpResponse> parser = new DefaultHttpResponseParser(
|
||||
inbuffer,
|
||||
BasicLineParser.DEFAULT,
|
||||
new DefaultHttpResponseFactory(),
|
||||
|
@ -127,7 +128,7 @@ public class TestDefaultResponseParser {
|
|||
"a lot more garbage\r\n";
|
||||
HttpParams params = new BasicHttpParams();
|
||||
SessionInputBuffer inbuffer = new SessionInputBufferMockup(s, "US-ASCII", params);
|
||||
HttpMessageParser<HttpResponse> parser = new DefaultResponseParser(
|
||||
HttpMessageParser<HttpResponse> parser = new DefaultHttpResponseParser(
|
||||
inbuffer,
|
||||
BasicLineParser.DEFAULT,
|
||||
new DefaultHttpResponseFactory(),
|
Loading…
Reference in New Issue