IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Perl Discussion :

SOAP::Lite -> génération d'espaces imprévus


Sujet :

Langage Perl

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut SOAP::Lite -> génération d'espaces imprévus
    Bonjour à tous,
    après de multiples recherches je vous pose la question en croisant les doigts pour que quelqu'un ait la réponse.

    Le contexte est le suivant :
    j'interroge un webservice à l'aide de Perl et de la librairie SOAP::Lite.

    La requête a envoyer semble excessivement simple :

    <soapenv:Envelope>
    <soapenv:Header/>
    <soapenv:Body>
    <recupFichier>LE_FICHIER_QUE_JE_VEUX</recupFichier>
    </soapenv:Body>
    </soapenv:Envelope>


    Le problème est que SOAP::lite refuse obstinément de générer le tag "<recupFichier>LE_FICHIER_QUE_JE_VEUX</recupFichier>" sans rajouter des gensym autour du nom du fichier.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $soap->recupFichier('LE_FICHIER_QUE_JE_VEUX');
    génère :

    <recupFichier>
    <c-gensym3 xsi:type="xsd:string">LE_FICHIER_QUE_JE_VEUX</c-gensym3>
    </recupFichier>

    Evidemment cela empêche la requête d'aboutir.

    J'ai trouvé une méthode qui fonctionne partiellement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $document="LE_FICHIER_QUE_JE_VEUX";
    $elem= SOAP::Data->type('xml' => $document);
    $soap->recupFichier($elem);
    Ceci me génère alors :

    <soapenv:Envelope>
    <soapenv:Header/>
    <soapenv:Body>
    <recupFichier>££££££LE_FICHIER_QUE_JE_VEUX</recupFichier>
    </soapenv:Body>
    </soapenv:Envelope>

    ATTENTION : dans le texte ci dessus, les "£" remplacent des " " (caractères d'espacement)


    Tout le problème réside dans les 6 espaces qui précèdent le nom du fichier que je veux récupérer...Le nom n'est pas reconnu par le serveur et donc la requête échoue.

    Mes questions sont donc :

    1) Quelqu'un connait-il une méthode propre pour passer un paramètre directement dans l'appel de la méthode et qui n'utilise pas de tag et ne génère pas de gensym ?

    et/ou

    2) Quelqu'un sait-il comment supprimer les caractères d'espacements parasites qui sont créés dans la méthode que j'ai trouvée.

    Merci par avance de votre aide.

  2. #2
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je ne connais pas SOAP, mais le problème peut-il venir des caractères utilisés dans le nom de fichier ?
    As-tu essayé avec un nouveau de fichier purement ascii du style "toto.txt" ? (la requête va échouer par absence du fichier sur le serveur, mais tu peux contrôle la présence du tag gensym).
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  3. #3
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Je ne sais pas si ça peux aider, mais on trouve ça sur GG:
    http://stackoverflow.com/questions/6...-get-rid-of-it
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

  4. #4
    Nouveau Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Citation Envoyé par Philou67430 Voir le message
    Je ne connais pas SOAP, mais le problème peut-il venir des caractères utilisés dans le nom de fichier ?
    As-tu essayé avec un nouveau de fichier purement ascii du style "toto.txt" ? (la requête va échouer par absence du fichier sur le serveur, mais tu peux contrôle la présence du tag gensym).
    Merci pour ta réponse !

    Hélas, non, les noms de fichiers sont purement -et strictement- ASCII.

    Quant à la référence que tu m'as donnée, je l'avais aussi trouvée, mais cela ne fonctionne pas dans mon cas.

    D'après ce qui est dit dans l'article, SOAP s'attend à ce que les paramètres passés pour une méthode soient "nommés" (
    Whenever SOAP::Lite feels a name should be present (...) when none is provided, it will "gensym" to clarify the output.
    ).

    Autrement dit, SOAP::lite s'attend à ce que les paramètres soient toujours passés dans des tags mais comme ce n'est pas le cas du webservice que j'interroge, je suis coincé et dois m'adapter à ce défaut.

    Pour l'heure je contourne le problème en passant par curl et donc en écrivant l'enveloppe complète mais au retour je dois "bidouiller" la réponse pour en extraire les attachements (xop+xml)... Bref, ce n'est pas élégant mais ça fonctionne.

  5. #5
    Expert confirmé

    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    3 577
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Avril 2009
    Messages : 3 577
    Points : 5 753
    Points
    5 753
    Par défaut
    Et avec SOAP::Simple ?
    Plus j'apprends, et plus je mesure mon ignorance (philou67430)
    Toute technologie suffisamment avancée est indiscernable d'un script Perl (Llama book)
    Partagez vos problèmes pour que l'on partage ensemble nos solutions : je ne réponds pas aux questions techniques par message privé
    Si c'est utile, say

Discussions similaires

  1. Incompatibilité http_proxy et SOAP::Lite ?
    Par Gold.strike dans le forum Modules
    Réponses: 0
    Dernier message: 16/04/2008, 13h32
  2. Réponses: 5
    Dernier message: 15/04/2008, 15h52
  3. Appel service Web avec SOAP:Lite
    Par phlux dans le forum Web
    Réponses: 1
    Dernier message: 09/04/2008, 16h56
  4. soap: php vers perl soap::lite
    Par manuds dans le forum Web
    Réponses: 7
    Dernier message: 01/03/2008, 22h40
  5. Consommer un webservice asp.net depuis soap::lite
    Par bleuerouge dans le forum Web
    Réponses: 0
    Dernier message: 11/01/2008, 15h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo