in src/zgoog_cl_content_repo_gcs.clas.abap [0:0]
METHOD report_error.
DATA lv_mandt TYPE string.
DATA lv_realm TYPE string.
DATA lv_error_message TYPE string.
IF gs_error-status_code IS INITIAL.
gs_error-status_code = 500.
ENDIF.
IF gs_error-status_text IS INITIAL.
CASE gs_error-status_code.
WHEN 200. gs_error-status_text = 'ok' ##NO_TEXT.
WHEN 201. gs_error-status_text = 'created' ##NO_TEXT.
WHEN 250. gs_error-status_text = 'missing documents created' ##NO_TEXT.
WHEN 400. gs_error-status_text = 'bad request' ##NO_TEXT.
WHEN 401. gs_error-status_text = 'unauthorized' ##NO_TEXT.
WHEN 403. gs_error-status_text = 'forbidden' ##NO_TEXT.
WHEN 404. gs_error-status_text = 'not found' ##NO_TEXT.
WHEN 406. gs_error-status_text = 'not acceptable' ##NO_TEXT.
WHEN 409. gs_error-status_text = 'conflict' ##NO_TEXT.
WHEN 500. gs_error-status_text = 'internal server error' ##NO_TEXT.
WHEN OTHERS.
gs_error-status_text = gs_error-status_code.
CONCATENATE
'http error:' gv_sp gs_error-status_text
INTO gs_error-status_text ##NO_TEXT.
ENDCASE.
ENDIF.
IF gs_error-set_authenticate = 'X'.
lv_mandt = gv_mandt.
CONCATENATE 'Basic realm="SAP R/3 [' sy-sysid ']"' INTO lv_realm ##NO_TEXT.
go_server->response->set_header_field( name = 'WWW-Authenticate' ##NO_TEXT
value = lv_realm ) ##NO_TEXT.
go_server->response->set_header_field( name = 'SAP-Client' ##NO_TEXT
value = lv_mandt ) ##NO_TEXT.
ENDIF.
IF gs_error-msgid IS NOT INITIAL.
MESSAGE ID gs_error-msgid TYPE gs_error-msgty NUMBER gs_error-msgno
WITH gs_error-msgv1 gs_error-msgv2 gs_error-msgv3 gs_error-msgv4
INTO lv_error_message.
ENDIF.
IF lv_error_message IS INITIAL.
lv_error_message = gs_error-status_text.
ENDIF.
go_server->response->set_status( code = gs_error-status_code
reason = gs_error-status_text ).
" Avoid control characters in output
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN lv_error_message WITH '<CRLF>'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN lv_error_message WITH '<LF>'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>form_feed IN lv_error_message WITH '<FF>'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>backspace IN lv_error_message WITH '<BS>'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>horizontal_tab IN lv_error_message WITH '<TAB>'.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>vertical_tab IN lv_error_message WITH '<VT>'.
" Set X-ErrorDescription
go_server->response->set_header_field( name = 'X-ErrorDescription'
value = lv_error_message ) ##NO_TEXT.
" New XSS handling
lv_error_message = escape( val = lv_error_message
format = cl_abap_format=>e_xss_ml ).
" Set body
go_server->response->set_cdata( data = lv_error_message ).
" Set content type
go_server->response->set_header_field( name = 'Content-Type'
value = 'text/html' ) ##NO_TEXT.