You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2016/04/06 09:21:14 UTC

svn commit: r1737929 [2/2] - in /httpcomponents/httpcore/trunk: httpcore5-ab/src/main/java/org/apache/hc/core5/http/benchmark/ httpcore5-h2/src/main/java/org/apache/hc/core5/http2/ httpcore5-h2/src/main/java/org/apache/hc/core5/http2/hpack/ httpcore5-h...

Added: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseParser.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseParser.java?rev=1737929&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseParser.java (added)
+++ httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseParser.java Wed Apr  6 07:21:14 2016
@@ -0,0 +1,183 @@
+/*
+ * ====================================================================
+ * 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.hc.core5.http2.impl.io;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
+
+import org.apache.hc.core5.http.Header;
+import org.apache.hc.core5.http.HttpException;
+import org.apache.hc.core5.http.HttpResponse;
+import org.apache.hc.core5.http.message.BasicHeader;
+import org.apache.hc.core5.http2.hpack.HPackEncoder;
+import org.apache.hc.core5.util.ByteArrayBuffer;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class TestHttp2ResponseParser {
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
+    @Test
+    public void testBasicParse() throws Exception {
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+        final HPackEncoder encoder = new HPackEncoder(StandardCharsets.US_ASCII);
+        encoder.encodeHeaders(buf, Arrays.<Header>asList(
+                new BasicHeader(":status", "200"),
+                new BasicHeader("location", "http://www.example.com/"),
+                new BasicHeader("custom123", "value")));
+        final ByteBuffer src = ByteBuffer.wrap(buf.buffer(), 0, buf.length());
+
+        final Http2ResponseParser parser = new Http2ResponseParser(StandardCharsets.US_ASCII);
+        final HttpResponse response = parser.parse(src);
+        Assert.assertNotNull(response );
+        Assert.assertEquals(200, response .getCode());
+        final Header[] allHeaders = response.getAllHeaders();
+        Assert.assertEquals(2, allHeaders.length);
+        Assert.assertEquals("location", allHeaders[0].getName());
+        Assert.assertEquals("http://www.example.com/", allHeaders[0].getValue());
+        Assert.assertEquals("custom123", allHeaders[1].getName());
+        Assert.assertEquals("value", allHeaders[1].getValue());
+    }
+
+    @Test
+    public void testParseUpperCaseHeaderName() throws Exception {
+
+        thrown.expect(HttpException.class);
+        thrown.expectMessage("Header name ':Status' is invalid (header name contains uppercase characters)");
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+        final HPackEncoder encoder = new HPackEncoder(StandardCharsets.US_ASCII);
+        encoder.encodeHeaders(buf, Arrays.<Header>asList(
+                new BasicHeader(":Status", "200"),
+                new BasicHeader("location", "http://www.example.com/"),
+                new BasicHeader("custom123", "value")));
+        final ByteBuffer src = ByteBuffer.wrap(buf.buffer(), 0, buf.length());
+
+        final Http2ResponseParser parser = new Http2ResponseParser(StandardCharsets.US_ASCII);
+        parser.parse(src);
+    }
+
+    @Test
+    public void testParseInvalidStatusCode() throws Exception {
+
+        thrown.expect(HttpException.class);
+        thrown.expectMessage("Invalid response status: boom");
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+        final HPackEncoder encoder = new HPackEncoder(StandardCharsets.US_ASCII);
+        encoder.encodeHeaders(buf, Arrays.<Header>asList(
+                new BasicHeader(":status", "boom"),
+                new BasicHeader("location", "http://www.example.com/"),
+                new BasicHeader("custom123", "value")));
+        final ByteBuffer src = ByteBuffer.wrap(buf.buffer(), 0, buf.length());
+
+        final Http2ResponseParser parser = new Http2ResponseParser(StandardCharsets.US_ASCII);
+        parser.parse(src);
+    }
+
+    @Test
+    public void testParseConnectionHeader() throws Exception {
+
+        thrown.expect(HttpException.class);
+        thrown.expectMessage("Header 'connection: keep-alive' is illegal for HTTP/2 messages");
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+        final HPackEncoder encoder = new HPackEncoder(StandardCharsets.US_ASCII);
+        encoder.encodeHeaders(buf, Arrays.<Header>asList(
+                new BasicHeader(":status", "200"),
+                new BasicHeader("location", "http://www.example.com/"),
+                new BasicHeader("connection", "keep-alive")));
+        final ByteBuffer src = ByteBuffer.wrap(buf.buffer(), 0, buf.length());
+
+        final Http2ResponseParser parser = new Http2ResponseParser(StandardCharsets.US_ASCII);
+        parser.parse(src);
+    }
+
+    @Test
+    public void testParseMissingStatus() throws Exception {
+
+        thrown.expect(HttpException.class);
+        thrown.expectMessage("Mandatory response header ':status' not found");
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+        final HPackEncoder encoder = new HPackEncoder(StandardCharsets.US_ASCII);
+        encoder.encodeHeaders(buf, Arrays.<Header>asList(
+                new BasicHeader("location", "http://www.example.com/"),
+                new BasicHeader("custom", "value")));
+        final ByteBuffer src = ByteBuffer.wrap(buf.buffer(), 0, buf.length());
+
+        final Http2ResponseParser parser = new Http2ResponseParser(StandardCharsets.US_ASCII);
+        parser.parse(src);
+    }
+
+    @Test
+    public void testParseUnknownPseudoHeader() throws Exception {
+
+        thrown.expect(HttpException.class);
+        thrown.expectMessage("Unsupported response header ':custom'");
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+        final HPackEncoder encoder = new HPackEncoder(StandardCharsets.US_ASCII);
+        encoder.encodeHeaders(buf, Arrays.<Header>asList(
+                new BasicHeader(":status", "200"),
+                new BasicHeader(":custom", "200"),
+                new BasicHeader("location", "http://www.example.com/"),
+                new BasicHeader("custom1", "value")));
+        final ByteBuffer src = ByteBuffer.wrap(buf.buffer(), 0, buf.length());
+
+        final Http2ResponseParser parser = new Http2ResponseParser(StandardCharsets.US_ASCII);
+        parser.parse(src);
+    }
+
+    @Test
+    public void testParseMultipleStatus() throws Exception {
+
+        thrown.expect(HttpException.class);
+        thrown.expectMessage("Multiple ':status' response headers are illegal");
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+        final HPackEncoder encoder = new HPackEncoder(StandardCharsets.US_ASCII);
+        encoder.encodeHeaders(buf, Arrays.<Header>asList(
+                new BasicHeader(":status", "200"),
+                new BasicHeader(":status", "200"),
+                new BasicHeader("location", "http://www.example.com/"),
+                new BasicHeader("custom1", "value")));
+        final ByteBuffer src = ByteBuffer.wrap(buf.buffer(), 0, buf.length());
+
+        final Http2ResponseParser parser = new Http2ResponseParser(StandardCharsets.US_ASCII);
+        parser.parse(src);
+    }
+
+}
+

Propchange: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseParser.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseParser.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseParser.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Added: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseWriter.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseWriter.java?rev=1737929&view=auto
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseWriter.java (added)
+++ httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseWriter.java Wed Apr  6 07:21:14 2016
@@ -0,0 +1,121 @@
+/*
+ * ====================================================================
+ * 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.hc.core5.http2.impl.io;
+
+import java.nio.ByteBuffer;
+import java.nio.charset.StandardCharsets;
+import java.util.List;
+
+import org.apache.hc.core5.http.Header;
+import org.apache.hc.core5.http.HttpException;
+import org.apache.hc.core5.http.HttpResponse;
+import org.apache.hc.core5.http.message.BasicHttpResponse;
+import org.apache.hc.core5.http2.hpack.HPackDecoder;
+import org.apache.hc.core5.util.ByteArrayBuffer;
+import org.junit.Assert;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.rules.ExpectedException;
+
+public class TestHttp2ResponseWriter {
+
+    @Rule
+    public ExpectedException thrown = ExpectedException.none();
+
+    @Test
+    public void testBasicWrite() throws Exception {
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+
+        final HttpResponse response = new BasicHttpResponse(200);
+        response.addHeader("Custom123", "Value");
+
+        final Http2ResponseWriter writer = new Http2ResponseWriter(StandardCharsets.US_ASCII);
+        writer.write(response, buf);
+
+        final ByteBuffer src = ByteBuffer.wrap(buf.buffer(), 0, buf.length());
+        final HPackDecoder decoder = new HPackDecoder(StandardCharsets.US_ASCII);
+        final List<Header> headers = decoder.decodeHeaders(src);
+
+        Assert.assertNotNull(headers);
+        Assert.assertEquals(2, headers.size());
+        final Header header1 = headers.get(0);
+        Assert.assertEquals(":status", header1.getName());
+        Assert.assertEquals("200", header1.getValue());
+        final Header header2 = headers.get(1);
+        Assert.assertEquals("custom123", header2.getName());
+        Assert.assertEquals("Value", header2.getValue());
+    }
+
+    @Test
+    public void testWriteInvalidStatus() throws Exception {
+
+        thrown.expect(HttpException.class);
+        thrown.expectMessage("Response status 99 is invalid");
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+
+        final HttpResponse response = new BasicHttpResponse(99);
+        response.addHeader("Custom123", "Value");
+
+        final Http2ResponseWriter writer = new Http2ResponseWriter(StandardCharsets.US_ASCII);
+        writer.write(response, buf);
+    }
+
+    @Test
+    public void testWriteConnectionHeader() throws Exception {
+
+        thrown.expect(HttpException.class);
+        thrown.expectMessage("Header 'Connection: Keep-Alive' is illegal for HTTP/2 messages");
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+
+        final HttpResponse response = new BasicHttpResponse(200);
+        response.addHeader("Connection", "Keep-Alive");
+
+        final Http2ResponseWriter writer = new Http2ResponseWriter(StandardCharsets.US_ASCII);
+        writer.write(response, buf);
+    }
+
+    @Test
+    public void testWriteInvalidHeader() throws Exception {
+
+        thrown.expect(HttpException.class);
+        thrown.expectMessage("Header name ':custom' is invalid");
+
+        final ByteArrayBuffer buf = new ByteArrayBuffer(128);
+
+        final HttpResponse response = new BasicHttpResponse(200);
+        response.addHeader(":custom", "stuff");
+
+        final Http2ResponseWriter writer = new Http2ResponseWriter(StandardCharsets.US_ASCII);
+        writer.write(response, buf);
+    }
+
+}
+

Propchange: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseWriter.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseWriter.java
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpcore/trunk/httpcore5-h2/src/test/java/org/apache/hc/core5/http2/impl/io/TestHttp2ResponseWriter.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/HttpRequest.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/HttpRequest.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/HttpRequest.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/HttpRequest.java Wed Apr  6 07:21:14 2016
@@ -37,33 +37,56 @@ package org.apache.hc.core5.http;
 public interface HttpRequest extends HttpMessage<HttpEntity> {
 
     /**
-     * Obtains the method of this request message.
+     * Returns method of this request message.
      *
      * @return  the request method.
      */
     String getMethod();
 
     /**
-     * Obtains the URI of this request message.
+     * Returns URI path of this request message or {@code null} if not set.
      *
-     * @return  the request URI.
+     * @return  the request URI or {@code null}.
      */
