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:
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 ;
RPG-Programm mit embedded SQL und Serviceprogramm:

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
Im INIT_ENV werden Umgebungsvariablen gesetzt:

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