Quellcode durchsuchen

LfsProtocolServlet: Reuse existing Writer when sending error response

Trying to open a new writer on the response causes an illegal state
exception and the response is not sent.

Change-Id: Ic718d23cfb3e74f5691cc2aea7283003af7df207
Signed-off-by: David Pursehouse <david.pursehouse@gmail.com>
tags/v4.5.0.201609210915-r
David Pursehouse vor 7 Jahren
Ursprung
Commit
4651d6e723

+ 19
- 27
org.eclipse.jgit.lfs.server/src/org/eclipse/jgit/lfs/server/LfsProtocolServlet.java Datei anzeigen

@@ -54,7 +54,6 @@ import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Reader;
import java.io.Writer;
import java.util.List;
@@ -139,37 +138,34 @@ public abstract class LfsProtocolServlet extends HttpServlet {
Writer w = new BufferedWriter(
new OutputStreamWriter(res.getOutputStream(), UTF_8));

Reader r = new BufferedReader(new InputStreamReader(req.getInputStream(), UTF_8));
Reader r = new BufferedReader(
new InputStreamReader(req.getInputStream(), UTF_8));
LfsRequest request = gson.fromJson(r, LfsRequest.class);
String path = req.getPathInfo();

LargeFileRepository repo = null;
try {
repo = getLargeFileRepository(request, path);
if (repo == null) {
res.setStatus(SC_SERVICE_UNAVAILABLE);
} else {
res.setStatus(SC_OK);
res.setContentType(CONTENTTYPE_VND_GIT_LFS_JSON);
TransferHandler handler = TransferHandler
.forOperation(request.operation, repo, request.objects);
gson.toJson(handler.process(), w);
}
} catch (LfsValidationError e) {
sendError(res, SC_UNPROCESSABLE_ENTITY, e.getMessage());
return;
sendError(res, w, SC_UNPROCESSABLE_ENTITY, e.getMessage());
} catch (LfsRepositoryNotFound e) {
sendError(res, SC_NOT_FOUND, e.getMessage());
return;
sendError(res, w, SC_NOT_FOUND, e.getMessage());
} catch (LfsRepositoryReadOnly e) {
sendError(res, SC_FORBIDDEN, e.getMessage());
return;
sendError(res, w, SC_FORBIDDEN, e.getMessage());
} catch (LfsException e) {
sendError(res, SC_SERVICE_UNAVAILABLE, e.getMessage());
return;
sendError(res, w, SC_SERVICE_UNAVAILABLE, e.getMessage());
} finally {
w.flush();
}
if (repo == null) {
res.setStatus(SC_SERVICE_UNAVAILABLE);
return;
}

res.setStatus(SC_OK);
res.setContentType(CONTENTTYPE_VND_GIT_LFS_JSON);
TransferHandler handler = TransferHandler
.forOperation(request.operation, repo, request.objects);
gson.toJson(handler.process(), w);
w.flush();
}

static class Error {
@@ -180,14 +176,10 @@ public abstract class LfsProtocolServlet extends HttpServlet {
}
}

private void sendError(HttpServletResponse rsp, int status, String message)
throws IOException {
private void sendError(HttpServletResponse rsp, Writer writer, int status,
String message) {
rsp.setStatus(status);
PrintWriter writer = rsp.getWriter();
gson.toJson(new Error(message), writer);
writer.flush();
writer.close();
rsp.flushBuffer();
}

private Gson createGson() {

Laden…
Abbrechen
Speichern