http_communication_failure abfangen?

Getting started ... Alles für einen gelungenen Start.
4 Beiträge • Seite 1 von 1
4 Beiträge Seite 1 von 1

http_communication_failure abfangen?

Beitrag von danbrown_1999 (ForumUser / 10 / 5 / 0 ) »
Hi,

bei einem speziellen GET_Request bekomme ich von Zeit zu Zeit die Fehlermeldungen (siehe Screenshot).

Wie fange ich diese denn am besten ab, sodass ich weiß, was schief gelaufen ist?
Ich habe überlegt, das mittels TRY und CATCH zu machen. Aber ich habe noch nie eine Function wie "CL_HTTP_CLIENT===CP" anpassen müssen

Irgendwie ist das nur bei diesem GET_Request der Fall.
Ich schätze, dass von Zeit zur Zeit der SSL-Zertifikat-Dienstleister (cloudflare oder so) da einen Blocker reinhaut und prüft. Und dann wieder rausnimmt.

Hat jemand Erfahrung damit?
Und ein Coding Beispiel für Try und Catch??

Würde folgendes ausreichen?

Code: Alles auswählen.

TRY.

FUNCTION 'XXX'

CATCH <EXCEPTION ID>.

ENDTRY.

gesponsert
Stellenangebote auf ABAPforum.com schalten
kostenfrei für Ausbildungsberufe und Werksstudenten


Re: http_communication_failure abfangen?

Beitrag von a-dead-trousers (Top Expert / 4383 / 222 / 1176 ) »
Die Exception ist doch in der Methodensignatur definiert.
Das einzige was du beachten musst ist, dass es sich um eine "alte" Exception handelt, die man nicht mit TRY ... CATCH abfangen kann, sondern mit dem Zusatz EXCEPTIONS bei CALL METHOD einem Returncode zuordnen musst. Durch abfragen des SY-SUBRC im Anschluss, weißt du weche Exception aufgetreten ist und kannst dann entsprechend reagieren.

lg ADT

Folgende Benutzer bedankten sich beim Autor a-dead-trousers für den Beitrag:
danbrown_1999

Theory is when you know something, but it doesn't work.
Practice is when something works, but you don't know why.
Programmers combine theory and practice: Nothing works and they don't know why.

ECC: 6.18
Basis: 7.50

Re: http_communication_failure abfangen?

Beitrag von danbrown_1999 (ForumUser / 10 / 5 / 0 ) »
a-dead-trousers hat geschrieben:
12.02.2023 09:28
Die Exception ist doch in der Methodensignatur definiert.
Das einzige was du beachten musst ist, dass es sich um eine "alte" Exception handelt, die man nicht mit TRY ... CATCH abfangen kann, sondern mit dem Zusatz EXCEPTIONS bei CALL METHOD einem Returncode zuordnen musst. Durch abfragen des SY-SUBRC im Anschluss, weißt du weche Exception aufgetreten ist und kannst dann entsprechend reagieren.

lg ADT
Hier ist, was ich abfange über Exceptions:

Code: Alles auswählen.

cl_http_client=>create_by_url( EXPORTING
                                url = lv_url
                               IMPORTING
                                 client = o_client
                               EXCEPTIONS
                                 argument_not_found = 1
                                 plugin_not_active = 2
                                 internal_error = 3
                                 others = 4 ).

if sy-subrc <> 0.
  o_client->close( ).
  endif.
und in der "Methodensignatur":

Code: Alles auswählen.

IF subrc = 1.
      RAISE http_communication_failure.
    ELSEIF subrc = 2.
      RAISE http_invalid_state.
    ELSEIF subrc = 3.
      RAISE http_processing_failed.
    ENDIF.
  ENDIF.

Dadurch, dass http_communication_failure erscheint, muss es sich im Code um 1 handeln, richtig?

Ich benutze für hier TRY und CATCH weil ich es woanders gesehen habe.
Sollte ich lieber DO und ENDDO verwenden?

Hintergrund ist, dass diese Funktion/Call/mit Methode aufgerufen wird, wenn ich einen Button betätige. Darauf folgt die TRY...call-Anweisung.

Was wäre denn besser, wenn das eine "veraltet" ist?

