Ich habe mich jetzt (auch aufgrund eurer Antworten) dazu durchgerungen, einen POST Service zu implementieren. Ich habe eine SQL-UDF erstellt, die einen Clob als JSON-Input bekommt und die einen Clob als JSON-Antwort zurückgibt.
Die Antwort-Clobs werden nicht vom IWS generiert, sondern ich baue sie selber mit den SQL-JSON-Funktionen zusammen.

Jetzt habe ich noch ein Problem:
Im IWS definiere ich das auszuführende SQL, also im wesentlichen den Aufruf meiner UDF. Ich würde sehr gerne den HTTP-Statuscode von meiner UDF aus beeinflussen. Wenn ich den IWS Wizzard richtig verstehe, gibt es da aber nur die beiden Ausprägungen 200 bei Erfolg und 500 bei Misserfolg. Ich kann den Code nicht selber beeinflussen, so dass z.B. ein 404 zurückkommt. (Klar, ich kann die 500 im IWS z. B. fest durch 404 ersetzen. Aber dann kommt ja immer 404 zurück. Das ist natürlich nicht, was ich will.)

Aber das ist noch nicht alles:
Unsere RPG-based Webservices geben bei Erfolg das angeforderte Antwort-Json zurück. Bei Misserfolg kommt ein standardisiertes Fehler-JSON zurück, dass z.B. die Fehlernachricht, das betroffene Programm usw. enthält.

Bei meinem SQL basierten Webservice habe ich da jetzt ein Problem:
Wenn die SQL-UDF keinen Fehler enthält, kommt das gewünschte JSON zurück und der Statuscode 200 wird vom IWS zurückgegeben.
Wenn ich aber einen fachlichen Fehler habe (z.B. Authentifizierungstoken ungültig), erzeuge ich das Fehler-JSON-Objekt und gebe das zurück. Das ist technisch gesehen aber kein Fehler für SQL. Deshalb kommt auch im (fachlichen) Fehlerfall als Statuscode 200 zurück. Das ist sehr unschön.

Ich habe bereits damit experimentiert, mittels der SIGNAL Anweisung im SQL einen SQL-Fehler auszulösen. Dann gibt IWS auch wirklich den Statuscode 500 zurück. Aber dann kommt mein Antwort-JSON nicht zurück, sondern ein SQL-Message-String.

Code:
  -- Prüfung Authorization:
  set resultClob = clob(DAX99##_checkAuthorization(token, clientId,
                            role, pgmName, procName, 0, httpStatusCode));


  -- Prüfung Authorization nicht erfolgreich:
  if length(resultClob) > 0 then
     -- Class Code 28: Invalid Authorization Specification
     signal SQLSTATE '28000'
     set Message_Text = 'authorization failed';
     return resultClob;
  end if;
Rückgabe im Fehlerfall ist: (Statuscode 500)
[SQL0438] authorization failed (SQLState=28000, ErrorCode=-438)




Ich hätte aber gerne zurück: (Statuscode 500)
Code:
{  "daxErrorObject": { 
        "errorCode": "ERROR_OAUTH_TOKEN", 
        "errorMessage": "Das OAuth-Token konnte nicht verifiziert werden.
     "messageType": "ERROR", 
        "routine": "DAXWS_dataRetriever", 
        "field": "", 
         "details": null  }
}