Quantcast
Channel: SCN : All Content - All Communities
Viewing all articles
Browse latest Browse all 3280

Unable to connect to Salesforce using webservices (SOAP protocol)

$
0
0

Hi Team,

 

Our requirement is to consume Sales force WSDL (SOAP) with out PI involvement. We are having two WSDL's, one for Login to Salesforce and second one to exchange data.

We have created consumer service and logical port's. A proxy class with few methods is generated as expected.

The first consumer service for login is working fine. When we login, it returns the session ID which is valid for 2 hours. We tried to pass the session ID using the below code and then call the second service. It then gives error 'INVALID_SESSION_ID: Invalid Session ID found in SessionHeader: Illegal Session'.

 

Could you please let us know what am I missing? Is my approach correct?

Thanks in advance!

 

I have gone through the below links:

Web Services Security using ABAP Proxies

Consume SOAP WebService by SAP and add custom Header - Java Development - SCN Wiki

 

DATA:   lr_login            TYPE REF TO zlogin,

        lr_action           TYPE REF TO zexc,

        ls_request          TYPE        zlogin_request,

        ls_response         TYPE        zlogin_response,

        ls_header           TYPE REF TO if_wsprotocol_ws_header,

        lr_system_fault     TYPE REF TO cx_ai_system_fault,

        lr_flight_not_found TYPE REF TO cx_sxidag_flight_not_found,

        lv_name             TYPE        string,

        lv_namespace        TYPE        string,

        lr_ixml             TYPE REF TO if_ixml,

        lr_xml_document     TYPE REF TO if_ixml_document,

        lr_xml_root         TYPE REF TO if_ixml_element,

        lr_xml_element      TYPE REF TO if_ixml_element,

        lr_xml_node         TYPE REF TO if_ixml_node,

        lv_xstring          TYPE        xstring,

        lv_string           TYPE        string,

        ls_disp_req         TYPE        zexc_reque,

        ls_disp_resp        TYPE        zexc_respo.

 

 

TRY.

    CREATE OBJECT lr_login

      EXPORTING

        logical_port_name = 'ZLOGIN_PORT'.

  CATCH cx_ai_system_fault INTO lr_system_fault.

ENDTRY.

 

 

ls_request-username = 'zzz.abc.com'.

ls_request-password = 'abcde123'.

 

 

TRY.

    CALL METHOD lr_login->login

      EXPORTING

        input  = ls_request

      IMPORTING

        output = ls_response.

  CATCH cx_ai_system_fault INTO lr_system_fault.

    WRITE:/ 'System Fault'(sye). WRITE:/ lr_system_fault->errortext. EXIT.

 

 

  CATCH zsfcx_login_fault .

    WRITE:/ 'Login Fault'. EXIT.

  CATCH zsfcx_unexpected_error_fault .

    WRITE:/ 'Unexpected Error'. EXIT.

  CATCH zsfcx_invalid_id_fault .

    WRITE:/ 'Invalid Fault'. EXIT.

  CATCH cx_ai_application_fault .

    WRITE:/

  'Application fault'(apf).

    EXIT.

 

 

ENDTRY.

 

 

IF ls_response-result-session_id IS NOT INITIAL.

  TRY.

* create instance

      CREATE OBJECT lr_action

        EXPORTING

          logical_port_name = 'ZEXC_PORT'.

* get ws_header protocol

      ls_header ?= lr_action->get_protocol('IF_WSPROTOCOL_WS_HEADER').

 

 

      CONCATENATE

'<Soap:Header>'

'<ns2:session xmlns:ns2="https://salesforce.com/services/Soap/c/00Dc0000003ue9S">'

'<SessionID>'ls_response-result-session_id'</SessionID>'

'</ns2:session>'

'</Soap:Header>'

       INTO lv_string.

* convert to xstring

      lv_xstring = cl_proxy_service=>cstring2xstring( lv_string ).

      IF NOT lv_xstring IS INITIAL.

* create ixml dom document from xml xstring

        CALL FUNCTION 'SDIXML_XML_TO_DOM'

          EXPORTING

            xml           = lv_xstring

          IMPORTING

            document      = lr_xml_document

          EXCEPTIONS

            invalid_input = 1

            OTHERS        = 2.

        IF sy-subrc = 0 AND NOT lr_xml_document IS INITIAL.

          lr_xml_root = lr_xml_document->get_root_element( ).

          lr_xml_element ?= lr_xml_root->get_first_child( ).

* add header element by element to soap header

          WHILE NOT lr_xml_element IS INITIAL.

            lv_name = lr_xml_element->get_name( ).

            lv_namespace = lr_xml_element->get_namespace_uri( ).

            ls_header->set_request_header( name = lv_name namespace = lv_namespace dom = lr_xml_element ).

            lr_xml_element ?= lr_xml_element->get_next( ).

          ENDWHILE.

        ENDIF.

      ENDIF.

* call outbound

 

      ls_disp_req-data-account_phone        = '123-456-7890'.

      ls_disp_req-data-billing_city         = 'HOUSTON'.

      ls_disp_req-data-billing_postal_code  = '77070'.

      ls_disp_req-data-billing_state        = 'TX'.

      ls_disp_req-data-billing_street       = 'Willow Chase'.

      ls_disp_req-data-check                = '34567'.

      ls_disp_req-data-reason_code          = 'Test'.

      ls_disp_req-data-salutation           = 'Mr.'.

      ls_disp_req-data-subject              = 'Amount not received'.

 

      TRY.

          CALL METHOD lr_action->insert_apdispute_case

            EXPORTING

              input  = ls_disp_req

            IMPORTING

              output = ls_disp_resp.

        CATCH cx_ai_system_fault INTO lr_system_fault.

          WRITE:/ 'System Fault'(sye). WRITE:/ lr_system_fault->errortext. EXIT.

        CATCH cx_ai_application_fault .

          WRITE:/

        'Application fault'(apf).

          EXIT.

      ENDTRY.

 

 

    CATCH cx_ai_system_fault INTO lr_system_fault.

      WRITE:/ 'System Fault'(sye). WRITE:/ lr_system_fault->errortext. EXIT.

    CATCH cx_ai_application_fault .

      WRITE:/

    'Application fault'(apf).

      EXIT.

  ENDTRY.

 

ENDIF.

 

Regards,

Aravind


Viewing all articles
Browse latest Browse all 3280

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>