-    String getUri();
+    String getPath();
 
     /**
-     * Obtains target host of this request message if available.
+     * Sets URI path of this request message.
      *
-     * @return  the target host or {@code null}.
+     * @since 5.0
+     */
+    void setPath(String path);
+
+    /**
+     * Returns scheme of this request message.
+     *
+     * @return  the scheme or {@code null}.
+     *
+     * @since 5.0
+     */
+    String getScheme();
+
+    /**
+     * Sets scheme of this request message.
+     *
+     * @since 5.0
+     */
+    void setScheme(String scheme);
+
+    /**
+     * Returns authority of this request message.
+     *
+     * @return  the authority or {@code null}.
      *
      * @since 5.0
      */
-    HttpHost getHost();
+    String getAuthority();
 
     /**
-     * Sets target host of this request message.
+     * Sets authority of this request message.
      *
      * @since 5.0
      */
-    void setHost(HttpHost host);
+    void setAuthority(String authority);
 
 }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/MessageHead.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/MessageHead.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/MessageHead.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/MessageHead.java Wed Apr  6 07:21:14 2016
@@ -64,6 +64,17 @@ public interface MessageHead {
     Header[] getHeaders(String name);
 
     /**
+     * Gets single first header with the given name.
+     *
+     * <p>Header name comparison is case insensitive.
+     *
+     * @param name the name of the header to get
+     * @return the first header or {@code null}
+     * @throws ProtocolException in case multiple headers with the given name are found.
+     */
+    Header getSingleHeader(String name) throws ProtocolException;
+
+    /**
      * Returns the first header with a specified name of this message. Header
      * values are ignored. If there is more than one matching header in the
      * message the first element of {@link #getHeaders(String)} is returned.

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/DefaultHttpRequestWriter.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/DefaultHttpRequestWriter.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/DefaultHttpRequestWriter.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/io/DefaultHttpRequestWriter.java Wed Apr  6 07:21:14 2016
@@ -69,7 +69,7 @@ public class DefaultHttpRequestWriter ex
             transportVersion = HttpVersion.HTTP_1_1;
         }
         getLineFormatter().formatRequestLine(lineBuf,
-                new RequestLine(message.getMethod(), message.getUri(), transportVersion));
+                new RequestLine(message.getMethod(), message.getPath(), transportVersion));
     }
 
 }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/DefaultHttpRequestWriter.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/DefaultHttpRequestWriter.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/DefaultHttpRequestWriter.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/DefaultHttpRequestWriter.java Wed Apr  6 07:21:14 2016
@@ -73,7 +73,7 @@ public class DefaultHttpRequestWriter ex
             transportVersion = HttpVersion.HTTP_1_1;
         }
         getLineFormatter().formatRequestLine(lineBuf,
-                new RequestLine(message.getMethod(), message.getUri(), transportVersion));
+                new RequestLine(message.getMethod(), message.getPath(), transportVersion));
     }
 
 }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpAsyncRequestExecutor.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpAsyncRequestExecutor.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpAsyncRequestExecutor.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpAsyncRequestExecutor.java Wed Apr  6 07:21:14 2016
@@ -622,7 +622,7 @@ public class HttpAsyncRequestExecutor im
                 buf.append(" ");
                 buf.append(this.request.getMethod());
                 buf.append(" ");
-                buf.append(this.request.getUri());
+                buf.append(this.request.getPath());
             }
             buf.append("; incoming ");
             buf.append(this.responseState);

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpAsyncService.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpAsyncService.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpAsyncService.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/HttpAsyncService.java Wed Apr  6 07:21:14 2016
@@ -892,7 +892,7 @@ public class HttpAsyncService implements
                 buf.append(" ");
                 buf.append(this.incoming.getRequest().getMethod());
                 buf.append(" ");
-                buf.append(this.incoming.getRequest().getUri());
+                buf.append(this.incoming.getRequest().getPath());
             }
             buf.append("; outgoing ");
             buf.append(this.responseState);

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/UriHttpAsyncRequestHandlerMapper.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/UriHttpAsyncRequestHandlerMapper.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/UriHttpAsyncRequestHandlerMapper.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/impl/nio/UriHttpAsyncRequestHandlerMapper.java Wed Apr  6 07:21:14 2016
@@ -89,7 +89,7 @@ public class UriHttpAsyncRequestHandlerM
      * Extracts request path from the given {@link HttpRequest}
      */
     protected String getRequestPath(final HttpRequest request) {
-        String uriPath = request.getUri();
+        String uriPath = request.getPath();
         int index = uriPath.indexOf("?");
         if (index != -1) {
             uriPath = uriPath.substring(0, index);

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageParser.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageParser.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageParser.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageParser.java Wed Apr  6 07:21:14 2016
@@ -31,24 +31,24 @@ import java.io.IOException;
 import java.io.InputStream;
 
 import org.apache.hc.core5.http.HttpException;
-import org.apache.hc.core5.http.HttpMessage;
+import org.apache.hc.core5.http.MessageHead;
 
 /**
- * Abstract message parser intended to build HTTP messages from an arbitrary data source.
+ * Message parser intended to build HTTP message head from an input stream..
  *
  * @param <T>
- *            {@link HttpMessage} or a subclass
+ *            {@link MessageHead} or a subclass
  *
  * @since 4.0
  */
-public interface HttpMessageParser<T extends HttpMessage> {
+public interface HttpMessageParser<T extends MessageHead> {
 
     /**
-     * Generates an instance of {@link HttpMessage} from an input buffer.
+     * Generates an instance of {@link MessageHead} from the given input stream..
      *
      * @param buffer Session input buffer
      * @param inputStream Input stream
-     * @return HTTP message
+     * @return HTTP message head
      * @throws IOException in case of an I/O error
      * @throws HttpException in case of HTTP protocol violation
      */

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageParserFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageParserFactory.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageParserFactory.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageParserFactory.java Wed Apr  6 07:21:14 2016
@@ -27,7 +27,7 @@
 
 package org.apache.hc.core5.http.io;
 
-import org.apache.hc.core5.http.HttpMessage;
+import org.apache.hc.core5.http.MessageHead;
 import org.apache.hc.core5.http.config.MessageConstraints;
 
 /**
@@ -35,7 +35,7 @@ import org.apache.hc.core5.http.config.M
  *
  * @since 4.3
  */
-public interface HttpMessageParserFactory<T extends HttpMessage> {
+public interface HttpMessageParserFactory<T extends MessageHead> {
 
     HttpMessageParser<T> create(MessageConstraints constraints);
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageWriter.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageWriter.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageWriter.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageWriter.java Wed Apr  6 07:21:14 2016
@@ -31,20 +31,19 @@ import java.io.IOException;
 import java.io.OutputStream;
 
 import org.apache.hc.core5.http.HttpException;
-import org.apache.hc.core5.http.HttpMessage;
+import org.apache.hc.core5.http.MessageHead;
 
 /**
- * Abstract message writer intended to serialize HTTP messages to an arbitrary
- * data sink.
+ * Message writer intended to serialize HTTP message head to an output stream.
  *
  * @since 4.0
  */
-public interface HttpMessageWriter<T extends HttpMessage> {
+public interface HttpMessageWriter<T extends MessageHead> {
 
     /**
-     * Serializes an instance of {@link HttpMessage} to an output buffer.
+     * Serializes an instance of {@link MessageHead} to the given output stream.
      *
-     * @param message HTTP message
+     * @param message HTTP message head
      * @param buffer session output buffer
      * @throws IOException in case of an I/O error
      * @throws HttpException in case of HTTP protocol violation

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageWriterFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageWriterFactory.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageWriterFactory.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/HttpMessageWriterFactory.java Wed Apr  6 07:21:14 2016
@@ -27,14 +27,14 @@
 
 package org.apache.hc.core5.http.io;
 
-import org.apache.hc.core5.http.HttpMessage;
+import org.apache.hc.core5.http.MessageHead;
 
 /**
  * Factory for {@link HttpMessageWriter} instances.
  *
  * @since 4.3
  */
-public interface HttpMessageWriterFactory<T extends HttpMessage> {
+public interface HttpMessageWriterFactory<T extends MessageHead> {
 
     HttpMessageWriter<T> create();
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/UriHttpRequestHandlerMapper.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/UriHttpRequestHandlerMapper.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/UriHttpRequestHandlerMapper.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/io/UriHttpRequestHandlerMapper.java Wed Apr  6 07:21:14 2016
@@ -90,7 +90,7 @@ public class UriHttpRequestHandlerMapper
      * Extracts request path from the given {@link HttpRequest}
      */
     protected String getRequestPath(final HttpRequest request) {
-        String uriPath = request.getUri();
+        String uriPath = request.getPath();
         int index = uriPath.indexOf("?");
         if (index != -1) {
             uriPath = uriPath.substring(0, index);

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/message/BasicHttpRequest.java Wed Apr  6 07:21:14 2016
@@ -47,34 +47,36 @@ public class BasicHttpRequest extends Ab
     private static final long serialVersionUID = 1L;
 
     private final String method;
-    private HttpHost host;
-    private String requestUri;
+    private String path;
+    private String scheme;
+    private String authority;
     private ProtocolVersion version;
 
     /**
-     * Creates request message with the given method and request URI.
+     * Creates request message with the given method and request path.
      *
      * @param method request method.
-     * @param requestUri request URI.
+     * @param path request path.
      */
-    public BasicHttpRequest(final String method, final String requestUri) {
-        this(method, null, requestUri);
+    public BasicHttpRequest(final String method, final String path) {
+        this(method, null, path);
     }
 
     /**
-     * Creates request message with the given method, host and request URI.
+     * Creates request message with the given method, host and request path.
      *
      * @param method request method.
      * @param host request host.
-     * @param requestUri request URI.
+     * @param path request path.
      *
      * @since 5.0
      */
-    public BasicHttpRequest(final String method, final HttpHost host, final String requestUri) {
+    public BasicHttpRequest(final String method, final HttpHost host, final String path) {
         super();
         this.method = Args.notNull(method, "Method name");
-        this.host = host;
-        this.requestUri = Args.notNull(requestUri, "Request URI");
+        this.scheme = host != null ? host.getSchemeName() : null;
+        this.authority = host != null ? host.toHostString() : null;
+        this.path = path;
     }
 
     /**
@@ -89,11 +91,8 @@ public class BasicHttpRequest extends Ab
         super();
         this.method = Args.notNull(method, "Method name");
         Args.notNull(requestUri, "Request URI");
-        if (requestUri.isAbsolute()) {
-            this.host = new HttpHost(requestUri.getHost(), requestUri.getPort(), requestUri.getScheme());
-        } else {
-            this.host = null;
-        }
+        this.scheme = requestUri.getScheme();
+        this.authority = requestUri.getAuthority();
         final StringBuilder buf = new StringBuilder();
         final String path = requestUri.getRawPath();
         if (!TextUtils.isBlank(path)) {
@@ -105,7 +104,7 @@ public class BasicHttpRequest extends Ab
         if (query != null) {
             buf.append('?').append(query);
         }
-        this.requestUri = buf.toString();
+        this.path = buf.toString();
     }
 
     @Override
@@ -123,31 +122,40 @@ public class BasicHttpRequest extends Ab
         return this.method;
     }
 
-    /**
-     * @since 5.0
-     */
     @Override
-    public HttpHost getHost() {
-        return this.host;
+    public String getPath() {
+        return this.path;
+    }
+
+    @Override
+    public void setPath(final String requestUri) {
+        this.path = requestUri;
+    }
+
+    @Override
+    public String getScheme() {
+        return this.scheme;
+    }
+
+    @Override
+    public void setScheme(final String scheme) {
+        this.scheme = scheme;
     }
 
-    /**
-     * @since 5.0
-     */
     @Override
-    public void setHost(final HttpHost host) {
-        this.host = host;
+    public String getAuthority() {
+        return this.authority;
     }
 
     @Override
-    public String getUri() {
-        return this.requestUri;
+    public void setAuthority(final String authority) {
+        this.authority = authority;
     }
 
     @Override
     public String toString() {
         final StringBuilder sb = new StringBuilder();
-        sb.append(this.method).append(" ").append(this.host).append(" ").append(this.requestUri).append(" ")
+        sb.append(this.method).append(" ").append(this.scheme).append("://").append(this.authority).append("/").append(this.path).append(" ")
                 .append(super.toString());
         return sb.toString();
     }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/message/HeaderGroup.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/message/HeaderGroup.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/message/HeaderGroup.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/message/HeaderGroup.java Wed Apr  6 07:21:14 2016
@@ -36,6 +36,7 @@ import java.util.Locale;
 
 import org.apache.hc.core5.annotation.NotThreadSafe;
 import org.apache.hc.core5.http.Header;
+import org.apache.hc.core5.http.ProtocolException;
 import org.apache.hc.core5.util.CharArrayBuffer;
 
 /**
@@ -49,6 +50,10 @@ import org.apache.hc.core5.util.CharArra
 @NotThreadSafe
 public class HeaderGroup implements Serializable {
 
+
+    // HTTPCORE-361 : we don't use the for-each syntax, when iterating headers
+    // as that creates an Iterator that needs to be garbage-collected
+
     private static final long serialVersionUID = 2608834160639271617L;
 
     private final Header[] EMPTY = new Header[] {};
@@ -108,9 +113,6 @@ public class HeaderGroup implements Seri
         if (header == null) {
             return;
         }
-        // HTTPCORE-361 : we don't use the for-each syntax, i.e.
-        //     for (Header header : headers)
-        // as that creates an Iterator that needs to be garbage-collected
         for (int i = 0; i < this.headers.size(); i++) {
             final Header current = this.headers.get(i);
             if (current.getName().equalsIgnoreCase(header.getName())) {
@@ -178,9 +180,6 @@ public class HeaderGroup implements Seri
      */
     public Header[] getHeaders(final String name) {
         List<Header> headersFound = null;
-        // HTTPCORE-361 : we don't use the for-each syntax, i.e.
-        //     for (Header header : headers)
-        // as that creates an Iterator that needs to be garbage-collected
         for (int i = 0; i < this.headers.size(); i++) {
             final Header header = this.headers.get(i);
             if (header.getName().equalsIgnoreCase(name)) {
@@ -202,9 +201,6 @@ public class HeaderGroup implements Seri
      * @return the first header or {@code null}
      */
     public Header getFirstHeader(final String name) {
-        // HTTPCORE-361 : we don't use the for-each syntax, i.e.
-        //     for (Header header : headers)
-        // as that creates an Iterator that needs to be garbage-collected
         for (int i = 0; i < this.headers.size(); i++) {
             final Header header = this.headers.get(i);
             if (header.getName().equalsIgnoreCase(name)) {
@@ -215,6 +211,31 @@ public class HeaderGroup implements Seri
     }
 
     /**
+     * Gets single first header with the given name.
+     *
+     * <p>Header name comparison is case insensitive.
+     *
+     * @param name the name of the header to get
+     * @return the first header or {@code null}
+     * @throws ProtocolException in case multiple headers with the given name are found.
+     */
+    public Header getSingleHeader(final String name) throws ProtocolException {
+        int count = 0;
+        Header singleHeader = null;
+        for (int i = 0; i < this.headers.size(); i++) {
+            final Header header = this.headers.get(i);
+            if (header.getName().equalsIgnoreCase(name)) {
+                singleHeader = header;
+                count++;
+            }
+        }
+        if (count > 1) {
+            throw new ProtocolException("Multiple headers '" + name + "' found");
+        }
+        return singleHeader;
+    }
+
+    /**
      * Gets the last header with the given name.
      *
      * <p>Header name comparison is case insensitive.

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageParser.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageParser.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageParser.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageParser.java Wed Apr  6 07:21:14 2016
@@ -30,14 +30,14 @@ package org.apache.hc.core5.http.nio;
 import java.io.IOException;
 
 import org.apache.hc.core5.http.HttpException;
-import org.apache.hc.core5.http.HttpMessage;
+import org.apache.hc.core5.http.MessageHead;
 
 /**
- * Abstract HTTP message parser for non-blocking connections.
+ * Message parser intended to build HTTP message head from a session input buffer..
  *
  * @since 4.0
  */
-public interface NHttpMessageParser<T extends HttpMessage> {
+public interface NHttpMessageParser<T extends MessageHead> {
 
     /**
      * Resets the parser. The parser will be ready to start parsing another

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageParserFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageParserFactory.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageParserFactory.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageParserFactory.java Wed Apr  6 07:21:14 2016
@@ -27,7 +27,7 @@
 
 package org.apache.hc.core5.http.nio;
 
-import org.apache.hc.core5.http.HttpMessage;
+import org.apache.hc.core5.http.MessageHead;
 import org.apache.hc.core5.http.config.MessageConstraints;
 
 /**
@@ -35,7 +35,7 @@ import org.apache.hc.core5.http.config.M
  *
  * @since 4.3
  */
-public interface NHttpMessageParserFactory<T extends HttpMessage> {
+public interface NHttpMessageParserFactory<T extends MessageHead> {
 
     NHttpMessageParser<T> create(MessageConstraints constraints);
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageWriter.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageWriter.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageWriter.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageWriter.java Wed Apr  6 07:21:14 2016
@@ -30,14 +30,14 @@ package org.apache.hc.core5.http.nio;
 import java.io.IOException;
 
 import org.apache.hc.core5.http.HttpException;
-import org.apache.hc.core5.http.HttpMessage;
+import org.apache.hc.core5.http.MessageHead;
 
 /**
- * Abstract HTTP message writer for non-blocking connections.
+ * Message writer intended to serialize HTTP message head to a session buffer.
  *
  * @since 4.0
  */
-public interface NHttpMessageWriter<T extends HttpMessage> {
+public interface NHttpMessageWriter<T extends MessageHead> {
 
     /**
      * Resets the writer. The writer will be ready to start serializing another
@@ -46,7 +46,7 @@ public interface NHttpMessageWriter<T ex
     void reset();
 
     /**
-     * Serializes out the HTTP message head.
+     * Writes out the HTTP message head.
      *
      * @param message HTTP message.
      * @param buffer session output buffer.

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageWriterFactory.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageWriterFactory.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageWriterFactory.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/nio/NHttpMessageWriterFactory.java Wed Apr  6 07:21:14 2016
@@ -27,14 +27,14 @@
 
 package org.apache.hc.core5.http.nio;
 
-import org.apache.hc.core5.http.HttpMessage;
+import org.apache.hc.core5.http.MessageHead;
 
 /**
  * Factory for {@link org.apache.hc.core5.http.nio.NHttpMessageWriter} instances.
  *
  * @since 4.3
  */
-public interface NHttpMessageWriterFactory<T extends HttpMessage> {
+public interface NHttpMessageWriterFactory<T extends MessageHead> {
 
     NHttpMessageWriter<T> create();
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/RequestTargetHost.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/RequestTargetHost.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/RequestTargetHost.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/RequestTargetHost.java Wed Apr  6 07:21:14 2016
@@ -34,7 +34,6 @@ import org.apache.hc.core5.annotation.Im
 import org.apache.hc.core5.http.HttpConnection;
 import org.apache.hc.core5.http.HttpException;
 import org.apache.hc.core5.http.HttpHeaders;
-import org.apache.hc.core5.http.HttpHost;
 import org.apache.hc.core5.http.HttpRequest;
 import org.apache.hc.core5.http.HttpRequestInterceptor;
 import org.apache.hc.core5.http.HttpVersion;
@@ -68,8 +67,8 @@ public class RequestTargetHost implement
         }
 
         if (!request.containsHeader(HttpHeaders.HOST)) {
-            HttpHost targethost = request.getHost();
-            if (targethost == null) {
+            String authority = request.getAuthority();
+            if (authority == null) {
                 // Populate the context with a default HTTP host based on the
                 // inet address of the target host
                 final HttpCoreContext coreContext = HttpCoreContext.adapt(context);
@@ -77,17 +76,17 @@ public class RequestTargetHost implement
                 if (conn != null) {
                     final InetSocketAddress remoteAddress = (InetSocketAddress) conn.getRemoteAddress();
                     if (remoteAddress != null) {
-                        targethost = new HttpHost(remoteAddress.getHostName(), remoteAddress.getPort());
+                        authority = remoteAddress.getHostName() + ":" +  remoteAddress.getPort();
                     }
                 }
-                if (targethost == null) {
+                if (authority == null) {
                     if (ver.lessEquals(HttpVersion.HTTP_1_0)) {
                         return;
                     }
                     throw new ProtocolException("Target host is unknown");
                 }
             }
-            request.addHeader(HttpHeaders.HOST, targethost.toHostString());
+            request.addHeader(HttpHeaders.HOST, authority);
         }
     }
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/RequestValidateHost.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/RequestValidateHost.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/RequestValidateHost.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/main/java/org/apache/hc/core5/http/protocol/RequestValidateHost.java Wed Apr  6 07:21:14 2016
@@ -33,7 +33,6 @@ import org.apache.hc.core5.annotation.Im
 import org.apache.hc.core5.http.Header;
 import org.apache.hc.core5.http.HttpException;
 import org.apache.hc.core5.http.HttpHeaders;
-import org.apache.hc.core5.http.HttpHost;
 import org.apache.hc.core5.http.HttpRequest;
 import org.apache.hc.core5.http.HttpRequestInterceptor;
 import org.apache.hc.core5.http.HttpVersion;
@@ -44,7 +43,7 @@ import org.apache.hc.core5.util.TextUtil
 
 /**
  * RequestTargetHost is responsible for copying {@code Host} header value to
- * {@link HttpRequest#setHost(HttpHost)} of the incoming message.
+ * {@link HttpRequest#setAuthority(String)} of the incoming message.
  * This interceptor is required for server side protocol processors.
  *
  * @since 5.0
@@ -61,32 +60,17 @@ public class RequestValidateHost impleme
             throws HttpException, IOException {
         Args.notNull(request, "HTTP request");
 
-        final ProtocolVersion version = request.getVersion() != null ? request.getVersion() : HttpVersion.HTTP_1_1;
-        if (version.greaterEquals(HttpVersion.HTTP_1_1)) {
-            final int n = request.containsHeaders(HttpHeaders.HOST);
-            if (n == 0) {
-                throw new ProtocolException("Host header is absent");
-            } else if (n > 1) {
-                throw new ProtocolException("Multiple Host headers found");
-            }
-        }
-        final Header header = request.getFirstHeader(HttpHeaders.HOST);
+        final Header header = request.getSingleHeader(HttpHeaders.HOST);
         if (header != null) {
-            String text = header.getValue();
-            if (TextUtils.isBlank(text)) {
-                throw new ProtocolException("Empty host header");
+            final String authority = header.getValue();
+            if (!TextUtils.isBlank(authority)) {
+                request.setAuthority(authority);
             }
-            int port = -1;
-            final int portIdx = text.lastIndexOf(":");
-            if (portIdx > 0) {
-                try {
-                    port = Integer.parseInt(text.substring(portIdx + 1));
-                } catch (final NumberFormatException ex) {
-                    throw new ProtocolException("Invalid HTTP host: " + text);
-                }
-                text = text.substring(0, portIdx);
+        } else {
+            final ProtocolVersion version = request.getVersion() != null ? request.getVersion() : HttpVersion.HTTP_1_1;
+            if (version.greaterEquals(HttpVersion.HTTP_1_1)) {
+                throw new ProtocolException("Host header is absent");
             }
-            request.setHost(new HttpHost(text, port, null));
         }
     }
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestDefaultBHttpServerConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestDefaultBHttpServerConnection.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestDefaultBHttpServerConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestDefaultBHttpServerConnection.java Wed Apr  6 07:21:14 2016
@@ -86,7 +86,7 @@ public class TestDefaultBHttpServerConne
 
         final HttpRequest request = conn.receiveRequestHeader();
         Assert.assertNotNull(request);
-        Assert.assertEquals("/", request.getUri());
+        Assert.assertEquals("/", request.getPath());
         Assert.assertEquals("GET", request.getMethod());
         Assert.assertTrue(request.containsHeader("User-Agent"));
         Assert.assertEquals(1, conn.getMetrics().getRequestCount());
@@ -105,7 +105,7 @@ public class TestDefaultBHttpServerConne
         final HttpRequest request = conn.receiveRequestHeader();
 
         Assert.assertNotNull(request);
-        Assert.assertEquals("/", request.getUri());
+        Assert.assertEquals("/", request.getPath());
         Assert.assertEquals("POST", request.getMethod());
         Assert.assertTrue(request.containsHeader("User-Agent"));
         Assert.assertNull(request.getEntity());
@@ -136,7 +136,7 @@ public class TestDefaultBHttpServerConne
         final HttpRequest request = conn.receiveRequestHeader();
 
         Assert.assertNotNull(request);
-        Assert.assertEquals("/stuff", request.getUri());
+        Assert.assertEquals("/stuff", request.getPath());
         Assert.assertEquals("POST", request.getMethod());
         Assert.assertTrue(request.containsHeader("User-Agent"));
         Assert.assertNull(request.getEntity());
@@ -168,7 +168,7 @@ public class TestDefaultBHttpServerConne
         final HttpRequest request = conn.receiveRequestHeader();
 
         Assert.assertNotNull(request);
-        Assert.assertEquals("/stuff", request.getUri());
+        Assert.assertEquals("/stuff", request.getPath());
         Assert.assertEquals("POST", request.getMethod());
         Assert.assertTrue(request.containsHeader("User-Agent"));
         Assert.assertNull(request.getEntity());
@@ -190,7 +190,7 @@ public class TestDefaultBHttpServerConne
         final HttpRequest request = conn.receiveRequestHeader();
 
         Assert.assertNotNull(request);
-        Assert.assertEquals("/stuff", request.getUri());
+        Assert.assertEquals("/stuff", request.getPath());
         Assert.assertEquals("POST", request.getMethod());
         Assert.assertTrue(request.containsHeader("User-Agent"));
         Assert.assertNull(request.getEntity());

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestRequestParser.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestRequestParser.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestRequestParser.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/io/TestRequestParser.java Wed Apr  6 07:21:14 2016
@@ -60,7 +60,7 @@ public class TestRequestParser {
         final HttpRequest httprequest = parser.parse(inbuffer, inputStream);
 
         Assert.assertEquals("GET", httprequest.getMethod());
-        Assert.assertEquals("/", httprequest.getUri());
+        Assert.assertEquals("/", httprequest.getPath());
         final Header[] headers = httprequest.getAllHeaders();
         Assert.assertEquals(3, headers.length);
     }
@@ -90,7 +90,7 @@ public class TestRequestParser {
         final HttpRequest httprequest = parser.parse(inbuffer, inputStream);
 
         Assert.assertEquals("GET", httprequest.getMethod());
-        Assert.assertEquals("/", httprequest.getUri());
+        Assert.assertEquals("/", httprequest.getPath());
         final Header[] headers = httprequest.getAllHeaders();
         Assert.assertEquals(1, headers.length);
     }
@@ -141,7 +141,7 @@ public class TestRequestParser {
         Assert.assertEquals(5, timeoutCount);
 
         Assert.assertEquals("GET", httprequest.getMethod());
-        Assert.assertEquals("/", httprequest.getUri());
+        Assert.assertEquals("/", httprequest.getPath());
         final Header[] headers = httprequest.getAllHeaders();
         Assert.assertEquals(3, headers.length);
     }

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestDefaultNHttpServerConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestDefaultNHttpServerConnection.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestDefaultNHttpServerConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestDefaultNHttpServerConnection.java Wed Apr  6 07:21:14 2016
@@ -480,7 +480,7 @@ public class TestDefaultNHttpServerConne
         final HttpRequest request = requests.getFirst();
         Assert.assertNotNull(request);
         Assert.assertEquals("POST", request.getMethod());
-        Assert.assertEquals("/", request.getUri());
+        Assert.assertEquals("/", request.getPath());
         Assert.assertTrue(request instanceof HttpRequest);
         final HttpEntity entity = request.getEntity();
         Assert.assertNotNull(entity);
@@ -525,7 +525,7 @@ public class TestDefaultNHttpServerConne
         final HttpRequest request = requests.getFirst();
         Assert.assertNotNull(request);
         Assert.assertEquals("POST", request.getMethod());
-        Assert.assertEquals("/", request.getUri());
+        Assert.assertEquals("/", request.getPath());
         Assert.assertTrue(request instanceof HttpRequest);
         final HttpEntity entity = request.getEntity();
         Assert.assertNotNull(entity);
@@ -573,7 +573,7 @@ public class TestDefaultNHttpServerConne
         final HttpRequest request = requests.getFirst();
         Assert.assertNotNull(request);
         Assert.assertEquals("GET", request.getMethod());
-        Assert.assertEquals("/", request.getUri());
+        Assert.assertEquals("/", request.getPath());
     }
 
     @Test

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestHttpMessageParser.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestHttpMessageParser.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestHttpMessageParser.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/impl/nio/TestHttpMessageParser.java Wed Apr  6 07:21:14 2016
@@ -68,7 +68,7 @@ public class TestHttpMessageParser {
         inbuf.fill(newChannel("GET /whatever HTTP/1.1\r\nSome header: stuff\r\n\r\n"));
         final HttpRequest request = requestParser.parse(inbuf, false);
         Assert.assertNotNull(request);
-        Assert.assertEquals("/whatever", request.getUri());
+        Assert.assertEquals("/whatever", request.getPath());
         Assert.assertEquals(1, request.getAllHeaders().length);
     }
 
@@ -87,7 +87,7 @@ public class TestHttpMessageParser {
         request = requestParser.parse(inbuf, false);
 
         Assert.assertNotNull(request);
-        Assert.assertEquals("/whatever", request.getUri());
+        Assert.assertEquals("/whatever", request.getPath());
         Assert.assertEquals(1, request.getAllHeaders().length);
 
     }
@@ -116,7 +116,7 @@ public class TestHttpMessageParser {
         request = requestParser.parse(inbuf, false);
 
         Assert.assertNotNull(request);
-        Assert.assertEquals("/whatever", request.getUri());
+        Assert.assertEquals("/whatever", request.getPath());
         Assert.assertEquals(1, request.getAllHeaders().length);
         Assert.assertEquals("stuff more stuff", request.getFirstHeader("Some header").getValue());
     }
@@ -142,7 +142,7 @@ public class TestHttpMessageParser {
         request = requestParser.parse(inbuf, false);
 
         Assert.assertNotNull(request);
-        Assert.assertEquals("/whatever", request.getUri());
+        Assert.assertEquals("/whatever", request.getPath());
         Assert.assertEquals(1, request.getAllHeaders().length);
         Assert.assertEquals("stuff more stuff", request.getFirstHeader("Some header").getValue());
     }
@@ -171,7 +171,7 @@ public class TestHttpMessageParser {
         request = requestParser.parse(inbuf, false);
 
         Assert.assertNotNull(request);
-        Assert.assertEquals("/whatever", request.getUri());
+        Assert.assertEquals("/whatever", request.getPath());
         Assert.assertEquals(1, request.getAllHeaders().length);
         Assert.assertEquals("stuff  more stuff", request.getFirstHeader("Some header").getValue());
     }
@@ -314,7 +314,7 @@ public class TestHttpMessageParser {
         inbuf.fill(newChannel("\r\n\r\nGET /whatever HTTP/1.1\r\nSome header: stuff\r\n\r\n"));
         final HttpRequest request = requestParser.parse(inbuf, false);
         Assert.assertNotNull(request);
-        Assert.assertEquals("/whatever", request.getUri());
+        Assert.assertEquals("/whatever", request.getPath());
         Assert.assertEquals(1, request.getAllHeaders().length);
     }
 

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/SimpleRequestHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/SimpleRequestHandler.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/SimpleRequestHandler.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/SimpleRequestHandler.java Wed Apr  6 07:21:14 2016
@@ -58,7 +58,7 @@ final class SimpleRequestHandler impleme
             final HttpResponse response,
             final HttpContext context) throws HttpException, IOException {
 
-        final String s = request.getUri();
+        final String s = request.getPath();
         final int idx = s.indexOf('x');
         if (idx == -1) {
             throw new HttpException("Unexpected request-URI format");

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/TestHttpAsyncHandlers.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/TestHttpAsyncHandlers.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/TestHttpAsyncHandlers.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/TestHttpAsyncHandlers.java Wed Apr  6 07:21:14 2016
@@ -444,7 +444,7 @@ public class TestHttpAsyncHandlers exten
                     final HttpAsyncExchange httpexchange,
                     final HttpContext context) throws HttpException {
                 final HttpRequest request = httpexchange.getRequest();
-                final String s = request.getUri();
+                final String s = request.getPath();
                 if (!s.equals("AAAAAx10")) {
                     final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_EXPECTATION_FAILED, "Expectation failed");
                     response.setEntity(new NStringEntity("Expectation failed", ContentType.TEXT_PLAIN));
@@ -576,7 +576,7 @@ public class TestHttpAsyncHandlers exten
                         }
                         // Set the entity after delaying...
                         final HttpRequest request = httpexchange.getRequest();
-                        final String s = request.getUri();
+                        final String s = request.getPath();
                         if (!s.equals("AAAAAx10")) {
                             final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_EXPECTATION_FAILED, "Expectation failed");
                             response.setEntity(new NStringEntity("Expectation failed", ContentType.TEXT_PLAIN));
@@ -636,7 +636,7 @@ public class TestHttpAsyncHandlers exten
                     @Override
                     public void run() {
                         final HttpRequest request = httpexchange.getRequest();
-                        final String s = request.getUri();
+                        final String s = request.getPath();
                         if (!s.equals("AAAAAx10")) {
                             final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_EXPECTATION_FAILED, "Expectation failed");
                             response.setEntity(new NStringEntity("Expectation failed", ContentType.TEXT_PLAIN));
@@ -688,7 +688,7 @@ public class TestHttpAsyncHandlers exten
                     @Override
                     public void run() {
                         final HttpRequest request = httpexchange.getRequest();
-                        final String s = request.getUri();
+                        final String s = request.getPath();
                         if (!s.equals("AAAAAx10")) {
                             final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_EXPECTATION_FAILED, "Expectation failed");
                             response.setEntity(new NStringEntity("Expectation failed", ContentType.TEXT_PLAIN));
@@ -742,7 +742,7 @@ public class TestHttpAsyncHandlers exten
                     @Override
                     public void run() {
                         final HttpRequest request = httpexchange.getRequest();
-                        final String s = request.getUri();
+                        final String s = request.getPath();
                         if (!s.equals("AAAAAx10")) {
                             final HttpResponse response = new BasicHttpResponse(HttpStatus.SC_EXPECTATION_FAILED, "Expectation failed");
                             response.setEntity(new NStringEntity("Expectation failed", ContentType.TEXT_PLAIN));

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/TestSyncHttp.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/TestSyncHttp.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/TestSyncHttp.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/integration/TestSyncHttp.java Wed Apr  6 07:21:14 2016
@@ -124,7 +124,7 @@ public class TestSyncHttp {
                     final HttpResponse response,
                     final HttpContext context) throws HttpException, IOException {
 
-                String s = request.getUri();
+                String s = request.getPath();
                 if (s.startsWith("/?")) {
                     s = s.substring(2);
                 }
@@ -677,7 +677,7 @@ public class TestSyncHttp {
 
                 if (request instanceof HttpRequest) {
                     int n = 1;
-                    String s = request.getUri();
+                    String s = request.getPath();
                     if (s.startsWith("/?n=")) {
                         s = s.substring(4);
                         try {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicMessages.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicMessages.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicMessages.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/message/TestBasicMessages.java Wed Apr  6 07:21:14 2016
@@ -30,7 +30,6 @@ package org.apache.hc.core5.http.message
 import java.net.URI;
 
 import org.apache.hc.core5.http.HttpEntity;
-import org.apache.hc.core5.http.HttpHost;
 import org.apache.hc.core5.http.HttpRequest;
 import org.apache.hc.core5.http.HttpResponse;
 import org.apache.hc.core5.http.HttpStatus;
@@ -90,19 +89,13 @@ public class TestBasicMessages {
     public void testDefaultRequestConstructors() {
         HttpRequest request = new BasicHttpRequest("WHATEVER", "/");
         Assert.assertEquals("WHATEVER", request.getMethod());
-        Assert.assertEquals("/", request.getUri());
+        Assert.assertEquals("/", request.getPath());
 
         request = new BasicHttpRequest("GET", "/");
         Assert.assertEquals("GET", request.getMethod());
-        Assert.assertEquals("/", request.getUri());
+        Assert.assertEquals("/", request.getPath());
 
         try {
-            new BasicHttpRequest("GET", (String) null);
-            Assert.fail("IllegalArgumentException should have been thrown");
-        } catch (final IllegalArgumentException ex) {
-            // expected
-        }
-        try {
             new BasicHttpRequest("GET", (URI) null);
             Assert.fail("IllegalArgumentException should have been thrown");
         } catch (final IllegalArgumentException ex) {
@@ -114,32 +107,34 @@ public class TestBasicMessages {
     public void testRequestBasics() throws Exception {
         final HttpRequest request = new BasicHttpRequest("GET", "/stuff");
         Assert.assertEquals("GET", request.getMethod());
-        Assert.assertEquals("/stuff", request.getUri());
-        Assert.assertEquals(null, request.getHost());
+        Assert.assertEquals("/stuff", request.getPath());
+        Assert.assertEquals(null, request.getAuthority());
     }
 
     @Test
     public void testRequestWithRelativeURI() throws Exception {
         final HttpRequest request = new BasicHttpRequest("GET", new URI("/stuff"));
         Assert.assertEquals("GET", request.getMethod());
-        Assert.assertEquals("/stuff", request.getUri());
-        Assert.assertEquals(null, request.getHost());
+        Assert.assertEquals("/stuff", request.getPath());
+        Assert.assertEquals(null, request.getAuthority());
     }
 
     @Test
     public void testRequestWithAbsoluteURI() throws Exception {
         final HttpRequest request = new BasicHttpRequest("GET", new URI("https://host:9443/stuff?param=value"));
         Assert.assertEquals("GET", request.getMethod());
-        Assert.assertEquals("/stuff?param=value", request.getUri());
-        Assert.assertEquals(new HttpHost("host", 9443, "https"), request.getHost());
+        Assert.assertEquals("/stuff?param=value", request.getPath());
+        Assert.assertEquals("host:9443", request.getAuthority());
+        Assert.assertEquals("https", request.getScheme());
     }
 
     @Test
     public void testRequestWithNoPath() throws Exception {
         final HttpRequest request = new BasicHttpRequest("GET", new URI("http://host"));
         Assert.assertEquals("GET", request.getMethod());
-        Assert.assertEquals("/", request.getUri());
-        Assert.assertEquals(new HttpHost("host", -1, "http"), request.getHost());
+        Assert.assertEquals("/", request.getPath());
+        Assert.assertEquals("host", request.getAuthority());
+        Assert.assertEquals("http", request.getScheme());
     }
 
     @Test

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/protocol/TestStandardInterceptors.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/protocol/TestStandardInterceptors.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/protocol/TestStandardInterceptors.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/protocol/TestStandardInterceptors.java Wed Apr  6 07:21:14 2016
@@ -385,7 +385,7 @@ public class TestStandardInterceptors {
         final HttpContext context = new BasicHttpContext(null);
         final HttpHost host = new HttpHost("somehost", 8080, "http");
         final BasicHttpRequest request = new BasicHttpRequest("GET", "/");
-        request.setHost(host);
+        request.setAuthority(host.toHostString());
         final RequestTargetHost interceptor = new RequestTargetHost();
         interceptor.process(request, context);
         final Header header = request.getFirstHeader(HttpHeaders.HOST);
@@ -425,7 +425,7 @@ public class TestStandardInterceptors {
         final HttpContext context = new BasicHttpContext(null);
         final HttpHost host = new HttpHost("somehost", 8080, "http");
         final BasicHttpRequest request = new BasicHttpRequest("GET", "/");
-        request.setHost(host);
+        request.setAuthority(host.toHostString());
         request.addHeader(new BasicHeader(HttpHeaders.HOST, "whatever"));
         final RequestTargetHost interceptor = new RequestTargetHost();
         interceptor.process(request, context);
@@ -480,7 +480,7 @@ public class TestStandardInterceptors {
         final HttpContext context = new BasicHttpContext(null);
         final HttpHost host = new HttpHost("somehost", 8080, "http");
         final BasicHttpRequest request = new BasicHttpRequest("CONNECT", "/");
-        request.setHost(host);
+        request.setAuthority(host.toHostString());
         final RequestTargetHost interceptor = new RequestTargetHost();
         interceptor.process(request, context);
         final Header header = request.getFirstHeader(HttpHeaders.HOST);
@@ -494,7 +494,7 @@ public class TestStandardInterceptors {
         context.setProtocolVersion(HttpVersion.HTTP_1_0);
         final HttpHost host = new HttpHost("somehost", 8080, "http");
         final BasicHttpRequest request = new BasicHttpRequest("CONNECT", "/");
-        request.setHost(host);
+        request.setAuthority(host.toHostString());
         final RequestTargetHost interceptor = new RequestTargetHost();
         interceptor.process(request, context);
         final Header header = request.getFirstHeader(HttpHeaders.HOST);
@@ -1069,7 +1069,7 @@ public class TestStandardInterceptors {
         request.setHeader(HttpHeaders.HOST, "host:8888");
         final RequestValidateHost interceptor = new RequestValidateHost();
         interceptor.process(request, context);
-        Assert.assertEquals(new HttpHost("host", 8888), request.getHost());
+        Assert.assertEquals("host:8888", request.getAuthority());
     }
 
     @Test
@@ -1080,7 +1080,7 @@ public class TestStandardInterceptors {
         request.setHeader(HttpHeaders.HOST, "host");
         final RequestValidateHost interceptor = new RequestValidateHost();
         interceptor.process(request, context);
-        Assert.assertEquals(new HttpHost("host", -1), request.getHost());
+        Assert.assertEquals("host", request.getAuthority());
     }
 
     @Test

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/HttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/HttpClient.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/HttpClient.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/HttpClient.java Wed Apr  6 07:21:14 2016
@@ -103,8 +103,9 @@ public class HttpClient {
             final HttpRequest request,
             final HttpHost targetHost,
             final HttpClientConnection conn) throws HttpException, IOException {
-        if (request.getHost() == null) {
-            request.setHost(targetHost);
+        if (request.getAuthority() == null) {
+            request.setAuthority(targetHost.toHostString());
+            request.setScheme(targetHost.getSchemeName());
         }
         this.httpexecutor.preProcess(request, this.httpproc, this.context);
         final HttpResponse response = this.httpexecutor.execute(request, conn, this.context);

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/LoggingBHttpClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/LoggingBHttpClientConnection.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/LoggingBHttpClientConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/LoggingBHttpClientConnection.java Wed Apr  6 07:21:14 2016
@@ -131,7 +131,7 @@ public class LoggingBHttpClientConnectio
     @Override
     protected void onRequestSubmitted(final HttpRequest request) {
         if (request != null && this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug(id + " >> " + new RequestLine(request.getMethod(), request.getUri(),
+            this.headerlog.debug(id + " >> " + new RequestLine(request.getMethod(), request.getPath(),
                     request.getVersion() != null ? request.getVersion() : HttpVersion.HTTP_1_1));
             final Header[] headers = request.getAllHeaders();
             for (final Header header : headers) {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/LoggingBHttpServerConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/LoggingBHttpServerConnection.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/LoggingBHttpServerConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/io/LoggingBHttpServerConnection.java Wed Apr  6 07:21:14 2016
@@ -118,7 +118,7 @@ public class LoggingBHttpServerConnectio
     @Override
     protected void onRequestReceived(final HttpRequest request) {
         if (request != null && this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug(id + " >> " + new RequestLine(request.getMethod(), request.getUri(),
+            this.headerlog.debug(id + " >> " + new RequestLine(request.getMethod(), request.getPath(),
                     request.getVersion() != null ? request.getVersion() : HttpVersion.HTTP_1_1));
             final Header[] headers = request.getAllHeaders();
             for (final Header header : headers) {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/nio/LoggingNHttpClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/nio/LoggingNHttpClientConnection.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/nio/LoggingNHttpClientConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/nio/LoggingNHttpClientConnection.java Wed Apr  6 07:21:14 2016
@@ -84,7 +84,7 @@ public class LoggingNHttpClientConnectio
     @Override
     public void submitRequest(final HttpRequest request) throws IOException, HttpException {
         if (this.log.isDebugEnabled()) {
-            this.log.debug(this.id + ": "  + request.getMethod() + " " + request.getUri());
+            this.log.debug(this.id + ": "  + request.getMethod() + " " + request.getPath());
         }
         super.submitRequest(request);
     }
@@ -121,7 +121,7 @@ public class LoggingNHttpClientConnectio
     @Override
     protected void onRequestSubmitted(final HttpRequest request) {
         if (request != null && this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug(id + " >> " + new RequestLine(request.getMethod(), request.getUri(),
+            this.headerlog.debug(id + " >> " + new RequestLine(request.getMethod(), request.getPath(),
                     request.getVersion() != null ? request.getVersion() : HttpVersion.HTTP_1_1));
             final Header[] headers = request.getAllHeaders();
             for (final Header header : headers) {

Modified: httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/nio/LoggingNHttpServerConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/nio/LoggingNHttpServerConnection.java?rev=1737929&r1=1737928&r2=1737929&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/nio/LoggingNHttpServerConnection.java (original)
+++ httpcomponents/httpcore/trunk/httpcore5/src/test/java/org/apache/hc/core5/http/testserver/nio/LoggingNHttpServerConnection.java Wed Apr  6 07:21:14 2016
@@ -108,7 +108,7 @@ public class LoggingNHttpServerConnectio
     @Override
     protected void onRequestReceived(final HttpRequest request) {
         if (request != null && this.headerlog.isDebugEnabled()) {
-            this.headerlog.debug(id + " >> " + new RequestLine(request.getMethod(), request.getUri(),
+            this.headerlog.debug(id + " >> " + new RequestLine(request.getMethod(), request.getPath(),
                     request.getVersion() != null ? request.getVersion() : HttpVersion.HTTP_1_1));
             final Header[] headers = request.getAllHeaders();
             for (final Header header : headers) {