Merged API-STRIKES-BACK (5.2.0) to HEAD (5.2)

125551 gjames: RA-652: Stack traces not returned, but in the log.


git-svn-id: https://svn.alfresco.com/repos/alfresco-enterprise/alfresco/HEAD/root@127535 c4b6b30b-aa2e-2d43-bbcb-ca4b014f7261
This commit is contained in:
Jamal Kaabi-Mofrad
2016-06-02 21:19:20 +00:00
parent de7b79f001
commit 9472ad7d30
3 changed files with 44 additions and 19 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright (C) 2005-2015 Alfresco Software Limited.
* Copyright (C) 2005-2016 Alfresco Software Limited.
*
* This file is part of Alfresco
*
@@ -33,8 +33,11 @@ import org.alfresco.rest.framework.jacksonextensions.JacksonHelper.Writer;
import org.alfresco.rest.framework.resource.content.ContentInfo;
import org.alfresco.rest.framework.resource.content.ContentInfoImpl;
import org.alfresco.service.transaction.TransactionService;
import org.alfresco.util.GUID;
import org.alfresco.util.TempFileProvider;
import org.apache.chemistry.opencmis.server.shared.ThresholdOutputStreamFactory;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.map.JsonMappingException;
@@ -57,6 +60,7 @@ import org.springframework.extensions.webscripts.servlet.WebScriptServletRespons
*/
public abstract class ApiWebScript extends AbstractWebScript
{
private static Log logger = LogFactory.getLog(ApiWebScript.class);
protected JacksonHelper jsonHelper;
ExceptionResolver<Exception> defaultResolver = new DefaultExceptionResolver();
ExceptionResolver<Exception> resolver;
@@ -201,15 +205,27 @@ public abstract class ApiWebScript extends AbstractWebScript
* @param res web script response
* @throws IOException
*/
public void renderErrorResponse(final ErrorResponse errorResponse, final WebScriptResponse res) throws IOException {
errorResponse.setDescriptionURL(DefaultExceptionResolver.ERROR_URL);
public void renderErrorResponse(ErrorResponse errorResponse, final WebScriptResponse res) throws IOException {
String errorKey = errorResponse.getErrorKey();
if (logger.isDebugEnabled())
{
errorKey = GUID.generate();
logger.debug(errorKey+" : ApiWebScript : "+errorResponse.getStackTrace());
}
final ErrorResponse errorToWrite = new ErrorResponse(errorKey,
errorResponse.getStatusCode(),
errorResponse.getBriefSummary(),
DefaultExceptionResolver.ERROR_URL,
errorResponse.getAdditionalState());
setContentInfoOnResponse(res, DEFAULT_JSON_CONTENT);
// Status must be set before the response is written by Jackson (which will by default close and commit the response).
// In a r/w txn, web script buffered responses ensure that it doesn't really matter but for r/o txns this is important.
res.setStatus(errorResponse.getStatusCode());
res.setStatus(errorToWrite.getStatusCode());
jsonHelper.withWriter(res.getOutputStream(), new Writer()
{
@@ -219,7 +235,7 @@ public abstract class ApiWebScript extends AbstractWebScript
throws JsonGenerationException, JsonMappingException, IOException
{
JSONObject obj = new JSONObject();
obj.put("error", errorResponse);
obj.put("error", errorToWrite);
objectMapper.writeValue(generator, obj);
}
});