Page 1 sur 1

HttpGetClob

Posté : lun. 25 juil. 2016, 08:02:57
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.

CCSID

Posté : lun. 25 juil. 2016, 09:12:52
par cmasse
Quel est le CCSID du système (WRKSYSVAL QCCSID) ? 65535 ?

SI oui, faites un CHGJOB CCSID(297) avant de lancer votre programme.

Posté : lun. 25 juil. 2016, 09:38:02
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</'

Posté : lun. 25 juil. 2016, 09:59:57
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;

Posté : lun. 25 juil. 2016, 11:09:27
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

CPF503E

Posté : lun. 25 juil. 2016, 11:22:55
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 ? :?

Posté : lun. 25 juil. 2016, 11:39:32
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. :(