Webservice (POST)

RPG (3 et 4, free), CL, SQL, etc...
Répondre
SebastienB
Messages : 51
Enregistré le : ven. 22 janv. 2021, 10:21:13

Webservice (POST)

Message par SebastienB »

Bonjour,

Nous essayons d'envoyer un fichier en base64 via un webservice (systools.httpPostClob) mais nous obtenons le message d'erreur suivant :
"Message : [SQL0101] L'instruction SQL est trop longue ou trop complexe. Cause . . . . . : L'instruction SQL est trop longue ou comporte trop d'éléments. Code raison : 5. Les différents codes possibles correspondent aux erreurs suivantes : 5 - La longueur totale de l'instruction est supérieure à 2097152 ou la longueur de la chaîne d'attributs est supérieure à 65535. Que faire . . . : Simplifiez l'instruction ou scindez-la en plusieurs instructions, puis Renouvelez votre demande. Pour le code raison 7, précisez un autre nom pour la table, la vue, l'index ou l'alias."

Le fichier étant dans le "body" du message, la requête est effectivement très longue. Le fichier en base64 fait plus de 201 000 caractères.
Est-ce que qq'un aurait une idée pour résoudre cela ?

Cordialement,
Séb.

nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Webservice (POST)

Message par nbonnet »

Bonjour,

à priori ce n'est pas la longueur de la valeur retour mais l'instruction SQL elle-même qui pose problème.
Peux-tu nous partager la requête ?
Nathanaël

SebastienB
Messages : 51
Enregistré le : ven. 22 janv. 2021, 10:21:13

Re: Webservice (POST)

Message par SebastienB »

En P.J. la requête :

J'ai bien évidemment légerment modifié la requête pour des soucis de confidentialités.

Séb.
Fichiers joints
requete.zip
(74.57 Kio) Téléchargé 367 fois

nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Webservice (POST)

Message par nbonnet »

A priori on est loin de la limite d'une requête SQL :
Maximum length of an SQL statement (in bytes) 2 097 152
https://www.ibm.com/support/knowledgece ... imtabs.htm

C'est dans du SQL embarqué ?
Nathanaël

SebastienB
Messages : 51
Enregistré le : ven. 22 janv. 2021, 10:21:13

Re: Webservice (POST)

Message par SebastienB »

Au final, cela le sera, pour le moment c'est via ACS.

et pourtant j'obtiens bien le code SQL 54001 : The statement is too long or too complex.

Malheureusement, cela passe par une couche Java ... peut-être que celle-ci bloque ?

Séb.

nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Webservice (POST)

Message par nbonnet »

La doc indique CLOB 2G en paramètre :
https://www.ibm.com/support/knowledgece ... stclob.htm

Certainement un artifice d'ACS qui utilise des variables pour passer les valeurs ?
Que cela donne-t-il en SQL embarqué en utilisant un CLOB_FILE ?

Je teste dès que j'ai le temps
Nathanaël

nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Webservice (POST)

Message par nbonnet »

J'ai fait quelques tests en créant un fichier body.json sur l'IFS et copiant le flux JSON correspondant au corps de la requête.

Puis :

Code : Tout sélectionner

