Skip to content

Commit cba36c6

Browse files
authored
Merge pull request #242 from fliptaboada/fix-content-length
writing content as bytes to avoid contentLength calculation problems
2 parents d149463 + f21b05f commit cba36c6

File tree

3 files changed

+11
-9
lines changed

3 files changed

+11
-9
lines changed

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/BatchedQueryResponseWriter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ public void write(HttpServletRequest request, HttpServletResponse response) thro
3333
responseBuilder.append(']');
3434

3535
String responseContent = responseBuilder.toString();
36-
response.setContentLength(responseContent.getBytes(StandardCharsets.UTF_8).length);
37-
response.getWriter().write(responseContent);
36+
byte[] contentBytes = responseContent.getBytes(StandardCharsets.UTF_8);
37+
response.setContentLength(contentBytes.length);
38+
response.getOutputStream().write(contentBytes);
3839
}
3940

4041
}

graphql-java-servlet/src/main/java/graphql/kickstart/servlet/SingleQueryResponseWriter.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,9 @@ public void write(HttpServletRequest request, HttpServletResponse response) thro
2121
response.setStatus(HttpRequestHandler.STATUS_OK);
2222
response.setCharacterEncoding(StandardCharsets.UTF_8.name());
2323
String responseContent = graphQLObjectMapper.serializeResultAsJson(result);
24-
response.setContentLength(responseContent.getBytes(StandardCharsets.UTF_8).length);
25-
response.getWriter().write(responseContent);
24+
byte[] contentBytes = responseContent.getBytes(StandardCharsets.UTF_8);
25+
response.setContentLength(contentBytes.length);
26+
response.getOutputStream().write(contentBytes);
2627
}
2728

2829
}

graphql-java-servlet/src/test/groovy/graphql/kickstart/servlet/SingleQueryResponseWriterTest.groovy

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,10 @@ import org.codehaus.groovy.runtime.StringBufferWriter
77
import spock.lang.Specification
88
import spock.lang.Unroll
99

10+
import javax.servlet.ServletOutputStream
1011
import javax.servlet.http.HttpServletRequest
1112
import javax.servlet.http.HttpServletResponse
13+
import java.nio.charset.StandardCharsets
1214

1315
class SingleQueryResponseWriterTest extends Specification {
1416

@@ -20,18 +22,16 @@ class SingleQueryResponseWriterTest extends Specification {
2022

2123
def requestMock = Mock(HttpServletRequest)
2224
def responseMock = Mock(HttpServletResponse)
25+
responseMock.getOutputStream() >> Mock(ServletOutputStream)
2326

24-
def responseContentBuffer = new StringBuffer()
25-
responseMock.getWriter() >> new PrintWriter(new StringBufferWriter(responseContentBuffer))
2627
1 * responseMock.setContentLength(expectedContentLenght)
27-
1 * responseMock.setCharacterEncoding("UTF-8")
28+
1 * responseMock.setCharacterEncoding(StandardCharsets.UTF_8.name())
29+
1 * responseMock.getOutputStream().write(expectedResponseContent.getBytes(StandardCharsets.UTF_8))
2830

2931
expect:
3032
def writer = new SingleQueryResponseWriter(new ExecutionResultImpl(result, []), graphQLObjectMapperMock)
3133
writer.write(requestMock, responseMock)
3234

33-
responseContentBuffer.toString() == expectedResponseContent
34-
3535
where:
3636
result || expectedContentLenght | expectedResponseContent
3737
[testValue: "abcde"] || 30 | """{"data":{"testValue":"abcde"}}"""

0 commit comments

Comments
 (0)