Page 1 sur 1

HTTPPOSTCLOB

Posté : jeu. 31 mai 2018, 16:09:21
par florian67
Bonjour,

J'essaie de consommer un service SOAP en SQL et ça ne se passe pas très bien pour le moment :)

Pour résumer un peu, je consomme un service avec HTTPAPI et ça fonctionne bien. Par contre il faut que je rajoute une notion d'unicode et du coup je suis coincé.

Je test donc en non unicode le HTTPPOSTCLOB pour valider déjà que ça fonctionne également.

Code : Tout sélectionner


dcl-s requete varchar(500);
dcl-s urlRetour varchar(16000); 

requete = '<request xml&#58;lang="EN" pwd="mdp" user="leUser">' +
          '<import>'+
              '<fields>'+
              '<Company>'+
                 '<CoGrp>5001</CoGrp>' +
                 '<CoNo>654696</CoNo>' +
                 '<Company>test</Company>' +
              '</Company>'+
              '</fields>'+
            '</import>'+
          '</request>';

Exec Sql
  Values SYSTOOLS.HTTPPOSTCLOB&#40;'https&#58;//serveur/dossier',
  cast&#40;'' as CLOB&#40;1K&#41;&#41;,
  cast&#40;&#58;requete as CLOB&#40;50K&#41;&#41;&#41;
  into &#58;UrlRetour;

J'ai un SQLSTT 38000.

Est-ce que quelqu'un aurait une idée?

J'ai envoyé la même requête dans SOAPUI et ça passe bien.

Merci d'avance
Florian

SOAP

Posté : jeu. 31 mai 2018, 16:25:26
par cmasse
Il faut envoyer exactement l'enveloppe SOAP (celle envoyée par SOAPUI)

Code : Tout sélectionner

SYSTOOLS.HTTPPOSTCLOB&#40;'http&#58;//as400&#58;10025/web/services/SOAPPRDService/SOAPPRD', NULL, 
    CAST&#40;'<soapenv&#58;Envelope xmlns&#58;soapenv="http&#58;//schemas.xmlsoap.org/soap/envelope/"
           xmlns&#58;soap="http&#58;//soapprd.wsbeans.iseries/">
            <soapenv&#58;Header/>
             <soapenv&#58;Body>
              <soap&#58;getprd>
               <arg0>
                <CODE>2</CODE>
               </arg0>
              </soap&#58;getprd>
             </soapenv&#58;Body>
          </soapenv&#58;Envelope>' AS CLOB&#40;10K&#41;&#41;  &#41; 

Posté : ven. 01 juin 2018, 13:31:59
par florian67
La requête que je mets dans SOAP est exactement la même.
C'est pour cela que j'ai un peu du mal à comprendre.

Ci-dessous mot pour mot la requête dans SOAPUI.

Code : Tout sélectionner

<request xml&#58;lang="EN" pwd="xxx" user="xxx">
      <import>
           <fields>
             <Company>
                <CoGrp>5001</CoGrp>
                <CoNo>654696</CoNo>
                <Company>test</Company>
             </Company>
            </fields>
        </import>
</request>
Juste pour me mettre dans le même environnement, vous testez votre service depuis quelle plateforme (RDI, System i Nav...)?

J'ai testé à partir de RDI et j'ai cette erreur :
Abandon&#8236;&#8206; &#8234;de&#8236;&#8206; &#8234;la&#8236;&#8206; &#8234;proc&#8236;&#8206;.&#8234;&#8236;&#8206; &#8234;stockée&#8236;&#8206; &#8234;ou&#8236;&#8206; &#8234;fonction&#8236;&#8206; &#8234;UDF&#8236;&#8206; &#8234;Java&#8236;&#8206; &#8234;SYSTOOLS&#8236;&#8206;.&#8234;HTTPPOSTCLOB&#8236;&#8206;,&#8234;&#8236;&#8206; &#8234;nom&#8236;&#8206; &#8234;spécifique&#8236;&#8206; &#8234;HTTPP00013&#8236;&#8206;.&#8234;&#8236;&#8206; &#8234;Exception&#8236;&#8206; &#8234;&#8236;&#8206;:&#8234;&#8236;&#8206; &#8234;java&#8236;&#8206;.&#8234;security&#8236;&#8206;.&#8234;cert&#8236;&#8206;.&#8234;CertificateException&#8236;&#8206;:&#8234;&#8236;&#8206; &#8234;No&#8236;&#8206; &#8234;name&#8236;&#8206; &#8234;matching&#8236;&#8206; XXXXXX&#8236;&#8206; &#8234;found&#8236;&#8206;.

Est-ce que c'est possible que ça soit le certificat SSL qui fait que ça ne fonctionne pas ?&#8234;

HTTPS

