From 21092fc647b5350413542df4ff78b15909698be8 Mon Sep 17 00:00:00 2001 From: Wojciech Szarmach Date: Tue, 24 May 2016 10:51:13 +0200 Subject: [PATCH 1/3] DefaultConnection stream reading fix --- .../acme4j/impl/DefaultConnection.java | 31 +++++++++++++------ .../acme4j/impl/DefaultConnectionTest.java | 12 +++---- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java index 4c80bf5b..214e3f0a 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java @@ -178,11 +178,9 @@ public class DefaultConnection implements Connection { try { InputStream in = (conn.getResponseCode() < 400 ? conn.getInputStream() : conn.getErrorStream()); if (in != null) { - try (BufferedReader r = new BufferedReader(new InputStreamReader(in, "utf-8"))) { - sb.append(r.readLine()); - } + final String response = readStream(in); - result = JsonUtil.parseJson(sb.toString()); + result = JsonUtil.parseJson(response); LOG.debug("Result JSON: {}", sb); } @@ -193,6 +191,21 @@ public class DefaultConnection implements Connection { return result; } + private String readStream(final InputStream in) throws IOException { + final StringBuilder sb = new StringBuilder(); + + try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf-8"))) { + String line = reader.readLine(); + + while (line != null) { + sb.append(line); + line = reader.readLine(); + } + } + + return sb.toString(); + } + @Override public X509Certificate readCertificate() throws IOException { assertConnectionIsOpen(); @@ -220,14 +233,12 @@ public class DefaultConnection implements Connection { } EnumMap resourceMap = new EnumMap<>(Resource.class); - StringBuilder sb = new StringBuilder(); + String response = ""; try { - try (BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream(), "utf-8"))) { - sb.append(reader.readLine()); - } + response = readStream(conn.getInputStream()); - Map result = JsonUtil.parseJson(sb.toString()); + Map result = JsonUtil.parseJson(response); for (Map.Entry entry : result.entrySet()) { Resource res = Resource.parse(entry.getKey()); if (res != null) { @@ -238,7 +249,7 @@ public class DefaultConnection implements Connection { LOG.debug("Resource directory: {}", resourceMap); } catch (JoseException | URISyntaxException ex) { - throw new AcmeProtocolException("Failed to read directory: " + sb, ex); + throw new AcmeProtocolException("Failed to read directory: " + response, ex); } return resourceMap; diff --git a/acme4j-client/src/test/java/org/shredzone/acme4j/impl/DefaultConnectionTest.java b/acme4j-client/src/test/java/org/shredzone/acme4j/impl/DefaultConnectionTest.java index acb6ecc7..8932d146 100644 --- a/acme4j-client/src/test/java/org/shredzone/acme4j/impl/DefaultConnectionTest.java +++ b/acme4j-client/src/test/java/org/shredzone/acme4j/impl/DefaultConnectionTest.java @@ -366,7 +366,7 @@ public class DefaultConnectionTest { */ @Test public void testReadJsonResponse() throws Exception { - String jsonData = "{\"foo\":123,\"bar\":\"a-string\"}"; + String jsonData = "{\n\"foo\":123,\n\"bar\":\"a-string\"\n}\n"; when(mockUrlConnection.getHeaderField("Content-Type")).thenReturn("application/json"); when(mockUrlConnection.getResponseCode()).thenReturn(HttpURLConnection.HTTP_OK); @@ -417,11 +417,11 @@ public class DefaultConnectionTest { @Test public void testReadDirectory() throws Exception { StringBuilder jsonData = new StringBuilder(); - jsonData.append('{'); - jsonData.append("\"new-reg\":\"http://example.com/acme/newreg\","); - jsonData.append("\"new-authz\":\"http://example.com/acme/newauthz\","); - jsonData.append("\"old-foo\":\"http://example.com/acme/oldfoo\""); - jsonData.append('}'); + jsonData.append("{\n"); + jsonData.append("\"new-reg\":\"http://example.com/acme/newreg\",\n"); + jsonData.append("\"new-authz\":\"http://example.com/acme/newauthz\",\n"); + jsonData.append("\"old-foo\":\"http://example.com/acme/oldfoo\"\n"); + jsonData.append("}\n"); when(mockUrlConnection.getHeaderField("Content-Type")).thenReturn("application/json"); when(mockUrlConnection.getInputStream()).thenReturn(new ByteArrayInputStream(jsonData.toString().getBytes("utf-8"))); From 428ca846136f2275ea52efb11af726389391088c Mon Sep 17 00:00:00 2001 From: Wojciech Szarmach Date: Tue, 24 May 2016 10:54:31 +0200 Subject: [PATCH 2/3] Whitespace fix --- .../main/java/org/shredzone/acme4j/impl/DefaultConnection.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java index 214e3f0a..8abd86f0 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java @@ -198,7 +198,7 @@ public class DefaultConnection implements Connection { String line = reader.readLine(); while (line != null) { - sb.append(line); + sb.append(line); line = reader.readLine(); } } From 048994de8e371799a9adf9d292c0f2bd1aeb7ec8 Mon Sep 17 00:00:00 2001 From: Wojciech Szarmach Date: Thu, 2 Jun 2016 14:07:00 +0200 Subject: [PATCH 3/3] Code style issues fix --- .../java/org/shredzone/acme4j/impl/DefaultConnection.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java index 8abd86f0..ea0a7617 100644 --- a/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java +++ b/acme4j-client/src/main/java/org/shredzone/acme4j/impl/DefaultConnection.java @@ -178,7 +178,7 @@ public class DefaultConnection implements Connection { try { InputStream in = (conn.getResponseCode() < 400 ? conn.getInputStream() : conn.getErrorStream()); if (in != null) { - final String response = readStream(in); + String response = readStream(in); result = JsonUtil.parseJson(response); LOG.debug("Result JSON: {}", sb); @@ -191,8 +191,8 @@ public class DefaultConnection implements Connection { return result; } - private String readStream(final InputStream in) throws IOException { - final StringBuilder sb = new StringBuilder(); + private String readStream(InputStream in) throws IOException { + StringBuilder sb = new StringBuilder(); try (BufferedReader reader = new BufferedReader(new InputStreamReader(in, "utf-8"))) { String line = reader.readLine();