[NEWSboard IBMi Forum]
  1. #1
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005

    SYSTOOLS.URLENCODE

    Hallo,

    ich habe gerade ein Problem beim SYSTOOLS.URLENCODE festgestellt, wenn in meiner URL Leerzeichen vorkommen. Hier ist ein Beispiel:

    Code:
    SELECT *
    FROM XMLTABLE('$doc/hibcData'
          PASSING
          XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETCLOB
    ('http://ban:8080/webservices/hibc/code1/' concat systools.urlencode('+DIVO6676681', 'UTF-8') concat '/code2/' concat systools.urlencode('+$$3191208W00158 C', 'UTF-8'), ''))
    AS "doc"
    COLUMNS
    	Lic VARCHAR(4) PATH 'lic',
    	ProdNumber VARCHAR(18) PATH 'productNumber',
    	ExpDate VARCHAR(8) PATH 'expiryDate',
    	Lot VARCHAR(18) PATH 'lotNumber',
    	Serial VARCHAR(18) PATH 'serialNumber',
    	ProdDate VARCHAR(8) PATH 'productionDate',
    	Unit VARCHAR(1) PATH 'unit',
    	Quantity VARCHAR(5) PATH 'quantity'
    ) AS WebServiceResult;
    Ich übergebe meinem REST-Webservice hier 2 Parameter (CODE1 und CODE2 mit den jeweiligen Werten). In CODE2 ist ein Leerzeichen vorhanden. Jetzt hätte ich eigentlich erwartet, dass dieses Leerzeichen in "%20" encodiert wird. Es wird aber in ein "+" encodiert und somit im Webservice als normales Pluszeichen interpretiert anstatt als Leerzeichen.

    Wie kann ich dieses Problem umgehen? In anderen Sprachen gibt es z.B. urlencode() für "+" und rawurlencode() für "%20".

    Gruß,
    KM

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Die Frage ist, wann ist es ein Parameter, wann gehört es zum Pfad.
    Ich denke urlencode sollte es korrekt machen, wenn du den gesamten String übergibst.
    Also deine Parameter sind eigentlich Pfadangaben.

    Korrekt wäre also alles in ein concat und dann an urlencode übergeben.

    Diskussion siehe hier:
    http://stackoverflow.com/questions/1...haracter-or-20
    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
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Ich habe jetzt herausgefunden, dass die Funktion SYSTOOLS.URLENCODE intern die Java-Klasse "java.net.URLEncoder" verwendet und diese encodiert das Leerzeichen eben in ein "+".

    Als Workaround wird hier empfohlen nach dem URLENCODE noch einen REPLACE von "+" nach "%20" durchzuführen.

    Damit funktioniert's nun.

    Gruß,
    KM

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Das funktioniert aber nur, wenn ein echtes "+" ggf. in %2B umgesetzt wurde.
    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
    KM is offline [professional_User]
    Registriert seit
    Apr 2003
    Beiträge
    1.005
    Das funktioniert aber nur, wenn ein echtes "+" ggf. in %2B umgesetzt wurde.
    Deshalb hatte ich ja geschrieben, dass der REPLACE erst nach dem URLENCODE durchgeführt werden darf. Dann ist das "+" ja bereits umgesetzt.

    Gruß,
    KM

Similar Threads

  1. REST Webservices / Verwendung von SYSTOOLS
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 25
    Letzter Beitrag: 14-02-18, 12:11
  2. SYSTOOLS.JSON2BSON
    By rischer in forum IBM i Hauptforum
    Antworten: 28
    Letzter Beitrag: 02-10-15, 12:36

Berechtigungen

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