Skip to content

Commit 3ca1e63

Browse files
authored
CALL TRANSFORMATION: bugfix xml_header option (#900)
1 parent 1d01db9 commit 3ca1e63

File tree

5 files changed

+36
-8
lines changed

5 files changed

+36
-8
lines changed

src/conv/cl_abap_codepage.clas.abap

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,14 @@ CLASS cl_abap_codepage DEFINITION PUBLIC.
22
PUBLIC SECTION.
33
CLASS-METHODS convert_to
44
IMPORTING
5-
codepage TYPE string OPTIONAL
5+
codepage TYPE string DEFAULT 'UTF-8'
66
source TYPE string
77
RETURNING
88
VALUE(output) TYPE xstring.
99

1010
CLASS-METHODS convert_from
1111
IMPORTING
12-
codepage TYPE string OPTIONAL
12+
codepage TYPE string DEFAULT 'UTF-8'
1313
source TYPE xstring
1414
RETURNING
1515
VALUE(output) TYPE string.
@@ -24,15 +24,15 @@ ENDCLASS.
2424
CLASS cl_abap_codepage IMPLEMENTATION.
2525
METHOD convert_to.
2626
DATA conv TYPE REF TO cl_abap_conv_out_ce.
27-
conv = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
27+
conv = cl_abap_conv_out_ce=>create( encoding = codepage ).
2828
conv->convert( EXPORTING data = source
2929
IMPORTING buffer = output ).
3030
ENDMETHOD.
3131

3232
METHOD convert_from.
3333
DATA conv TYPE REF TO cl_abap_conv_in_ce.
3434
DATA data TYPE string.
35-
conv = cl_abap_conv_in_ce=>create( encoding = 'UTF-8' ).
35+
conv = cl_abap_conv_in_ce=>create( encoding = codepage ).
3636
conv->convert(
3737
EXPORTING input = source
3838
IMPORTING data = output ).

src/conv/cl_abap_conv_in_ce.clas.abap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,9 @@ CLASS cl_abap_conv_in_ce IMPLEMENTATION.
105105
WRITE '@KERNEL const td = new decoder(this.mv_js_encoding.get(), {fatal: this.mv_ignore_cerr.get() !== "X"});'.
106106
WRITE '@KERNEL try {'.
107107
WRITE '@KERNEL data.set(td.decode(buf));'.
108-
WRITE '@KERNEL } catch {'.
108+
WRITE '@KERNEL } catch (e) {'.
109+
WRITE '@KERNEL console.dir(e);'.
110+
WRITE '@KERNEL console.dir(this.mv_js_encoding.get());'.
109111
lv_error = abap_true.
110112
WRITE '@KERNEL }'.
111113

src/kernel/call_transformation/kernel_call_transformation.clas.abap

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ CLASS kernel_call_transformation IMPLEMENTATION.
104104
WRITE '@KERNEL }'.
105105
WRITE '@KERNEL }'.
106106
IF lv_result = abap_true.
107-
lv_result = lcl_string_to_string=>run( lv_dummy ).
107+
lv_result = lcl_string_to_string=>run(
108+
source = lv_dummy
109+
options = ms_options ).
108110
WRITE '@KERNEL INPUT.resultXML.set(lv_result);'.
109111
RETURN.
110112
ENDIF.

src/kernel/call_transformation/kernel_call_transformation.clas.locals_imp.abap

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -541,6 +541,7 @@ CLASS lcl_string_to_string DEFINITION.
541541
CLASS-METHODS run
542542
IMPORTING
543543
source TYPE any
544+
options TYPE kernel_call_transformation=>ty_options
544545
RETURNING
545546
VALUE(result) TYPE string.
546547
ENDCLASS.
@@ -549,5 +550,9 @@ CLASS lcl_string_to_string IMPLEMENTATION.
549550
METHOD run.
550551
* this is not right, but works for the unit test
551552
WRITE '@KERNEL result.set(INPUT.source.get());'.
553+
554+
IF options-xml_header = 'no'.
555+
REPLACE FIRST OCCURRENCE OF REGEX '<?.*?>' IN result WITH ''.
556+
ENDIF.
552557
ENDMETHOD.
553558
ENDCLASS.

src/kernel/call_transformation/kernel_call_transformation.clas.testclasses.abap

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,7 @@ CLASS ltcl_call_transformation DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATI
127127
METHODS suppress2 FOR TESTING RAISING cx_static_check.
128128
METHODS suppress3 FOR TESTING RAISING cx_static_check.
129129
METHODS xml_to_xml FOR TESTING RAISING cx_static_check.
130+
METHODS xml_to_xml_rm_header FOR TESTING RAISING cx_static_check.
130131
ENDCLASS.
131132

132133
CLASS ltcl_call_transformation IMPLEMENTATION.
@@ -1090,8 +1091,7 @@ CLASS ltcl_call_transformation IMPLEMENTATION.
10901091

10911092
CALL TRANSFORMATION id
10921093
SOURCE XML lv_xml
1093-
RESULT XML lv_xml
1094-
OPTIONS xml_header = 'no'.
1094+
RESULT XML lv_xml.
10951095

10961096
* there might be a byte order mark,
10971097
cl_abap_unit_assert=>assert_char_cp(
@@ -1100,4 +1100,23 @@ CLASS ltcl_call_transformation IMPLEMENTATION.
11001100

11011101
ENDMETHOD.
11021102

1103+
METHOD xml_to_xml_rm_header.
1104+
1105+
DATA lv_xml TYPE string.
1106+
DATA lv_bom TYPE xstring.
1107+
1108+
lv_xml = |<?xml version="1.0" encoding="UTF-8" standalone="yes" ?><foo>2</foo>|.
1109+
CALL TRANSFORMATION id SOURCE XML lv_xml RESULT XML lv_xml OPTIONS xml_header = 'no'.
1110+
1111+
lv_bom = cl_abap_char_utilities=>byte_order_mark_little.
1112+
REPLACE FIRST OCCURRENCE OF cl_abap_codepage=>convert_from(
1113+
source = lv_bom
1114+
codepage = 'UTF-16' ) IN lv_xml WITH ''.
1115+
1116+
cl_abap_unit_assert=>assert_equals(
1117+
act = lv_xml
1118+
exp = '<foo>2</foo>' ).
1119+
1120+
ENDMETHOD.
1121+
11031122
ENDCLASS.

0 commit comments

Comments
 (0)