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

XML/XSL et SOAP Discussion :

[SOAP] - Transfert de fichier EMCS


Sujet :

XML/XSL et SOAP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut [SOAP] - Transfert de fichier EMCS
    Bonjour à tous,

    Dans le cadre d'un développement, je dois envoyer des données aux accises.
    (déclaration pour les douanes)

    Ces données (message EMCS) doivent transiter par l'intermédiaire de leur WebService.

    Celà se fait via une fonction submitdraft qui reçoit comme paramètre un objet
    Cet Objet est composé d'objet, qui son composé d'objet, qui sont .... etc

    Je travailles en delphi.
    Je recrée donc un objet correspondant à ce qu'il faut, je remplit les données en respectant les type décrit dans les fichier xsd qui nous sont fournit.


    Mon problème est que lorsque j'utilise la fonction d'envoi "submitdraft" et que je lui passe mon objet "remplit" en paramètre, j'obtient le message suivant.

    "first chance" exception. .... Classe d'exception ERemotableException avec un message "Internal Error".

    D'après les infos que j'ai pu trouver sur le net, celà signifie que la "convertion" de mon objet en SOAP pose problème.
    Dans la pile d'appel, j'ai un TOPToSoapDomConvert.ProcessFault


    Je n'arrive pas à comprendre ce qui ne va pas.
    Je trouverais ça plus simple d'envoyer un "string" XML, mais malheureusement on à pas le choix, il faut utiliser leur objet.


    Si vous avez des idées, des pistes, ou besoin d'autres infos ??

    Merci d'avance.

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par vin100H Voir le message
    Je trouverais ça plus simple d'envoyer un "string" XML, mais malheureusement on à pas le choix, il faut utiliser leur objet.
    Si c'est un webservice, tu programmes tes appels comme tu veux non ?
    Je me rappelle avoir dû écrire un client d'utilisation d'un service SOAP plein d'extensions SOAP à la mords-moi-le-nœud, qui étaient une folie furieuse à intégrer tous ensembles dans les biblis SOAP connues, à supposer que ce soit seulement possible.

    Finalement j'y suis arrivé assez vite, et seule ma boîte a pu fournir un client qui marche, on nous a donc demandé nos méthodes. Pas de bibli SOAP du tout, tout en XML over HTTP pour décrire l'échange SOAP. Ça marchait très bien et c'était pas spécialement compliqué.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par thelvin Voir le message
    tout en XML over HTTP pour décrire l'échange SOAP. Ça marchait très bien et c'était pas spécialement compliqué.
    J'ai déjà fait un webservice et un client pour lesquels les transfert se font via des simple "string" qui correspondre à de l'xml.
    Il suffit alors de récupérer le string et de le sauver dans un fichier xml, ou le lire ou autre... c'est effectivement assez simple.


    Mais dans le cas présent, je suis obligé d'utiliser une fonction du WebService qui n'a comme seule et unique paramètre ce un objet.


    J'ai avancé un peu, j'ai pu récupérer le contenu de la "SOAPRequest" pour essayer de comparer avec un fichier exemple (fourni par les détenteur du webservice).

    J'ai des différence, mais je ne comprend pas pourquoi

    Exemple fournit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    env:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:v3="http://emcs.minfin.fgov.be/wsdl/MSAMovement/v3" xmlns:v31="http://emcs.minfin.fgov.be/xsd/MSAMessage/v3" xmlns:v32="http://emcs.minfin.fgov.be/xsd/Context/v3"> 
            <soapenv:Header/> 
            <soapenv:Body> 
                    <v3:submitDraftAADRequest> 
                            <v31:Context/> 
                            <ie:IE815 xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns0="http://emcs.dgtaxud.ec/v10/cd815/ie" xmlns:ns1="http://emcs.dgtaxud.ec/v10/tms" xmlns:ie="urn:publicid:-:EC:DGTAXUD:EMCS:PHASE3:IE815:V1.51" xmlns:tms="urn:publicid:-:EC:DGTAXUD:EMCS:PHASE3:TMS:V1.51"> 
                                    <ie:Header> 
                                            <tms:MessageSender>zzz</tms:MessageSender> 
                                            <tms:MessageRecipient>zzz</tms:MessageRecipient> 
                                            <tms:DateOfPreparation>zzz</tms:DateOfPreparation> 
                                            <tms:TimeOfPreparation>zzz</tms:TimeOfPreparation> 
                                            <tms:MessageIdentifier>zzz</tms:MessageIdentifier> 
                                    </ie:Header> 
                                    <ie:Body> 
                                            <ie:SubmittedDraftOfEAD> 
                                                    <ie:Attributes>

    Exemple de la request que j'obtient:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    <?xml version="1.0"?>
    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">
    	<SOAP-ENV:Body xmlns:NS1="http://emcs.minfin.fgov.be/wsdl/MSAMovement/v3" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" xmlns:NS2="urn:publicid:-:EC:DGTAXUD:EMCS:PHASE3:EMCS:V1.51">
    		<NS1:submitDraftAAD>
    			<N_AAD_SUB>
    				<Context/>
    				<IE815>
    					<Header>
    						<MessageSender>zzz</MessageSender>
    						<MessageRecipient>zzz</MessageRecipient>
    						<DateOfPreparation xsi:nil="true"/>
    						<TimeOfPreparation xsi:nil="true"/>
    						<MessageIdentifier>zzz</MessageIdentifier>
    					</Header>
    					<Body>
    						<SubmittedDraftOfEAD>
    							<Attributes>

    il y à une différence au niveau de la déclaration des type que je ne comprend pas ... comment faire en sorte que ces type soient déclaré dans le IE815 comme dans l'exemple.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par vin100H Voir le message
    Mais dans le cas présent, je suis obligé d'utiliser une fonction du WebService qui n'a comme seule et unique paramètre ce un objet.
    ... Et tu n'as toujours pas dit qu'est-ce qui peut possiblement t'obliger à ça.
    Mais bon. Je veux bien te croire sur parole, et en fait vu les exemples donnés, ça devrait être géré facilement par une bibliothèque SOAP.

    Tes histoires, c'est des problèmes de namespaces. ie, tms, ns0, ns1, ce sont des namespaces, qu'il faut gérer.
    ... Par contre je connais rien au Delphi et je peux pas t'aider. Je sais gérer ça en Java avec Axis, et puis de préférence on a même pas besoin de le faire parce qu'on se base sur le WSDL du service. Mais en Delphi, je sais pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par thelvin Voir le message
    ... Et tu n'as toujours pas dit qu'est-ce qui peut possiblement t'obliger à ça.
    Mais bon. Je veux bien te croire sur parole, et en fait vu les exemples donnés, ça devrait être géré facilement par une bibliothèque SOAP.
    Hello,

    ce qui peut m'obliger à ça ?
    Je dois pouvoir envoyer de manière automatique des infos aux service des douanes et accises.
    Le seul moyen mis à disposition pour effectuer ça de manière automatique est leur webservice, dans lequel je dois utiliser la fonction en question.


    Citation Envoyé par thelvin Voir le message
    Tes histoires, c'est des problèmes de namespaces. ie, tms, ns0, ns1, ce sont des namespaces, qu'il faut gérer.
    ... Par contre je connais rien au Delphi et je peux pas t'aider. Je sais gérer ça en Java avec Axis, et puis de préférence on a même pas besoin de le faire parce qu'on se base sur le WSDL du service. Mais en Delphi, je sais pas.
    Je suis d'accord avec toi, en théorie, on importe le wsdl, et le soap généré est correcte, on s'occupe de "rien", à par de remplir les données.

    Mais ici c'est pas le cas.

    De là à savoir si le problème vient de delphi, du wsdl même, ou d'un truc à faire que je ne fait pas ????

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 551
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 551
    Points : 21 607
    Points
    21 607
    Par défaut
    Citation Envoyé par vin100H Voir le message
    ce qui peut m'obliger à ça ?
    Je dois pouvoir envoyer de manière automatique des infos aux service des douanes et accises.
    Le seul moyen mis à disposition pour effectuer ça de manière automatique est leur webservice, dans lequel je dois utiliser la fonction en question.
    Ça j'avais compris. Ce que je comprends pas, c'est pourquoi tu es obligé d'utiliser un processeur SOAP, au lieu de simplement envoyer des requêtes HTTP que tu construis toi-même sur le webservice.

    Mais bon... Vu l'exemple donné, ça ne devrait pas être compliqué de passer par un processeur SOAP, de toute façon.

    Citation Envoyé par vin100H Voir le message
    Je suis d'accord avec toi, en théorie, on importe le wsdl, et le soap généré est correcte, on s'occupe de "rien", à par de remplir les données.

    Mais ici c'est pas le cas.
    Argh . Bon ben je saurais le faire en Java avec Axis, mais Delphi j'y connais rien.

    Citation Envoyé par vin100H Voir le message
    De là à savoir si le problème vient de delphi, du wsdl même, ou d'un truc à faire que je ne fait pas ????
    Tu as dit que ce qui te pose problème, c'est d'avoir les préfixes ie: et tms: sur les éléments IE815 et autres.
    Les préfixes, ça sert à mettre les éléments dans un namespace. Dans l'exemple, le préfixe ie: est associé au namespace "urn:publicid:-:EC:DGTAXUD:EMCS:PHASE3:IE815:V1.51". On le voit grâce à la déclaration xmlns:ie.
    De même, le préfixe tms: est associé au namespace "urn:publicid:-:EC:DGTAXUD:EMCS:PHASE3:TMS:V1.51". Ce n'est pas le même.

    Ce que tu dois faire, c'est mettre les éléments IE815 et Header dans le namespace "urn:publicid:-:EC:DGTAXUD:EMCS:PHASE3:IE815:V1.51", et les éléments en-dessous dans le namespace "urn:publicid:-:EC:DGTAXUD:EMCS:PHASE3:TMS:V1.51".
    Comment faire ? J'en sais rien, Delphi connais pas.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Août 2007
    Messages
    74
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2007
    Messages : 74
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par thelvin Voir le message
    Ce que tu dois faire, c'est mettre les éléments IE815 et Header dans le namespace "urn:publicid:-:EC:DGTAXUD:EMCS:PHASE3:IE815:V1.51", et les éléments en-dessous dans le namespace "urn:publicid:-:EC:DGTAXUD:EMCS:PHASE3:TMS:V1.51".
    Comment faire ? J'en sais rien, Delphi connais pas.
    J'ai pu comme tu l'indique, réassocier les éléments à leur bon namespace en "bidouillant" le SoapRequest avant son envoi (via le beforeexecute).

    Celà ne me plait que moyennement, mais ça marche.

    Je cloture ce poste, et en lance un autre sur un problème de conversion XsTime

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Web service soap transfert de fichier avec reprise
    Par Zugg dans le forum Web & réseau
    Réponses: 6
    Dernier message: 23/07/2013, 09h41
  2. [Web Service] transfert de fichier en MTOM sous SOAP
    Par CaviarNAS dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 25/10/2010, 11h33
  3. Réponses: 17
    Dernier message: 15/05/2007, 18h35
  4. Transfert de fichier par ftp
    Par schub1015 dans le forum MFC
    Réponses: 3
    Dernier message: 14/01/2004, 17h53
  5. [Socket]Transfert de fichier
    Par Aminos dans le forum Entrée/Sortie
    Réponses: 4
    Dernier message: 19/04/2003, 13h58

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