Skip to content
Snippets Groups Projects
TAP.java 39.2 KiB
Newer Older
  • Learn to ignore specific revisions
  • 			 *   Since the error is known, it is supposed to have already been logged with a full stack trace. Thus, there
    
    			 * is no need to log again its stack trace...just its message is logged.
    
    			 */
    			// Write the error in the response and return the appropriate HTTP status code:
    			errorWriter.writeError(te, response, request, reqID, user, resourceName);
    			// Log the error:
    			getLogger().logHttp(LogLevel.ERROR, response, reqID, user, "TAP resource \"" + resourceName + "\" execution FAILED with the error: \"" + te.getMessage() + "\"!", null);
    
    		}catch(IllegalStateException ise){
    			/*
    			 *   Any IllegalStateException that reaches this point, is supposed coming from a HttpServletResponse operation which
    			 * has to reset the response buffer (e.g. resetBuffer(), sendRedirect(), sendError()).
    			 *   If this exception happens, the library tried to rewrite the HTTP response body with a message or a result,
    			 * while this body has already been partially sent to the client. It is then no longer possible to change its content.
    			 *   Consequently, the error is logged as FATAL and a message will be appended at the end of the already submitted response
    
    			 * to alert the HTTP client that an error occurs and the response should not be considered as complete and reliable.
    
    			 */
    			// Write the error in the response and return the appropriate HTTP status code:
    			errorWriter.writeError(ise, response, request, reqID, user, resourceName);
    			// Log the error:
    			getLogger().logHttp(LogLevel.FATAL, response, reqID, user, "HTTP response already partially committed => the TAP resource \"" + resourceName + "\" has stopped and the body of the HTTP response can not have been partially or completely written!", (ise.getCause() != null) ? ise.getCause() : ise);
    
    			/*
    			 *   Any other error is considered as unexpected if it reaches this point. Consequently, it has not yet been logged.
    			 * So its stack trace will be fully logged, and an appropriate message will be returned to the HTTP client. The
    			 * returned XML document should contain not too technical information which would be useless for the user.
    			 */
    			// Write the error in the response and return the appropriate HTTP status code:
    			errorWriter.writeError(t, response, request, reqID, user, resourceName);
    			// Log the error:
    			getLogger().logHttp(LogLevel.FATAL, response, reqID, user, "TAP resource \"" + resourceName + "\" execution FAILED with a GRAVE error!", t);
    
    
    			// Notify the queue of the asynchronous jobs that a new connection may be available:
    			if (resourceName.equalsIgnoreCase(Sync.RESOURCE_NAME))
    
    				getASync().freeConnectionAvailable();