Web Service SOAP avec BLOB
Web Service SOAP avec BLOB
Bonjour,
Je cherche à exposer un web service depuis le systeme i (7.2) qui retournerait un Blob.
Je cherche donc à créer un programme RPGLE qui aurait en entrée (PR / PI) un champs BLOB de façon à pouvoir exporter ce programme comme web service soap via "IBM WEB administration for i".
D'où ma question: comment déclarer un blob en carte D sur mes PR et PI en entrée de programme ?
Si vous avez une idée : je suis preneur...
Merci
Je cherche à exposer un web service depuis le systeme i (7.2) qui retournerait un Blob.
Je cherche donc à créer un programme RPGLE qui aurait en entrée (PR / PI) un champs BLOB de façon à pouvoir exporter ce programme comme web service soap via "IBM WEB administration for i".
D'où ma question: comment déclarer un blob en carte D sur mes PR et PI en entrée de programme ?
Si vous avez une idée : je suis preneur...
Merci
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
BLOB
C'est pas tout à fait comme cela que ça se passe.
BLOB est un concept DB2, en HTTP ce sont les formats MIME qui s'appliquent.
lors de la déclaration du web service (idéalement de type REST) on peut préciser un type mime retour par exemple image/gif (par défaut *XML_AND_JSON).
Charge au programme de mettre dans le paramètre en question, une suite d'octets valide en fonction du type mime déclaré. Pourquoi pas un BLOB lu dans DB2?
Voir un exemple avec du HTML venu d'un CLOB, sur la pause Café 71
http://www.volubis.fr/Pausecaf/PAUSECAF71.html
BLOB est un concept DB2, en HTTP ce sont les formats MIME qui s'appliquent.
lors de la déclaration du web service (idéalement de type REST) on peut préciser un type mime retour par exemple image/gif (par défaut *XML_AND_JSON).
Charge au programme de mettre dans le paramètre en question, une suite d'octets valide en fonction du type mime déclaré. Pourquoi pas un BLOB lu dans DB2?
Voir un exemple avec du HTML venu d'un CLOB, sur la pause Café 71
http://www.volubis.fr/Pausecaf/PAUSECAF71.html
Christian Massé (Volubis.fr)
Je ne comprends pas bien...
(Le ausecafé71 ne fait pas référence au mime type...)
Peut être n'ai-je pas donné assez de détail quant à mon besoin...
Nous cherchons à créer un programme RPGLE qui serait exposé en tant que web service SOAP. Ce web servie (et donc le programme RPGLE) recevrait en entrée un identifiant de document et fournirait en retour le document PDF correspondant.
Je pensais (visiblement à tort au vue de la réponse de CMASSE) que pour pouvoir renvoyer le document PDF, il me faudrait utiliser un format BLOB.
Je comprends que ce n'est pas la solution à exploiter.
Par contre je ne vois pas comment procéder, je vais reprendre mes recherches en ce sens...
Bien entendu: toutes informations, conseils, explications sont les bienvenus...
Merci
(Le ausecafé71 ne fait pas référence au mime type...)
Peut être n'ai-je pas donné assez de détail quant à mon besoin...
Nous cherchons à créer un programme RPGLE qui serait exposé en tant que web service SOAP. Ce web servie (et donc le programme RPGLE) recevrait en entrée un identifiant de document et fournirait en retour le document PDF correspondant.
Je pensais (visiblement à tort au vue de la réponse de CMASSE) que pour pouvoir renvoyer le document PDF, il me faudrait utiliser un format BLOB.
Je comprends que ce n'est pas la solution à exploiter.
Par contre je ne vois pas comment procéder, je vais reprendre mes recherches en ce sens...
Bien entendu: toutes informations, conseils, explications sont les bienvenus...
Merci
Ne trouvant que peu de solution sur le net, j'ai mis en place les API de SCOTT KLEMENT (IFSIO et BASE64).
Ainsi via mon programme RPGLE je retourne bien mon PDF converti en binaire en réponse à l'appel du web service.
Je me heurte maintenant à un nouveau problème: comment reconvertir le binaire reçu en un fichier PDF ???
Actuellement si je récupère les données en binaire et que je les place dans notepad++ par exemple et que je fais un saveas xxxxx.pdf : le pdf n'est pas lisible, acrobat refuse de l'ouvrir en signalant qu'il n'est pas bien formaté ou qu'il est corrompu...
Quelqu'un a t'il déjà rencontré ce type de problème et surtout quelqu'un aurait-il une solution à m'apporter, svp ?
Merci
Ainsi via mon programme RPGLE je retourne bien mon PDF converti en binaire en réponse à l'appel du web service.
Je me heurte maintenant à un nouveau problème: comment reconvertir le binaire reçu en un fichier PDF ???
Actuellement si je récupère les données en binaire et que je les place dans notepad++ par exemple et que je fais un saveas xxxxx.pdf : le pdf n'est pas lisible, acrobat refuse de l'ouvrir en signalant qu'il n'est pas bien formaté ou qu'il est corrompu...
Quelqu'un a t'il déjà rencontré ce type de problème et surtout quelqu'un aurait-il une solution à m'apporter, svp ?
Merci
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
base64
Effectivement, j'ai un incident d'ouvert (PMR), IBM ne sait pas me dire si le serveur de web services sait retourner du binaire. (a suivre...)
les API de Scott Klement, sont une bonne idée, du coup comme vous faites "à la main", vous faites comme vous voulez
Mais pourquoi BASE64 ? (c'est un format plutôt destiné aux attachements dans les mails)
et continuez vous à utiliser le serveur d'application intégré ou bien faites vous directement du CGI derrière Apache ?
les API de Scott Klement, sont une bonne idée, du coup comme vous faites "à la main", vous faites comme vous voulez

Mais pourquoi BASE64 ? (c'est un format plutôt destiné aux attachements dans les mails)
et continuez vous à utiliser le serveur d'application intégré ou bien faites vous directement du CGI derrière Apache ?
Christian Massé (Volubis.fr)
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
base64
SI vous codez en base64 (c'est effectivement supporté par HTTP) indiquez bien dans les entêtes (HTTP header)
Code : Tout sélectionner
Content-Type: application/pdf
Content-Transfer-Encoding: base64
Christian Massé (Volubis.fr)
Bonjour,
Malheureusement je ne maitrise pas vraiment ce que je fais...
Je tatonne...
Je suis passé par les API de Scott KLEMENT car j'ai trouvé un forum où une personne indiquait qu'elle avait réussit à envoyer son document en retour de web service SOAP via ces solutions.
J'ai donc essayé de faire de la même façon (conversion du .PDF en BASE64 pour récupérer une chaine de caractère que je peux fournir en paramètre OUTPUT du web service).
Cela fonctionne...
Mais à présent je ne sais pas comment retransformer cette chaine en .PDF.
J'utilise en effet l'interface IBM Web Admninistration for i.
Par contre je retourne une chaine de caractère brute, et donc aucun HTTP Header ou attachement particulier...
Merci
Malheureusement je ne maitrise pas vraiment ce que je fais...
Je tatonne...
Je suis passé par les API de Scott KLEMENT car j'ai trouvé un forum où une personne indiquait qu'elle avait réussit à envoyer son document en retour de web service SOAP via ces solutions.
J'ai donc essayé de faire de la même façon (conversion du .PDF en BASE64 pour récupérer une chaine de caractère que je peux fournir en paramètre OUTPUT du web service).
Cela fonctionne...
Mais à présent je ne sais pas comment retransformer cette chaine en .PDF.
J'utilise en effet l'interface IBM Web Admninistration for i.
Par contre je retourne une chaine de caractère brute, et donc aucun HTTP Header ou attachement particulier...
Merci
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
je viens d'avoir la réponse du point service.
A aujourd'hui, le serveur de web service n'est pas prévu pour retourner de la donnée binaire.
A aujourd'hui, le serveur de web service n'est pas prévu pour retourner de la donnée binaire.
je pense qu'il faut passer directement en CGI derrière Apache.they should submit a request for design change for this as it is not currently a supported feature.
Christian Massé (Volubis.fr)
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
CGI
je ne pense pas que le serveur IWS puisse retourner du binaire (dixit IBM)
ce pgm fonctionne chez moi en CGI (attention ça pique les yeux)
ce pgm fonctionne chez moi en CGI (attention ça pique les yeux)
Code : Tout sélectionner
**FREE
ctl-opt pgminfo(*pcml : *module) ;
// LINKER CE PGM AVEC QTMHCGI *SRVPGM
dcl-s photods SQLTYPE(blob : 102400);
dcl-s SORTIE char(102040);
Dcl-s SORTIELG int(10) INZ(%LEN(SORTIE));
dcl-ds APIERR ;
ERRLG int(10) INZ(%len(apierr)) ;
ERRLGDISPO int(10);
ERRID char(7);
ERRRESERVE CHAR(1);
ERRMSG CHAR(50);
end-ds;
dcl-pr Qwrite EXTPROC('QtmhWrStout');
wsortie like(sortie);
wsortieLG like(sortielg);
wAPIERR likeds(apierr);
end-pr;
dcl-s EOL char(1) inz(x'15');
dcl-s empno char(6);
empno = '000130';
EXEC SQL
SELECT Picture INTO :Photods
FROM Db2sample/Emp_Photo
WHERE Empno = :Empno AND Photo_Format = 'gif';
if sqlcode = 0;
sortie = 'Content-type: image/gif' +EOL + EOL +
%subst(photods_data : 1 : photods_len) +
EOL ;
sortielg = %len(%trimr(sortie));
QWRITE(sortie : sortielg : apierr);
ENDIF;
*inLR = *on;
Christian Massé (Volubis.fr)
-
- Site Admin
- Messages : 813
- Enregistré le : mer. 14 févr. 2007, 18:00:03
- Localisation : Nantes
- Contact :
base64
J'ai trouvé (pour les web services REST) en passant en base64 avec l'API de scott KLEMENT
Code : Tout sélectionner
**FREE
ctl-opt pgminfo(*pcml : *module) ;
dcl-pi *n;
empno char(6);
image char(102400);
httpstatus int(10);
httpheader char(100) dim(10);
END-PI;
dcl-s base64 char(102000);
dcl-s photods SQLTYPE(blob : 102400);
/copy base64_h
EXEC SQL
SELECT Picture INTO :Photods
FROM Db2sample/Emp_Photo
WHERE Empno = :Empno AND Photo_Format = 'gif';
if sqlcode = 0;
httpstatus = 200;
base64_encode(%addr(photods_data):photods_len:
%addr(base64):%size(base64));
image = '<img src="data:image/gif;base64,' + base64 + '">';
httpheader(1) = 'Content-Type: text/html';
httpheader(2) = 'Content-Transfer-Encoding: base64';
else;
httpstatus = 404;
ENDIF;
*inLR = *on;
Christian Massé (Volubis.fr)