diff --git a/src/main/java/org/takes/rs/RsWithBody.java b/src/main/java/org/takes/rs/RsWithBody.java index 846ed6fa8..3c201ebb0 100644 --- a/src/main/java/org/takes/rs/RsWithBody.java +++ b/src/main/java/org/takes/rs/RsWithBody.java @@ -27,6 +27,9 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; import lombok.EqualsAndHashCode; import org.takes.Response; @@ -42,6 +45,11 @@ @EqualsAndHashCode(callSuper = true) public final class RsWithBody extends RsWrap { + /** + * String for content lenght key:value. + */ + private static final String CONT_LGTH = "Content-Length:%s"; + /** * Ctor. * @param body Body @@ -93,7 +101,16 @@ public RsWithBody(final Response res, final URL url) { new Response() { @Override public Iterable head() throws IOException { - return res.head(); + final List headerAttr = getHeadAttributes( + res.head() + ); + headerAttr.add( + String.format( + CONT_LGTH, + url.openStream().available() + ) + ); + return headerAttr; } @Override public InputStream body() throws IOException { @@ -113,7 +130,15 @@ public RsWithBody(final Response res, final byte[] body) { new Response() { @Override public Iterable head() throws IOException { - return res.head(); + final List headerAttr = getHeadAttributes( + res.head() + ); + headerAttr.add( + String.format( + CONT_LGTH, body.length + ) + ); + return headerAttr; } @Override public InputStream body() { @@ -133,7 +158,15 @@ public RsWithBody(final Response res, final InputStream body) { new Response() { @Override public Iterable head() throws IOException { - return res.head(); + final List headerAttr = getHeadAttributes( + res.head() + ); + headerAttr.add( + String.format( + CONT_LGTH, body.available() + ) + ); + return headerAttr; } @Override public InputStream body() { @@ -143,4 +176,19 @@ public InputStream body() { ); } + /** + * Forms a list with header attributes from response. + * @param head Response head + * @return List of header attributes + */ + private static List getHeadAttributes(final Iterable head) { + final Iterator itr = head.iterator(); + // @checkstyle ConditionalRegexpMultilineCheck (1 line) + final List headerAttrs = new ArrayList(); + while (itr.hasNext()) { + headerAttrs.add(itr.next()); + } + return headerAttrs; + } + } diff --git a/src/test/java/org/takes/facets/fork/TkForkTest.java b/src/test/java/org/takes/facets/fork/TkForkTest.java index 88b329f69..ea33682fe 100644 --- a/src/test/java/org/takes/facets/fork/TkForkTest.java +++ b/src/test/java/org/takes/facets/fork/TkForkTest.java @@ -55,6 +55,7 @@ public void dispatchesByRegularExpression() throws IOException { Matchers.equalTo( Joiner.on("\r\n").join( "HTTP/1.1 200 OK", + String.format("Content-Length:%s", body.length()), "Content-Type: text/plain", "", body diff --git a/src/test/java/org/takes/rs/RsTextTest.java b/src/test/java/org/takes/rs/RsTextTest.java index 72d990e81..f2c0826c7 100644 --- a/src/test/java/org/takes/rs/RsTextTest.java +++ b/src/test/java/org/takes/rs/RsTextTest.java @@ -49,6 +49,7 @@ public void makesPlainTextResponse() throws IOException { Matchers.equalTo( Joiner.on("\r\n").join( "HTTP/1.1 200 OK", + String.format("Content-Length:%s", body.length()), "Content-Type: text/plain", "", body diff --git a/src/test/java/org/takes/tk/TkHTMLTest.java b/src/test/java/org/takes/tk/TkHTMLTest.java index 4773e8ee0..3167eba0f 100644 --- a/src/test/java/org/takes/tk/TkHTMLTest.java +++ b/src/test/java/org/takes/tk/TkHTMLTest.java @@ -52,6 +52,7 @@ public void createsTextResponse() throws IOException { Matchers.equalTo( Joiner.on("\r\n").join( "HTTP/1.1 200 OK", + String.format("Content-Length:%s", body.length()), "Content-Type: text/html", "", body diff --git a/src/test/java/org/takes/tk/TkTextTest.java b/src/test/java/org/takes/tk/TkTextTest.java index f22228220..49ddf686a 100644 --- a/src/test/java/org/takes/tk/TkTextTest.java +++ b/src/test/java/org/takes/tk/TkTextTest.java @@ -52,6 +52,7 @@ public void createsTextResponse() throws IOException { Matchers.equalTo( Joiner.on("\r\n").join( "HTTP/1.1 200 OK", + String.format("Content-Length:%s", body.length()), "Content-Type: text/plain", "", body