Moin zusammen,
ich habe eine Frage bezüglich des Verhaltens eines HTTPGETBLOB - Aufrufs.
Ich habe, je nach Einsatzzweck entweder ein RPG Programm oder eine SQL-UDF erstellt, die Daten von einem Rest-Webservice abrufen und entsprechend dem unterlagerten Systemen bereitstellen.
SQL-UDF-Definition:
RPG-Programm mit embedded SQL und Serviceprogramm:Code:CREATE FUNCTION PGM.MYFUNC ( PNR DECIMAL(7, 0) ) RETURNS CHAR(50) LANGUAGE RPGLE SPECIFIC PGM.MYFUNC NOT DETERMINISTIC READS SQL DATA RETURNS NULL ON NULL INPUT EXTERNAL NAME 'PGM/MYFUNC(SQL_FUNC)' PARAMETER STYLE GENERAL ;
Im INIT_ENV werden Umgebungsvariablen gesetzt:Code:DSQL_FUNC PI 50A D PNR 7 0 * *š//Initialisierung Work-Felder D WEB_URL S 255 VARYING D VALIDITY_DTE S D D SQLERG S 50A D ORT S 50A INZ(*BLANKS) C TIME VALIDITY_DTE /FREE CALLP INIT_ENV(); WEB_URL = 'https://user:password@xxx.de/' + 'employee-data-transfer/api/employee/' + %CHAR(PNR) + '/birthplace?validityDate=' + %CHAR(VALIDITY_DTE); /END-FREE * C/EXEC SQL C+ SELECT RESULT.* into :SQLERG C+ FROM XMLTABLE( C+ '$result' C+ PASSING C+ XMLPARSE(DOCUMENT SYSTOOLS.HTTPGETBLOB(:WEB_URL, '') C+ ) as "result" C+ COLUMNS birthplace CHAR(50) PATH 'birthplace' C+ ) AS result C/END-EXEC * C IF SQLCOD = *ZEROS C EVAL ORT = SQLERG C ENDIF * C RETURN ORT
CALL QCMDEXC('ADDENVVAR ENVVAR(JAVA_HOME) VALUE(''/QOpenSys/QIBM/ProdData/JavaVM/jdk60/64bit'') REPLACE(*YES)');
CALL QCMDEXC('ADDENVVAR ENVVAR(QIBM_JAVA_PROPERTIES_FILE) VALUE(''/QIBM/userdata/java400/my.properties'') REPLACE(*YES)');
Der Webservice ist so aufgebaut, dass er eine 404 Meldung zurückgibt, wenn keine Daten gefunden wurden (z.B. ungültige Personalnummer als Parameter mitgegeben).
Der Rückgabewert ist dann wie folgt:
- 38000(-443)[IBM][System i Access ODBC Driver]SQL0443 (0,60 secs)
- S1000(-4302)[IBM][System i Access ODBC Driver][DB2 for i5/OS]SQL4302 - Die gespeicherte Java-Proz. oder benutzerdef. Funktion SYSTOOLS.HTTPGETBLOB mit dem spezifischen Namen HTTPG00001 wird mit der Ausnahmebed. https://xxx:xxx@xxx.de/employee-data...ate=2017-11-16 abgebrochen. (0,48 secs)
Ist dieses Verhalten so normal? Kann man das abfangen - auch eine explizite Abfrage des SQLCODES und das Zurückgeben von *BLANKS hilft nicht. Habe ich einen Fehler gemacht?
Ich bin über jede Hilfe dankbar!
Viele Grüße
BM
![[NEWSboard IBMi Forum]](images/duke/nblogo.gif)



Mit Zitat antworten
Bookmarks