select systools.httpPostClob(
'https://apitest.cerfrance22.fr:9000/edi/api/document',
    cast('<httpHeader>
<header name="Content-Type" value="application/json"/>
<header name="X-Gravitee-Api-Key" value="6f65cce5-59e2-48da-bed1-8cab28894abc"/>
<header name="Authorization" value="Bearer azJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJxSDZReEFJdmJlT0dOLWl5M2JQZ25MQ2ZOZWlnem9fN2JjTTV0WDlqNzdVIn0.eyJleHAiOjE2MTMzNzQ3NDEsImlhdCI6MTYxMzM3NDQ0MSwianRpIjoiOGZiZDI3NzEtYzJjNC00MDA1LTg4ZGUtNTVhNTM3MDdmY2MwIiwiaXNzIjoiaHR0cHM6Ly9zc290ZXN0LmNlcmZyYW5jZTIyLmZyL2F1dGgvcmVhbG1zL2NlcjIyLXByZXByb2QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiYjc2MTk4OTYtNDk0NC00MmRhLWFmNzYtODY3YTlhNDhkMTc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiZmx1eC1lZGkiLCJzZXNzaW9uX3N0YXRlIjoiNjM2ZjliZDAtZTBjZC00ZjhjLThlN2UtOTFjOGRhNWZhYzgxIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJlbWFpbCBwcm9maWxlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJjb29wZXJsIn0.oslpj4tVHbHhCFSFhFpRHqIIBdOLjDr6yEx9RExRHquAyvWqCWZN_D8BvlKLz2JVCItmagexCSQzks4Yv0ZYFZRmtChgcORpudL6wNdKI5hNfEl3fVqEfxyvw1iwuP5_UCA6UVAfwQrIgfz4h_u5hzj9v19YIaIwUV7wvUCrv6pOGY2FkeSSF5fD40zkSrT7O8kGVEXnvLuZDyXrivlea4a5wTsQ_eBR2csMJ0EhlcayZwr8OEo9mZ6RaVXoSFWuvd-vMN2wZgMZBhPr3JUn9Cr0GtVEUvWC2xglCpkbT04AlIAR0R6pPDRwE-Mvtvoz9xQXu6z_jtsQoIs0NzBIDg"/>
</httpHeader>' as clob(10K)),  
    get_clob_from_file('/home/NB/body.json'))
from sysibm.sysdummy1; 


Cela provoque un MCH0601, Déplacement espace X'00000000' ou X'00008017B00A2C80' hors espace de l'objet QZDASOINITQUSER 897256...

J'ai essayé également en utilisant une variable SQL :

Code : Tout sélectionner

create variable nb.body clob(2g) ccsid 1208 ; 
set transaction isolation level read committed ;
set nb.body = get_clob_from_file('/home/NB/body.json') ;
commit ;
Puis

Code : Tout sélectionner

select systools.httpPostClob(
'https://apitest.cerfrance22.fr:9000/edi/api/document',
    cast('<httpHeader>
<header name="Content-Type" value="application/json"/>
<header name="X-Gravitee-Api-Key" value="6f65cce5-59e2-48da-bed1-8cab28894abc"/>
<header name="Authorization" value="Bearer azJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJxSDZReEFJdmJlT0dOLWl5M2JQZ25MQ2ZOZWlnem9fN2JjTTV0WDlqNzdVIn0.eyJleHAiOjE2MTMzNzQ3NDEsImlhdCI6MTYxMzM3NDQ0MSwianRpIjoiOGZiZDI3NzEtYzJjNC00MDA1LTg4ZGUtNTVhNTM3MDdmY2MwIiwiaXNzIjoiaHR0cHM6Ly9zc290ZXN0LmNlcmZyYW5jZTIyLmZyL2F1dGgvcmVhbG1zL2NlcjIyLXByZXByb2QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiYjc2MTk4OTYtNDk0NC00MmRhLWFmNzYtODY3YTlhNDhkMTc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiZmx1eC1lZGkiLCJzZXNzaW9uX3N0YXRlIjoiNjM2ZjliZDAtZTBjZC00ZjhjLThlN2UtOTFjOGRhNWZhYzgxIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJlbWFpbCBwcm9maWxlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJjb29wZXJsIn0.oslpj4tVHbHhCFSFhFpRHqIIBdOLjDr6yEx9RExRHquAyvWqCWZN_D8BvlKLz2JVCItmagexCSQzks4Yv0ZYFZRmtChgcORpudL6wNdKI5hNfEl3fVqEfxyvw1iwuP5_UCA6UVAfwQrIgfz4h_u5hzj9v19YIaIwUV7wvUCrv6pOGY2FkeSSF5fD40zkSrT7O8kGVEXnvLuZDyXrivlea4a5wTsQ_eBR2csMJ0EhlcayZwr8OEo9mZ6RaVXoSFWuvd-vMN2wZgMZBhPr3JUn9Cr0GtVEUvWC2xglCpkbT04AlIAR0R6pPDRwE-Mvtvoz9xQXu6z_jtsQoIs0NzBIDg"/>
</httpHeader>' as clob(10K)),  
    nb.body)
from sysibm.sysdummy1;
Mais j'obtiens le même résultat !

Incident chez IBM ?
Nathanaël

nbonnet
Messages : 198
Enregistré le : mar. 11 sept. 2018, 08:20:13
Localisation : Lyon

Re: Webservice (POST)

Message par nbonnet »

en mettant dans un script sur l'IFS :

Code : Tout sélectionner

create variable nb.res clob(2g) ccsid 1208 ; 

set nb.res = systools.httpPostClob(
'https://apitest.cerfrance22.fr:9000/edi/api/document',
    cast('<httpHeader>
<header name="Content-Type" value="application/json"/>
<header name="X-Gravitee-Api-Key" value="6f65cce5-59e2-48da-bed1-8cab28894abc"/>
<header name="Authorization" value="Bearer azJhbGciOiJSUzI1NiIsInR5cCIgOiAiSldUIiwia2lkIiA6ICJxSDZReEFJdmJlT0dOLWl5M2JQZ25MQ2ZOZWlnem9fN2JjTTV0WDlqNzdVIn0.eyJleHAiOjE2MTMzNzQ3NDEsImlhdCI6MTYxMzM3NDQ0MSwianRpIjoiOGZiZDI3NzEtYzJjNC00MDA1LTg4ZGUtNTVhNTM3MDdmY2MwIiwiaXNzIjoiaHR0cHM6Ly9zc290ZXN0LmNlcmZyYW5jZTIyLmZyL2F1dGgvcmVhbG1zL2NlcjIyLXByZXByb2QiLCJhdWQiOiJhY2NvdW50Iiwic3ViIjoiYjc2MTk4OTYtNDk0NC00MmRhLWFmNzYtODY3YTlhNDhkMTc5IiwidHlwIjoiQmVhcmVyIiwiYXpwIjoiZmx1eC1lZGkiLCJzZXNzaW9uX3N0YXRlIjoiNjM2ZjliZDAtZTBjZC00ZjhjLThlN2UtOTFjOGRhNWZhYzgxIiwiYWNyIjoiMSIsInJlYWxtX2FjY2VzcyI6eyJyb2xlcyI6WyJvZmZsaW5lX2FjY2VzcyIsInVtYV9hdXRob3JpemF0aW9uIl19LCJyZXNvdXJjZV9hY2Nlc3MiOnsiYWNjb3VudCI6eyJyb2xlcyI6WyJtYW5hZ2UtYWNjb3VudCIsIm1hbmFnZS1hY2NvdW50LWxpbmtzIiwidmlldy1wcm9maWxlIl19fSwic2NvcGUiOiJlbWFpbCBwcm9maWxlIiwiZW1haWxfdmVyaWZpZWQiOmZhbHNlLCJwcmVmZXJyZWRfdXNlcm5hbWUiOiJjb29wZXJsIn0.oslpj4tVHbHhCFSFhFpRHqIIBdOLjDr6yEx9RExRHquAyvWqCWZN_D8BvlKLz2JVCItmagexCSQzks4Yv0ZYFZRmtChgcORpudL6wNdKI5hNfEl3fVqEfxyvw1iwuP5_UCA6UVAfwQrIgfz4h_u5hzj9v19YIaIwUV7wvUCrv6pOGY2FkeSSF5fD40zkSrT7O8kGVEXnvLuZDyXrivlea4a5wTsQ_eBR2csMJ0EhlcayZwr8OEo9mZ6RaVXoSFWuvd-vMN2wZgMZBhPr3JUn9Cr0GtVEUvWC2xglCpkbT04AlIAR0R6pPDRwE-Mvtvoz9xQXu6z_jtsQoIs0NzBIDg"/>
</httpHeader>' as clob(10K)),  
    get_clob_from_file('/home/NB/body.json')) ;
Puis :

Code : Tout sélectionner

RUNSQLSTM SRCSTMF(httpPostClob.sql) NAMING(*SQL)
L'appel de la fonction s'effectue (timeout car l'hôte n'est pas connu sur mon réseau) !
A tester en SQLRPGLE
Nathanaël

SebastienB
Messages : 51
Enregistré le : ven. 22 janv. 2021, 10:21:13

Re: Webservice (POST)

Message par SebastienB »

Bonjour,

Merci d'avoir regardé.
Je vais voir pour ouvrir un incident.

Séb.

Répondre