HttpGetClob

RPG (3 et 4, free), CL, SQL, etc...
Répondre
Athalaric44
Messages : 17
Enregistré le : ven. 22 juil. 2016, 13:54:28

HttpGetClob

Message par Athalaric44 »

Bonjour,

j'ai un petit soucis de caractères spéciaux (accentués et autres) :

J'ai créé un module SQLRPGLE qui invoque une URl grâce à HttpGetClob.
Cela fonctionne, je récupère bien le flux XML voulu en retour.

Cependant les caractères accentués ne sont pas correctement restitués.
J'ai essayé plusieurs "charset" dans le header passé à HttpGetClob (UTF-8, iso-8859-1...) sans aucun succès.

Quand l'url est invoquée directement dans un navigateur, les caractères du flux XML sont bien affichés en retour.

Je butte sur ce petit problème et ne sais comment le résoudre simplement. :(

Quelqu'un aurait-il une solution ?

Merci pour votre aide.

cmasse
Site Admin
Messages : 802
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

CCSID

Message par cmasse »

Quel est le CCSID du système (WRKSYSVAL QCCSID) ? 65535 ?

SI oui, faites un CHGJOB CCSID(297) avant de lancer votre programme.
Christian Massé (Volubis.fr)

Athalaric44
Messages : 17
Enregistré le : ven. 22 juil. 2016, 13:54:28

Message par Athalaric44 »

Merci pour la piste mais hélas il est bien à 297.
Grâce à d'autres sujets sur ce forum j'avais vérifié ce point.

Je sèche...

Le flux XML est bien encodé en utf-8 :

....5...10...15...20...25...30...35...40...45...50...55...60
1 '<?xml version="1.0" encoding="UTF-8"?><rechercheDistributeur'


Au lieu de :
181 '0210</id><libelle>distrib_test_àé</libelle><code>0123456</'
je devrais avoir :
181 '0210</id><libelle>distrib_test_àè</libelle><code>0123456</'

cmasse
Site Admin
Messages : 802
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

Message par cmasse »

le site data.nantes.fr fournit des informations sous forme de web services

cette URL retourne des équipements publics avec des adresses contenant des caractères accentués. http://data.nantes.fr/api/publication/2 ... format=xml

son entête indique aussi un encodage l'UTF-8

ce code SQL fonctionne chez moi et affiche bien les caractères accentués ("Usine d'incinération..." en ligne 3, par exemple)

Code : Tout sélectionner

Select * from 
XMLTABLE&#40;'$r/document/data/element' PASSING
XMLPARSE&#40;DOCUMENT 
systools.httpgetClob&#40;'http&#58;//data.nantes.fr/api/publication/24440040400129_NM_NM_00025/LOC_EQUIPUB_VIE_PRATIQUE_NM_STBL/content/?format=xml' ,''&#41;
&#41; as "r"
COLUMNS
nom char&#40;50&#41; PATH'geo/name'
&#41; as xml;
Christian Massé (Volubis.fr)

Athalaric44
Messages : 17
Enregistré le : ven. 22 juil. 2016, 13:54:28

Message par Athalaric44 »

Je n'arrive pas à utiliser votre url d'exemple, je me demande si je n'ai pas un problème avec HttpGetClob (ancienne version ou autre...) :


> values systools.httpgetclob('http://data.nantes.fr/api/publication/2 ... L/content/', '')

Etat SQL : 38000
Code fournisseur : -4302
Message : [SQL4302] Abandon de la proc. stockée ou fonction UDF Java SYSTOOLS.HTTPGETCLOB, nom spécifique HTTPGETCLOBNONXML. Exception : com.ibm.db2.rest.HttpUDFException. Cause . . . . . : La procédure stockée Java ou la fonction UDF a été abandonnée et a généré une exception Java. Si la trace du composant SQJAVA est activée, elle contient une trace de pile Java relative à la méthode abandonnée. Que faire . . . : Déboguez la méthode Java pour supprimer l'exception.

L'instruction mise en évidence a échoué, entraînant l'interruption du traitement

cmasse
Site Admin
Messages : 802
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

CPF503E

Message par cmasse »

Dans la log vous devez avoir aussi un CPF503E

Code : Tout sélectionner

 Le code d'erreur correspondant est 1. Lea signification des codes d'erreur est fournie ci-après.
          1 -- Le programme externe ou le programme de service a renvoyé SQLSTATE 38000. Le message renvoyé par le programme est &#58; xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

PS : Votre partition IBM i a accès à Internet ? :?
Christian Massé (Volubis.fr)

Athalaric44
Messages : 17
Enregistré le : ven. 22 juil. 2016, 13:54:28

Message par Athalaric44 »

Effectivement :

1 -- Le programme externe ou le programme de service a renvoyé SQLSTATE 38000. Le message renvoyé par le programme est :
SYSTOOLS.HTTPGETBLOBHTTPGETBLOBNONXMLcom.ibm.db2.rest.HttpUDFException.

Nos AS400 ne doivent pas avoir accès à internet. Je viens d'essayer avec une autre adresse (www.ldlc.com) et j'ai le même résultat.

Avec des adresses internes à l'entreprise j'ai bien une réponse.

Tant pis pour l'exemple externe. :(

Répondre