sap调用webservice修改代理类中的http header信息


SAP调WebService接口,以XML格式进行传输,添加用户名和密码校验 

webservice 直接生成代理类,验证信息在SOAMANAGER中配置。
验证信息需要额外放在http header 中,查找相关资料后,对于sap自动生成的代理类,还是有一定的自定义空间 。
 
代码示例:
  "转换XML
  DATA: lv_xml1 TYPE xstring.
  DATA: lv_xml2 TYPE string.
  DATA: lt_itab TYPE TABLE OF zsd_dms_sales .
  DATA: lv_oref    TYPE REF TO cx_st_error,
        lv_message TYPE string,
        lv_msg     TYPE string.

  DATA obj_exception TYPE REF TO cx_ai_system_fault.

  "定义接口传输接口
  DATA:ls_input  TYPE zsap_update_order_info_soap_in,
       ls_output TYPE zsap_update_order_info_soap_in.

  "调用DMS接口
  DATA:lv_service       TYPE REF TO zco_sap_interface_soap.
  DATA:lv_sys_exception TYPE REF TO cx_ai_system_fault,
       lv_app_exception TYPE REF TO cx_ai_application_fault.

  DATA:ixml         TYPE REF TO if_ixml,
       xml_document TYPE REF TO if_ixml_document,
       xml_root     TYPE REF TO if_ixml_element,
       xml_element  TYPE REF TO if_ixml_element,
       xml_node     TYPE REF TO if_ixml_node.
  DATA l_xstring TYPE xstring.
  DATA l_string TYPE string.

  DATA: name      TYPE string,
        namespace TYPE string.

  DATA: lr_header TYPE REF TO if_wsprotocol_ws_header.

  DATA:lr_ex_system TYPE REF TO cx_ai_system_fault.
  
  "内表赋值
  
  "将XML转化为内表
  TRY .
      CALL TRANSFORMATION zsd_dms_0001
                    OPTIONS xml_header = 'no'
                    SOURCE zsd_dms_sales = lt_itab
                    RESULT XML lv_xml1.
      "2进制转换XML字符串不乱码
      CALL FUNCTION 'ECATT_CONV_XSTRING_TO_STRING'
        EXPORTING
          im_xstring  = lv_xml1 "二进制字符串
          im_encoding = 'UTF-8'
        IMPORTING
          ex_string   = lv_xml2. "返回的xml字符串
    CATCH cx_st_error INTO lv_oref.
      "传输XML转换错误
      lv_message  = lv_oref->get_text( ) .
      "报错日志保存
  ENDTRY.

  "赋值 XML 文件
  CLEAR:ls_input,ls_output .
  ls_input-xml = lv_xml2 .

  "$. Region BY  添加http herder 验证信息
  TRY.
      CREATE OBJECT lv_service
        EXPORTING
          logical_port_name = 'ZSD01'        "逻辑端(SOAMANAGER)
        EXCEPTIONS
          OTHERS            = 1.
      lr_header ?= lv_service->get_protocol( if_wsprotocol=>ws_header ).
    CATCH cx_ai_system_fault INTO lr_ex_system.
  ENDTRY.

  CLEAR l_string .
  CONCATENATE
  '<soap:Header>'
  '<ser:AuthHeader xmlns:ser="https://testdms.bscwin.com/services">'
  '<ser:User>用户名</ser:User>'
  '<ser:Password>密码</ser:Password>'
  '</ser:AuthHeader>'
  '</soap:Header>'
  INTO l_string.

  "convert to xstring
  CLEAR l_xstring .
  l_xstring = cl_proxy_service=>cstring2xstring( l_string ).
  IF l_string IS NOT INITIAL.
    "create ixml dom document from xml xstring
    CALL FUNCTION 'SDIXML_XML_TO_DOM'
      EXPORTING
        xml           = l_xstring
      IMPORTING
        document      = xml_document
      EXCEPTIONS
        invalid_input = 1
        OTHERS        = 2.
    IF sy-subrc = 0 AND NOT xml_document IS INITIAL.
      xml_root ?= xml_document->get_root_element( ).
      xml_element ?= xml_root->get_first_child( ).

      "add header element by element to soap header
      WHILE xml_element IS NOT INITIAL.
        name = xml_element->get_name( ).
        namespace = xml_element->get_namespace_uri( ).
        lr_header->set_request_header( name = name
                                       namespace = namespace
                                       dom = xml_element  ).
        xml_element ?= xml_element->get_next( ).
      ENDWHILE.
    ENDIF.
  ENDIF.
  "$. Endregion BY 添加http herder 验证信息

  TRY.
      CALL METHOD lv_service->sap_update_order_info
        EXPORTING
          input  = ls_input
        IMPORTING
          output = ls_output.

    CATCH cx_ai_system_fault INTO lv_sys_exception .
      WRITE lv_sys_exception->errortext.
    CATCH cx_ai_application_fault INTO lv_app_exception .

*        WRITE lv_app_exception->textid.

  ENDTRY.

 

参考链接:https://wiki.scn.sap.com/wiki/display/Java/Consume+SOAP+WebService+by+SAP+and+add+custom+Header


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM