ich habe einen SOAP Aufruf für ein Archivsystem programmiert und bekomme auch eine Nachricht wieder. Als Anhang im Bereich Content unter dem Body Bereich der SOAP-Response
bekomme ich das komplette PDF-Dokument in Binär Daten zurück.
Meine Frage:
Wie kann ich nur den Content Bereich einer SOAP Nachricht lesen ohne Body und Header Daten?
Ich benutze für Aufruf und Empfang Methoden der Interface: IF_HTTP_REQUEST(Aufruf) IF_HTTP_RESPONSE(Antwort)
Ich vermute du verwendest die ARCHIVELINK-Bausteine oder?
Damit nur der Content-Abschnitt zurückgelierfert wird, musst du glaub ich den Aufruf zum Archiv (SOAP URL) entweder mit "get" oder mit "docGet" durchführen.
Dann sollte nur der Content-Abschnitt daherkommen.
Alternativ kannst du dir ja den Content-Bereich von den Gesamt-Daten "abzwicken".
Einfach alles VOR der Zeile -- weglassen.
Ebenfalls auch alles nach der abschließenden Zeile mit -- weglassen.
Übrigens handelt es sich bei den Daten vor dem Content um den Response-Header.
Weitere Infos gibts in der SAP Content Server HTTP 4.5 Schnittstellen Beschreibung.
Link weiß ich jetzt leider keinen, aber wenn du willst kann ich dir das PDF dazu schicken.
lg ADT
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.
danke für die Antwort! Archive Link hat damit nichts zu tun. Das Archivsystem ist nicht mit dem SAP verbunden, sondern liegt komplett
außerhalb. In den bereitgestellten Funktionen dieses Archivsystems gibt es leider keine Methode DocGet o. ä.! Es gibt nur GetFull
und diese liefert mir als einzige diesen SOAP Response.
Abzwicken ist bei einer internen Tabelle im XSTRING Format natürlich schwierig und beim Unkonvertieren werden diverse Zeichen falsch
dargestellt.
Bei den Methoden habe ich nur die des IF_HTTP_RESPONSE zur Verfügung!
Bezieht sich die Beschreibung nur auf Archive Link?
Da kommen die Daten von Haus aus als Text an.
Daher ist es relativ einfach möglich den Text-Abschnitt vor den eigentlichen Nutzdaten zu entfernen.
Du könntest aber noch etwas versuchen:
Mit der Klasse CL_ABAP_CONV_IN_CE kann man die XSTRING Daten ohne Konvertierung der Codepage in STRING umwandeln. Dann kannst du die Daten mit einem normalen Textsearch und -replace bearbeiten und schließlich mit CL_ABAP_CONV_OUT_CE wieder in XSTRING umwandeln.
Alternativ (glaub erst ab Basis 7.0) kann man den FIND Befehl mit dem Zusatz IN BYTE MODE verwenden um den Beginn des Content Bereiches zu ermitteln bzw. das Ende des Response-Headers. Natürlich muss dann der Suchtext als Hex-Wert vorliegen.
lg ADT
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.
Mit cl_abap_conv_in_ce=>create( ) eine Instanz erzeugen und mit der Methode CONVERT von XSTRING auf STRING konvertieren.
lg ADT
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.