Re: http_communication_failure abfangen?

Beitrag von jocoder (Specialist / 342 / 3 / 102 ) »
In ABAP gibt es zwei Arten von Ausnahmen:

1. einmal die klassischen Ausnahmen wie in deinem Beitrag erwähnt. Klassische Ausnahmen werden immer mit RAISE ausgelöst und lassen sich nur mit dem EXCEPTIONS-Zusatz abfangen. Mit TRY-CATCH sind diese Ausnahmen nicht abfangbar. Es handelt sich dabei um einen Return-Code, der nur direkt nach dem Aufruf der Methode/des Funktionsbausteins zur Verfügung steht. Mit diesen Statements wird eine klassische Ausnahmen ausgelöst und abgefangen.

Code: Alles auswählen.

METHOD if_http_client~send.
  " ...
  IF subrc <> 0 OR m_ecode <> 0.
    pf_m_close c_statistic_state 'HTTP Send'.               "#EC *
    RAISE http_communication_failure.
  ENDIF.
ENDMETHOD.

Code: Alles auswählen.

CALL METHOD http_client->send
    EXCEPTIONS
        http_communication_failure = 1
        http_invalid_state         = 2
        http_processing_failed     = 3
        http_invalid_timeout       = 4
        OTHERS                     = 5.
2. die klassenbasierten Ausnahmen. Diese werden mit TRY-CATCH abgefangen und mittels RAISE EXCEPTION TYPE ausgelöst. RAISE EXCEPTION TYPE erzeugt eine Insatz der angegeben Ausnahmeklasse und reicht diese solange im Call-Stack weiter, bis sie mit einem CATCH-Statement abgefangen wird. Ein Beispiel zur Konvertierung von klassischen zu klassenbasierten Ausnahmen ist in der Klasse cl_rest_http_client.

Code: Alles auswählen.

METHOD send_receive.
  " ...
  CALL METHOD mo_http_client->send
      EXCEPTIONS
        http_communication_failure = 1
        http_invalid_state         = 2
        http_processing_failed     = 3
        http_invalid_timeout       = 4
        OTHERS                     = 5.
  IF sy-subrc = 0.
      CALL METHOD mo_http_client->receive
        EXCEPTIONS
          http_communication_failure = 1
          http_invalid_state         = 2
          http_processing_failed     = 3
          OTHERS                     = 5.
    ENDIF.

    CASE sy-subrc.
      WHEN 1.
        RAISE EXCEPTION TYPE cx_rest_client_exception
            EXPORTING
              textid = cx_rest_client_exception=>http_client_comm_failure.
     ENDCASE.
  " ...
ENDMETHOD.
So lässt sich die Ausnahme abfangen.

Code: Alles auswählen.

TRY.
     send_receive( 'GET' ).
  CATCH cx_rest_client_exception INTO exception.
     MESSAGE exception TYPE 'E'.      
ENDTRY.

Folgende Benutzer bedankten sich beim Autor jocoder für den Beitrag:
sap_koun


Seite 1 von 1

Vergleichbare Themen

3
Antw.
1663
Views
SAP ABAP Rest aufruf: http communication failure?
von sap_koun » 29.12.2022 01:03 • Verfasst in ABAP® für Anfänger
1
Antw.
757
Views
.Net communication
von Ben Nibang » 09.08.2005 12:33 • Verfasst in ABAP® Core
1
Antw.
1249
Views
BCS Business Communication Servic; eMail im Eingang/Ausgang
von niko022 » 15.01.2007 16:30 • Verfasst in ABAP Objects®
3
Antw.
7951
Views
HTTP Kommunikation
von macjam » 04.10.2010 10:09 • Verfasst in ABAP® für Anfänger
6
Antw.
8896
Views
HTTP Request
von vagans » 20.10.2011 11:11 • Verfasst in ABAP® Core

Newsletter Anmeldung

Keine Beiträge verpassen! Wöchentlich versenden wir lesenwerte Beiträge aus unserer Community.
Die letzte Ausgabe findest du hier.
Details zum Versandverfahren und zu Ihren Widerrufsmöglichkeiten findest du in unserer Datenschutzerklärung.