아래의 소스에서 바로 캐치문으로 빠지는데 이유가 뭔가요???
고수님 답변 간절히 기다립니다.
TRY.
amf ?= ch_message. <== 여기에서 바로 catch문으로 빠져요 ㅠㅠ
IF l_msgclass = if_xms_msghdr30_main=>co_msgclass_appack OR l_msgclass = if_xms_msghdr30_main=>co_msgclass_sysack.
lv_pl_id = 'CENTRAL_BACK'.
ELSE.
lv_pl_id = 'CENTRAL'.
ENDIF.
ro->set_external_pl_id( lv_pl_id ).
IF space = ch_message->get_message_format( )
OR if_xms_message_xmb=>co_payload_message = ch_message->get_message_format( ).
RAISE EXCEPTION TYPE cx_sy_move_cast_error.
ENDIF.
TRY.
CASE im_adapter_id.
WHEN if_xms_engine=>co_adapter_process_engine.
CREATE OBJECT enter_xms type cl_xms_amf_inb_persist_bpe
EXPORTING
mmf = amf
pid = lv_pl_id
msg_class = l_msgclass
adp_context = im_adapter_context.
enter_xms->persist_amf( ).
ENDCASE.
CATCH cx_xms_system_error.
ENDTRY.
CATCH cx_sy_move_cast_error.
enter_xms( EXPORTING im_url = lv_url
im_auth_check = im_auth_check
CHANGING ch_message = ch_message ).
ENDTRY.
댓글 3
-
테라스
2009.07.21 21:54
-
coder
2009.07.21 22:46
ch_message가 class나 interface로 선언되어 있을텐데요 amf가 앞의 ch_message를 선언한 클래스나 인터페이스를 상속해서 선언이 되어 있나 확인해보시는 것도 좋은방법일거 같습니다. down casting시 런타임 에러로 보이네요 -
쿨쿨
2009.07.22 11:40
답변 감사합니다. ^-^
원인은 건수가 너무 많아서 생기는 런타임 에러였습니다.
(syncro 는 기본적으로 120초라고 하네요.)
CX_SY_MOVE_CAST_ERROR
Runtime Error: MOVE_CAST_REF_ONLY
도움말에 있는 cx_sy_move_cast_error 에 대한 Exception의 설명입니다.
amf ?= ch_message. 이 문장에서 amf 나 ch_message가 reference variable이 아니라 발생하는 문제라고 하는데
디버깅을 통해 위의 문장에서 ch_message 이 initial 상태인지 확인해보시는게 좋을거 같습니다.