Skip to content

Commit bc7d68d

Browse files
committed
Adds handling for response that contain no content.
1 parent e1aea90 commit bc7d68d

File tree

1 file changed

+34
-14
lines changed

1 file changed

+34
-14
lines changed

libs/sparkpost-lib/src/main/java/com/sparkpost/transport/RestConnection.java

Lines changed: 34 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -12,17 +12,17 @@
1212
import java.net.ProtocolException;
1313
import java.net.URL;
1414

15-
import com.sparkpost.exception.SparkPostErrorServerResponseException;
1615
import org.apache.commons.codec.binary.Base64;
1716
import org.apache.commons.lang3.StringUtils;
1817
import org.apache.log4j.Logger;
1918

2019
import com.sparkpost.Build;
2120
import com.sparkpost.Client;
22-
import com.sparkpost.exception.SparkPostException;
23-
import com.sparkpost.exception.SparkPostIllegalServerResponseException;
2421
import com.sparkpost.exception.SparkPostAccessForbiddenException;
2522
import com.sparkpost.exception.SparkPostAuthorizationFailedException;
23+
import com.sparkpost.exception.SparkPostErrorServerResponseException;
24+
import com.sparkpost.exception.SparkPostException;
25+
import com.sparkpost.exception.SparkPostIllegalServerResponseException;
2626
import com.sparkpost.model.responses.Response;
2727

2828
/**
@@ -236,6 +236,14 @@ private void sendRequest(HttpURLConnection conn, String data, Response response)
236236
// Read response body from server
237237
private Response receiveResponse(HttpURLConnection conn, Response response) throws SparkPostException {
238238

239+
try {
240+
if (conn.getResponseCode() == 204 || conn.getContentLength() == 0) {
241+
return receiveEmptyResponse(conn, response);
242+
}
243+
} catch (IOException e) {
244+
throw new SparkPostIllegalServerResponseException("Unexpected error (" + e.getMessage() + ")");
245+
}
246+
239247
if (!conn.getContentType().toLowerCase().startsWith("application/json")) {
240248
throw new SparkPostIllegalServerResponseException("Unexpected content type (" + conn.getContentType() + ") from " + conn.getURL());
241249
}
@@ -263,33 +271,45 @@ private Response receiveResponse(HttpURLConnection conn, Response response) thro
263271
response.setResponseBody("");
264272
} catch (IOException ex) {
265273
String line = "";
266-
try (BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getErrorStream(), DEFAULT_CHARSET))) {
267274

268-
while ((line = rd.readLine()) != null) {
269-
sb.append(line);
270-
}
275+
try {
271276

272-
response.setResponseBody(sb.toString());
273-
response.setRequestId(conn.getHeaderField("X-SparkPost-Request-Id"));
277+
try (BufferedReader rd = new BufferedReader(new InputStreamReader(conn.getErrorStream(), DEFAULT_CHARSET))) {
278+
279+
while ((line = rd.readLine()) != null) {
280+
sb.append(line);
281+
}
282+
283+
response.setResponseBody(sb.toString());
284+
response.setRequestId(conn.getHeaderField("X-SparkPost-Request-Id"));
274285

275-
logger.error("Server Response:\n" + sb.toString() + "\n");
286+
logger.error("Server Response:\n" + sb.toString() + "\n");
276287

277-
} catch (IOException ex2) {
278-
// Ignore we are going to throw an exception anyway
288+
} catch (IOException ex2) {
289+
// Ignore we are going to throw an exception anyway
290+
}
291+
} catch (Exception e) {
292+
// Log but ignore we are going to throw an exception anyway
293+
logger.error("Error while handlign an HTTP response error. Ignoring and will use orginal exception", e);
279294
}
295+
280296
if (logger.isDebugEnabled()) {
281297
logger.error("Server Response:" + response);
282298
}
283299

284300
throw new SparkPostErrorServerResponseException(
285301
"Error reading server response: " + ex.toString() + ": " + sb.toString() + "(" + response.getResponseMessage() + ")",
286-
response.getResponseCode()
287-
);
302+
response.getResponseCode());
288303
}
289304
return response;
290305

291306
}
292307

308+
private Response receiveEmptyResponse(HttpURLConnection conn, Response response) throws SparkPostException {
309+
response.setRequestId(conn.getHeaderField("X-SparkPost-Request-Id"));
310+
return response;
311+
}
312+
293313
// This method actually performs an HTTP request.
294314
// It is called by get(), put(), post() and delete() below
295315
private Response doHttpMethod(String path, Method method, String data, Response response) throws SparkPostException {

0 commit comments

Comments
 (0)