Skip to content

Commit facd130

Browse files
committed
Handle exceptions in doOptions.
1 parent a314da9 commit facd130

1 file changed

Lines changed: 26 additions & 6 deletions

File tree

server/src/main/java/nl/inl/blacklab/server/BlackLabServer.java

Lines changed: 26 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -204,13 +204,33 @@ protected void doGet(HttpServletRequest request, HttpServletResponse responseObj
204204
}
205205

206206
@Override
207-
protected void doOptions(HttpServletRequest request, HttpServletResponse responseObject)
208-
throws ServletException, IOException {
209-
super.doOptions(request, responseObject);
210-
String allowOrigin = optAddAllowOriginHeader(responseObject);
207+
protected void doOptions(HttpServletRequest request, HttpServletResponse response)
208+
throws IOException {
209+
try {
210+
super.doOptions(request, response);
211+
} catch (ServletException|IOException e) {
212+
DataFormat outputType = ServletUtil.getOutputType(request);
213+
if (outputType == null)
214+
outputType = defaultOutputType;
215+
ApiVersion api = ApiVersion.CURRENT;
216+
DataStream es = DataStreamAbstract.create(outputType, true, api);
217+
es.outputProlog();
218+
ResponseStreamer errorWriter = ResponseStreamer.get(es, api);
219+
int httpCode = Response.error(errorWriter, "INTERNAL_ERROR",
220+
e.getMessage(), null, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, e);
221+
response.setStatus(httpCode);
222+
response.setCharacterEncoding(OUTPUT_ENCODING.name().toLowerCase());
223+
response.setContentType(outputType.getContentType());
224+
optAddAllowOriginHeader(response);
225+
Writer out = new OutputStreamWriter(response.getOutputStream(), OUTPUT_ENCODING);
226+
out.write(es.getOutput());
227+
out.flush();
228+
return;
229+
}
230+
String allowOrigin = optAddAllowOriginHeader(response);
211231
if (allowOrigin != null) {
212-
responseObject.addHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
213-
responseObject.addHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS");
232+
response.addHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
233+
response.addHeader("Access-Control-Allow-Methods", "GET, HEAD, POST, PUT, DELETE, TRACE, OPTIONS");
214234
}
215235
}
216236

0 commit comments

Comments
 (0)