Posté : mar. 05 juin 2018, 07:36:02
par admin
Si c'est un prb HTPS
Vous pouvez mettre des options à java, en créant un fichier d'options

Code : Tout sélectionner

    -Xmx 	Mémoire pour java &#40;par exemple -Xmx2g -> 2 Go&#41;
    http.proxyHost 	Coordonnées du Proxy
    http.proxyPort 	port du proxy &#40;80 par défaut&#41;
    http.proxyUser 	Utilisateur pour proxy
    http.proxyPassword 	Mot de passe pour proxy
    http.nonProxyHosts 	Liste des serveurs pour lesquels ne pas utiliser le proxy
    javax.net.ssl.trustStore 	emplacement du fichier contenant la liste des certificats des sites de confiance
    javax.net.ssl.trustStorePassword 	mot de passe pour ouvrir le fichier trustStore
    javax.net.ssl.keyStore 	emplacement du fichier contenant la liste des certificats et des clés privées &#40;keystore&#41;
    javax.net.ssl.keyStorePassword 	mot de passe pour ouvrir le fichier keyStore

Le fichier de propriétés java peut être indiqué comme suit :

en créant une variable d'environnement indiquant sa localisation

ADDENVVAR ENVVAR(QIBM_JAVA_PROPERTIES_FILE)
VALUE(/QIBM/userdata/java400/mySystem.properties)

en créant un fichier SystemDefault.properties dans la home directory de l'utilisateur
en créant un fichier SystemDefault.properties dans /QIBM/userdata/java400/

Posté : mer. 04 juil. 2018, 13:26:58
par florian67
Bonjour à tous,

Nous avons un peux avancé sur le sujet.
Après plusieurs échanges avec le support IBM, nous arrivons à consommer notre service.

Par contre, le but de ma manœuvre était de pouvoir envoyer des données unicode. Lorsque l'on consomme le service avec que des caractères "latins" ça fonctionne mais si on ajoute un caractère un peu spécial "j&#281;zyk", nous avons cette erreur :

Code : Tout sélectionner

Erreur de fonction définie par l'utilisateur sur le membre QSQPTABL.
Abandon de la proc. stockée ou fonction UDF Java SYSTOOLS.HTTPPOSTCLOB,
nom spécifique HTTPP00013. Exception &#58;
java.net.SocketException&#58;Connection reset.
La requête :

Code : Tout sélectionner

requete = '<?xml version="1.0" encoding="UTF-8"?>' +
          '<request xml&#58;lang="EN" pwd="xxx" user="xxx">' +
          '<import>'+
              '<fields>'+
              '<Company>'+
                 '<CoGrp>5001</CoGrp>' +
                 '<CoNo>654696</CoNo>' +
                 '<Company>j&#281;zyk</Company>' +
//                 '<Company>' + companyEncoded + '</Company>' +
//                   '<Company>TEST-CN-FG</Company>' +
              '</Company>'+
              '</fields>'+
            '</import>'+
          '</request>';

header = '<httpHeader><header name="Content-Type" '  +
         'value="text/xml;charset=utf-8" /></httpHeader>';

URL = 'https&#58;//Notreserveur/in/xml';

Exec Sql
  Set &#58;urlRetourclob = SYSTOOLS.HTTPPOSTCLOB&#40;&#58;URL,
      &#58;header, cast&#40;&#58;requete as clob&#40;1M&#41;&#41;&#41;;

De ce que nous avons pu voir c'est que tous les caractères non latins sont remplacé par une flêche, du coup le serveur nous renvoi une erreur.

Merci pour votre aide.
Florian

DBCLOB

Posté : mer. 04 juil. 2018, 14:23:32
par cmasse
Pour de l'UNICODE DBCLOB serait préférable à CLOB.....

Posté : jeu. 19 juil. 2018, 07:17:12
par florian67
Bonjour,

C'est bon ça fonctionne bien par contre il faut se mettre dans la bonne langue pour qu'il n'y ai pas d'erreur (un peu dommage pour de l'unicode).

Par contre, nous avons une procédure stockée qui appelle ce programme également. Le soucis c'est que nous ne connaissons pas la langue de la personne du coup on ne peut se mettre dans l'environnement (CHGJOB).

J'ai quand même essayé de faire un CHGJOB et de me mettre dans la langue mais ça ne passe pas car je pense qu'en faisant un %char il fait une conversion dans la langue SYSTEM (*SYSVAL pour le profil QUSER).

Est-ce qu'il y aurait un moyen de bien faire transiter ma valeur jusqu'au service?

(sujet inconnu)

Posté : mer. 05 déc. 2018, 12:03:22
par Oubari
Vous êtes à la recherche d'un cadre de BMX cruiser ? Ce comparatif https://velo-equipement.com/cadre-bmx-c ... omparatif/ vous sera d'une grande aide.