[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jun 2013
    Beiträge
    69

    Post IBM REST Web Service mit VarUCS2

    Hallo Zusammen,

    ich bin aktuell dabei ein RPGLE als REST Web Service bereit zustellen.

    Mein RPG hat 2 Parameter

    Code:
           Dcl-Pi *N;          
              iXml   VarChar(999999);
              output VarChar(9999999);
           End-Pi;
    Ich bekomme ein XML rein und gebe ein XML zurück.

    Wenn ich nun aber die Parameter auf VarUCS2 ändere bekomme ich immer nur die ersten 512 Stellen der Output Variable zurück.

    Geht das einfach nicht oder muss ich da etwas anders machen?

    Maschine
    V7R4
    TR 5

    MfG
    Malte

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    UCS2 wird für WEB-API's nicht unterstützt, da XML's nur Textcodierungen wie z.B. UTF8 enthalten. Stichwort XML-Encoding im XML-Header (Processinginstructions).
    Du kannst also nur Daten mit Codepage 1208 (UTF8) von einem Webserver bekommen, da UCS2 ein 2-Byte-Zeichensatz ist, und somit X'00nn'-Zeichen enthält, die im XML nicht unterstützt werden.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Jun 2013
    Beiträge
    69
    Danke für die Schnelle Antwort.
    So ein bisschen scheint es ja noch zu Funktionieren da ja die ersten Zeichen erfolgreich übertragen werden

    Aber wenn ich den Web Service mit CCSID(*UTF8) an den Parametern definiere sollte es ja ohne Probleme funktionieren ?

    Mein Problem sind nämlich Sonderzeichen in einem Kommentarfeld welche mir dann beim auslesen der XML Probleme bereitet.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Probiers doch einfach mal aus.
    Über SQL kann man dann UTF8 (CCSID 1208) in UTF16 (1200), nahezu UCS2, übersetzen.
    Im ILEPG ist das dann Feldtyp ucs2(1200).
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  5. #5
    Registriert seit
    May 2007
    Beiträge
    295
    Mittels iConv() sollte die Konvertierung zwischen der großen weiten Welt und der IBMi ja auch klappen. Hast das schon probiert? Also UTF8(1208) auf LOCAL(0) und beim senden wieder retour.
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    iConv ist zu kompliziert, da dies mit SQL ebenso geht:

    exec sql
    set : Ziel = cast ( cast ( Cast(: Quelle as varchar(nn) ccsid 65535) as varchar(nn) ccsid 1208) as nvarchar(nn) );

    Ggf. klappt es auch schon in ILERPG:

    dcl-s Quelle varchar(100) ccsid(1208);
    dcl-s Ziel varucs2(1200);

    eval Ziel = Quelle; // UTF8 => UCS2
    eval Quelle = Ziel; // UCS2 => UTF8
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  7. #7
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Baldur
    hast Du schon einmal versucht einen String mit CCSID 65535 mit CAST nach UTF-8 zu konvertieren?
    Das funktioniert nicht!
    Du musst den String zunächst in eine gültige single byte CCSID (z.B. 273 oder 1141) konvertieren.
    Dieser String kann jedoch problemlos nach UTF-8 oder auch direkt nach UTF-16 (ohne den Zwischenschritt über UTF-8) oder UCS2 konvertiert werden.

    Hat ein String eine gültige CCSID wird die Konvertierung von SQL z.T. sogar automatisch vorgenommen, z.B. wenn ein String mit CCSID 1141 mit einem String in UTF-8 verknüpft wird, dann ist ein expliziter CAST nicht erforderlich.

    Das ist allerdings nichts neues, das ging vielleicht nicht schon immer, aber zumindest solange ich denken kann, so.

    Birgitta
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  8. #8
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Zitat Zitat von Malte Beitrag anzeigen
    ...
    So ein bisschen scheint es ja noch zu Funktionieren da ja die ersten Zeichen erfolgreich übertragen werden

    Aber wenn ich den Web Service mit CCSID(*UTF8) an den Parametern definiere sollte es ja ohne Probleme funktionieren ?

    Mein Problem sind nämlich Sonderzeichen in einem Kommentarfeld welche mir dann beim auslesen der XML Probleme bereitet.
    Ich weiß nicht, ob das Problem schon gelöst ist. Aber ich habe bei uns gerade mal nachgeschaut. Unsere Webservice-Programme geben immer UTF8 zurück, also z.B. varchar(800000) ccsid(*UTF8);

    Intern verarbeiten wir die Daten aber meistens mit UCS2, da UTF-8 im RPG relativ "unbequem" zu handeln ist. Z.B. kann der RDi-Debugger das nicht anzeigen. Mit der Konvertierung zwischen den Datentypen haben wir gar keine Probleme. In der Regel geht das implizit, also einfach durch Umspeicherung:
    Code:
    dcl-s text1 varchar(100) ccsid(*utf8);
    dcl-s text2 varucs2(100) ;
    
    text1 = text2;
    // funktioniert genauso, wie:
    text2 = text1;
    Eine explizite Konvertierung mit iconv oder anderen Verfahren brauchen wir normalerweise nicht.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Wobei 1208/*UTF8 in älteren Releasen noch nicht unterstützt wurde, teilweise auch nicht von SQL.
    Daher wohl die Alternative per iConv (C-API) oder QSH.

    @Birgitta:
    Dann bist do wohl erst mit V5R4 eingestiegen;-). Bis dahing ging nämlich vieles noch nicht.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    Zitat Zitat von Fuerchau Beitrag anzeigen
    @Birgitta:
    Dann bist do wohl erst mit V5R4 eingestiegen;-). Bis dahing ging nämlich vieles noch nicht.
    Ach ja, dann versuch doch mal die folgende Abfrage auszuführen:
    Code:
    Values(Cast(Cast('Dies ist ein Test' as VarChar(25) CCSID 65535) as VarChar(50) CCSID 1208));
    Aktuelles Release aktueller PTF-Stand aktuelle Software
    Click image for larger version. 

Name:	Screenshot 2022-02-02 Test CCSID 1208.jpg 
Views:	15 
Size:	114,1 KB 
ID:	628
    Gleiches Ergebnis i.Ü. in STRSQL
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Entschuldigung, ich meinte damit nicht das Thema UTF8;-) sondern deine Aussage:
    "Das ist allerdings nichts neues, das ging vielleicht nicht schon immer, aber zumindest solange ich denken kann, so."
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

Similar Threads

  1. BLOB mit BASE64 encoden für REST Service im IBM i IWS
    By ismiavoiwuascht in forum NEWSboard Programmierung
    Antworten: 13
    Letzter Beitrag: 27-04-20, 14:18
  2. BLOB mit BASE64 encoden für REST Service im IBM i IWS
    By ismiavoiwuascht in forum NEWSboard Programmierung
    Antworten: 0
    Letzter Beitrag: 25-04-20, 10:18
  3. REST Webservices / Verwendung von SYSTOOLS
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 25
    Letzter Beitrag: 14-02-18, 11:11
  4. REST Web-Service unter V6R1
    By Flappes in forum NEWSboard Programmierung
    Antworten: 2
    Letzter Beitrag: 22-05-17, 11:22
  5. REST Webservice aus SRVPGM Error 404
    By Malte in forum NEWSboard Programmierung
    Antworten: 18
    Letzter Beitrag: 11-11-16, 13:18

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •