IWS service SOAP - namespace des elements en retour

configuration Apache, Zend et PHP , Web services
Répondre
jer_mest60
Messages : 3
Enregistré le : mer. 14 juin 2023, 07:23:34

IWS service SOAP - namespace des elements en retour

Message par jer_mest60 »

Bonjour,

Nous devons échanger des requêtes SOAP avec un partenaire qui impose la structure de la request et de la réponse, nous avons fait le choix d'utiliser le serveur IWS intégré car l'application métier est conçue en RPGLe, l'exposition est simple avec ce procédé.

Mais ... Autant nous arrivons à lire la request en jouant avec la customization du wsdl, par contre la réponse c'est plus compliqué car des namespace précis sont attendus en retour je ne vois pas comment les gérer. Nous répondons mais la structure n'est "lisible" par le partenaire car il manque des namespace.

Côté RPG, procédure avec paramètre d'entrée et de sortie, imbrication de DS rien de plus normal :
L'interface :

Code : Tout sélectionner

dcl-proc DdeValoPecracAudRequest export;
dcl-pi *n extproc(*dclcase);
 Pecrac_Aller likeds(ds_VIAMEDIS_Flux_Audioprothese_Aller) const;
 Pecrac_Aud_Retour likeds(ds_VIAMEDIS_Flux_Audioprothese_Retour);
end-pi; 
La request :

Code : Tout sélectionner

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
   <soap:Body>
      <ns16:DdeValoPecracAudRequest xmlns="vm:pecrac:audioprothese:entete_v1.xsd" xmlns:ns2="vm:pecrac:audioprothese:ps_v1.xsd" xmlns:ns16="http://interface.pecracAudioprothese.webservice.capsante.net/">
  <ns8:Pecrac_Aller xmlns="vm:pecrac:audioprothese:entete_v1.xsd" xmlns:ns2="vm:pecrac:audioprothese:ps_v1.xsd" xmlns:ns3="vm:pecrac:audioprothese:assure_v1.xsd" xmlns:ns4="vm:pecrac:audioprothese:beneficiaire_v1.xsd" xmlns:ns5="vm:pecrac:audioprothese:dossier_v1.xsd" xmlns:ns6="vm:pecrac:audioprothese:actes_v1.xsd" xmlns:ns7="vm:pecrac:audioprothese:infosfiltre_v1.xsd" xmlns:ns8="vm:pecrac:audioprothese:pecrac_flux_aller_v1.xsd">
    <Entete_Aud>
        <DateEmission>2023-05-15</DateEmission>
        <HeureEmission>15:05:57</HeureEmission>
        <Origine>XXXXX</Origine>
        <IDUnique>1684155957780</IDUnique>
        <TypeMessage>XXXX</TypeMessage>
        <NatureMessage>TEST</NatureMessage>
        <TypeDemande>XXXXX</TypeDemande>
    </Entete_Aud>
    <ns2:PS_Aud>
        <ns2:Finess>912607223</ns2:Finess>
        <ns2:RaisonSociale>PDS</ns2:RaisonSociale>
        <ns2:NomPs>UUUUUUU</ns2:NomPs>
        <ns2:PrenomPs>JULIEXXX</ns2:PrenomPs>
        <ns2:Adresse1>11 GRANDE RUE</ns2:Adresse1>
        <ns2:Adresse3></ns2:Adresse3>
        <ns2:Adresse4></ns2:Adresse4>
        <ns2:CodePostal>91800</ns2:CodePostal>
        <ns2:Ville>BRUNOY</ns2:Ville>
    </ns2:PS_Aud>
 </ns8:Pecrac_Aller>
</ns16:DdeValoPecracAudRequest>
</soap:Body>
</soap:Envelope>
Notre réponse :

Code : Tout sélectionner

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <DdeValoPecracAudResponse xmlns="http://interface.pecracAudioprothese.webservice.capsante.net/">
            <Pecrac_Aud_Retour>
                <Entete_Aud>
                    <DateEmission>2023-05-15</DateEmission>
                    <HeureEmission>15:05:57</HeureEmission>
                    <Origine>XXXXX</Origine>
                    <IDUnique>1684155957780</IDUnique>
                    <TypeMessage>REPONSE_XXXXX</TypeMessage>
                    <NatureMessage>TEST</NatureMessage>
                    <TypeDemande>XXXXX_RESEAU</TypeDemande>
                </Entete_Aud>
                <Dossier_Aud>
                    <Numero>229635482</Numero>
                    <NumeroExterne></NumeroExterne>
                    <CodeActe>PAZ</CodeActe>
                    <DateCreation>2023-05-15</DateCreation>
                    <HeureCreation>15:05:56</HeureCreation>
                    <DatePrescription>2023-05-11</DatePrescription>
                </Dossier_Aud>
            </Pecrac_Aud_Retour>
        </DdeValoPecracAudResponse>
    </soap:Body>
</soap:Envelope>
Réponse attendue :

Code : Tout sélectionner

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
    <soap:Body>
        <DdeValoPecracAudResponse xmlns="http://interface.pecracAudioprothese.webservice.capsante.net/">         
<ns5:Pecrac_Aud_Retour xmlns:ns5="vm:pecrac:audioprothese:pecrac_flux_retour_v1.xsd" xmlns="vm:pecrac:audioprothese:entete_v1.xsd" xmlns:ns2="vm:pecrac:audioprothese:dossier_v1.xsd">
   <Entete_Aud>
      <DateEmission>2023-03-08</DateEmission>
      <HeureEmission>12:39:09</HeureEmission>
      <Origine>XXXXX</Origine>
      <IDUnique>1678275549017</IDUnique>
      <TypeMessage>REPONSE_XXXXXXX</TypeMessage>
      <NatureMessage>TEST</NatureMessage>
      <TypeDemande>XXXXXXX</TypeDemande>
   </Entete_Aud>
   <ns2:Dossier_Aud>
      <ns2:Numero>228635758</ns2:Numero>
      <ns2:NumeroExterne/>
      <ns2:CodeActe>PAU</ns2:CodeActe>
      <ns2:DateCreation>2023-03-08</ns2:DateCreation>
      <ns2:HeureCreation>12:39:08</ns2:HeureCreation>
      <ns2:DatePrescription>2023-03-08</ns2:DatePrescription>
   </ns2:Dossier_Aud>
</ns5:Pecrac_Aud_Retour>
</DdeValoPecracAudResponse>
</soap:Body>
</soap:Envelope>
La différence se trouve dans les préfix d'éléments et les namespace ajoutés. Savez-vous si il est possible gérer ça avec le serveur IBMi IWS ? j'ai cherché sans succès.

Si quelqu'un à déjà connu cette situation, quel a été le choix de solution ou de contournement ? Par le pcml, modification de code java généré par IWS ?

Merci par avance à toute la communauté IBMi, c'est un vrai appel à l'aide.

Jérémie.

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

Re: IWS service SOAP - namespace des elements en retour

Message par nbonnet »

Bonjour Jérémie,

Le serveur IWS ne gère qu'un unique namesapce pour l'ensemble de la réponse, donc à priori impossible en conservant l'automatisme.

Seule solution que j'imagine :
faire un service REST, en POST + XML
1 seul paramètre en sortie qui contient le SOAP formaté par vos soins dans le programme ...

Ce n'est pas très confort mais cela fonctionnerait
Nathanaël

jer_mest60
Messages : 3
Enregistré le : mer. 14 juin 2023, 07:23:34

Re: IWS service SOAP - namespace des elements en retour

Message par jer_mest60 »

Effectivement c'était l'étape d'après mais j'attendais l'avis d'un expert :D
Reste à parser / deparser avec les soucis potentiels de codage mais ça devrait le faire. Hop je vais tester.

Merci Nathanaël pour ton retour rapide et ton professionnalisme.

Sauf que notre client nous envoi une requête HTTP avec Content-Type "text/xml" ... ce qui n'est pas accepté par l'IBMi sur un webService en mode REST, "application/xml" attendu.

J'ai l'impression d'être coincé. Y a-t-il d'autres solutions ? ILEastic ? CGI ? ARCAD Api ? Profound API ?

jer_mest60
Messages : 3
Enregistré le : mer. 14 juin 2023, 07:23:34

Re: IWS service SOAP - namespace des elements en retour

Message par jer_mest60 »

Hello,

Finalement le client dispose d'une gateway API et a pu modifier le type de contenu en "appllication/xml"

La solution proposée par Nathanael était donc la bonne : exposition REST POST application/xml et gestion du contenu en retour. Adieu le SOAP :P

Merci encore.

Nathaniel
Messages : 1
Enregistré le : jeu. 12 oct. 2023, 06:19:38

Re: IWS service SOAP - namespace des elements en retour

Message par Nathaniel »

Salut,

Pour résoudre ce problème, vous pouvez envisager de personnaliser la génération du WSDL et de contrôler les namespaces à l'aide de PCML (Program Call Markup Language). En modifiant le code Java généré par IWS, vous pouvez ajuster les namespaces selon les besoins de votre partenaire.

Cependant, je vous recommande également de consulter la documentation IBMi IWS pour voir s'il existe des options de personnalisation avancées ou des correctifs qui peuvent gérer ces spécificités de manière plus fluide. Il se peut que des mises à jour ou des ajustements mineurs dans la configuration comme j'ai fait sur mon pc que j'ai d'ailleurs trouvé sur ce site puissent résoudre votre problème sans nécessiter une modification manuelle du code Java.

Répondre