RPC-XML-Webservice in SAP

WAS, Netweaver®
5 Beiträge • Seite 1 von 1
5 Beiträge Seite 1 von 1

RPC-XML-Webservice in SAP

Beitrag von ken (ForumUser / 3 / 0 / 0 ) »
Hallo,

ich möchte von SAP aus einen externen dienstanbieter ansprechen.

Der bietet aber eine RPC_XML-Schnittstelle, die ja keine WSDL braucht.

Zweitens ist das eine HTTPS-Protkoll.

welche Methode bietet mir SAP an dieser Stelle.

ich habe mir die Methode cl_http_client=>create angeschaut, der liefert einen Client, daraus ich request und response instanzieren kann.

Scheint aber nicht der richtige Weg zu sein, da ich keine Möglichkeit gefunden habe, die name der Methode einzu geben, die ich auf des externen Servers ausführen möchte und in Response gibt es keine Möglichkeit das Ergebnis abzufangen.

Kann mir jemand helfen.

Grüße

Armin

In java habe ich die Verbindung hergestellt:

Authenticator.setDefault(new ProxyAuthenticator("user", "pwd"));

XmlRpcClientConfigImpl config = new XmlRpcClientConfigImpl();

try {
config.setServerURL(new URL(Url-Adresse));
config.setBasicUserName(benutzerUser);
config.setBasicPassword("benutzerPwd");
} catch (MalformedURLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
XmlRpcClient client = new XmlRpcClient();

client.setConfig(config);

XmlRpcCommonsTransportFactory transportFactory = new XmlRpcCommonsTransportFactory( client );
HttpClient httpClient = new HttpClient();


HostConfiguration hostConfiguration = httpClient.getHostConfiguration();

try {
Object result =
client.execute("Name der externen Methode", param);
System.out.println("Echo: " + result);
} catch (Exception e) {
e.printStackTrace();
}

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


Re: RPC-XML-Webservice in SAP

Beitrag von Azreal (Specialist / 182 / 1 / 0 ) »
Servus Ken,
cl_http_client ist soweit nicht verkehrt. Das HTTP Headerfeld SOAP Action sollte die Methode setzen.
Etwas kniffliger wird es, wenn die Methode noch Eingabeparameter hat.

Code: Alles auswählen.

CALL METHOD HTTP_CLIENT->REQUEST->SET_HEADER_FIELD
  EXPORTING
    NAME  = 'SOAPAction'
    VALUE = 'https://www.abapforum.com/webservices/GetPost'.
Mit WSDL gehts auch über Proxy generierung: http://help.sap.com/saphelp_nw2004s/hel ... ameset.htm

Gruß Aze

Re: RPC-XML-Webservice in SAP

Beitrag von ken (ForumUser / 3 / 0 / 0 ) »
Hallo Azreal,

danke für deine Antwort.

sollte man bei SoapAction die komplette Url samt methodenname einsetzen oder reicht es ja auch mit Methodenname.

Du hast richtig geraten, die Methode hat ja auch Parameter (in java benutzte ich dafür Hashmap).

Wie gebe ich die Parameter der Methode bei Abap rüber.

Ich habe versucht die Schnittstelle anzusprechen und bekomme über die Methode get_cdata folgende Meldung:

#<html># <head><title>405 - Method Not Allowed</title></head># <body># <h1>Method Not Allowed</h1># <p>Your browser approached me (at /pfadpräfix ohne Methodenname) with the method "GET". I only allow the method POST here.</p># </body>#</html>#

wie kann ich auf Post umstellen.

Das ist für mich als ob Abap die Browser simulieren möchte und zeigt genau der Response an, was ich ja auch in Browser sehen würde.

Über welche Methode oder Parameter kann ich mir das Ergebnis afangen.

viele Fragen und keine Antwort,


Grüße

Armin

Re: RPC-XML-Webservice in SAP

Beitrag von JHM (Top Expert / 1197 / 1 / 197 ) »
ken hat geschrieben:Wie gebe ich die Parameter der Methode bei Abap rüber.

Code: Alles auswählen.

*  Parameterfelder
  lv_dummy = p_user.
  gr_client->request->set_form_field( name  = 'usr'
                                      value = lv_dummy ).
ken hat geschrieben: wie kann ich auf Post umstellen.

Code: Alles auswählen.

* POST kein GET
  CALL METHOD gr_client->request->set_header_field
    EXPORTING
      name  = '~request_method'
      value = 'POST'.
ken hat geschrieben: Über welche Methode oder Parameter kann ich mir das Ergebnis afangen.

Code: Alles auswählen.

* Antwort hohlen
  CALL METHOD gr_client->receive
    EXCEPTIONS
      http_communication_failure = 1
      http_invalid_state         = 2
      http_processing_failed     = 3
      OTHERS                     = 4.

  IF sy-subrc <> 0.
    PERFORM get_last_error USING 'receive'
                                 gr_client
                           CHANGING gv_rc.
    STOP.
  ELSE.
    CALL METHOD gr_client->response->get_header_fields
      CHANGING
        fields = gt_fields.

    READ TABLE gt_fields INTO gs_fields WITH KEY name = '~status_code'.

    IF gs_fields-value(1) <> '2'.
      WRITE: / 'Fehler bei get data:', gs_fields-value.
      STOP.
    ENDIF.
  ENDIF.

* Ergebnis hohlen
  gv_data = gr_client->response->get_cdata(  ).

**********************************************************************
FORM get_last_error  USING    pv_type   TYPE t_char_field
                              pr_client TYPE REF TO if_http_client
                     CHANGING pv_rc     TYPE sy-subrc.

  DATA: lv_dummy TYPE string.

  CALL METHOD pr_client->get_last_error
    IMPORTING
      code    = pv_rc
      MESSAGE = lv_dummy.

  WRITE: / 'communication_error(', pv_type, ')',
         / 'code: ', pv_rc, 'message: ', lv_dummy.

ENDFORM.                    " GET_LAST_ERROR
Es gibt auch von SAP ein gutes Demoprogramm, das finde ich zur Zeit leider nicht.
Gruß Hendrik

Re: RPC-XML-Webservice in SAP

Beitrag von ken (ForumUser / 3 / 0 / 0 ) »
Danke,

das Problem ist gelöst.

ich packe die Daten in Xml-format in http_client->request->set_cdata (sollte natürlich so aussehen, wei der Server ja auch erwartet)

und packe sie in response->get_cdata() aus.


CALL METHOD http_client->request->set_header_field EXPORTING name = '~request_method' value = 'POST'.

CALL METHOD http_client->request->set_header_field EXPORTING name = '~server_protocol' value = 'HTTP/1.1'.

CALL METHOD http_client->request->set_header_field EXPORTING name = '~request_uri' value = 'your_uri'.

CALL METHOD http_client->request->set_header_field EXPORTING name = 'Content-Type' value = 'text/xml; charset=utf-8'.

CALL METHOD http_client->request->set_header_field EXPORTING name = 'Content-Length' value = txlen.

CALL METHOD http_client->request->set_header_field EXPORTING
name = 'SOAPAction' value = 'https://zielmachine/methodenname'.

CALL METHOD http_client->request->set_cdata EXPORTING data = wf_string offset = 0 length = len.

CALL METHOD http_client->send EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2.

CALL METHOD http_client->receive EXCEPTIONS http_communication_failure = 1 http_invalid_state = 2 http_processing_failed = 3.

CLEAR wf_string .

wf_string = http_client->response->get_cdata( ).


grüß

AKEN

Seite 1 von 1

Vergleichbare Themen

0
Antw.
2007
Views
Webservice aufrufen aus 4.6C?
von Janosch2 » 21.06.2005 11:16 • Verfasst in Web Application Server
1
Antw.
473
Views
Probleme bei Webservice
von Ingo » 09.02.2021 15:23 • Verfasst in ABAP® Core
0
Antw.
1568
Views
Von BAPI zu WebService?
von reini69 » 08.07.2008 11:34 • Verfasst in ABAP® Core
0
Antw.
2879
Views
Webservice & Transporte
von debianfan » 07.06.2017 11:02 • Verfasst in Web Application Server
0
Antw.
1078
Views
Webservice Technologie
von Pascal_ » 14.03.2007 20:35 • Verfasst in Basis

Über diesen Beitrag


Unterstütze die Community und teile den Beitrag für mehr Leser und Austausch

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.

Unbeantwortete Forenbeiträge

Daten an Tabelle binden
vor 2 Tagen von Bright4.5 1 / 603
aRFC im OO-Kontext
vor 4 Wochen von ralf.wenzel 1 / 2232
Hilfe bei SWEC/SWE2
letzen Monat von retsch 1 / 8825