PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV 2025 → WD23 - WebService SOAP - Récupération XML
WD23 - WebService SOAP - Récupération XML
Iniciado por Lionel H., 07,mar. 2019 16:21 - No hay respuesta
Miembro registrado
7 mensajes
Publicado el 07,marzo 2019 - 16:21
Bonjour à tous,
j'ai réalisé en WD23 un WebService SOAP (coté serveur) avec une méthode : PushDATA qui consiste à récupérer un Flux XML envoyé par mon Fournisseur, puis lecture du contenu avec une procédure PG_XML_IMPORT.

problème rencontré :
----------------------
je ne récupère jamais son flux. il est toujours vide
j'ai fait le test d'un WebService (coté client) avec une fenetre et un bout de code et ça fonctionne.
j'ai fait un test avec l'utilitaire SOAP UI, ça ne fonctionne pas.


je ne sais plus quoi faire. Auriez-vous une idée ?

merci à vous
LH
=============================
PROCÉDURE PushData(sFluxXML est une chaîne)
s_DOCXML est une chaîne="DOCXML"

sFichierXML est une chaîne = "c:\temp\PushData_"+DateSys()+"_"+HeureSys()+".xml"
sFluxEntrant est une chaîne = sFluxXML
sFluxReponse est une chaîne
bResFlux est un booléen = Faux

fSauveTexte(sFichierXML,sFluxEntrant)
bCustomerID = Faux

QUAND EXCEPTION DANS
//ouverture du document
bResFlux = XMLDocument(s_DOCXML,sFluxEntrant)
SI bResFlux = Faux ALORS PI_FluxReponse("200")

//positionnement à la racine
XMLRacine(s_DOCXML)

//parcours du document
PG_XML_IMPORT(s_DOCXML)

//fin du document
XMLTermine(s_DOCXML)

PI_FluxReponse("OK")
FAIRE
bResFlux = Faux
PI_FluxReponse("100")
FIN
RENVOYER sFluxReponse


PROCÉDURE INTERNE PI_FluxReponse(sErreurCode)
SI PAS bResFlux ALORS
sFluxReponse=[
<success>false</success>
<errorMessage>%1</errorMessage>
]
sFluxReponse = ChaîneConstruit(sFluxReponse,sErreurCode)

SINON
sFluxReponse=[
<success>true</success>
<errorMessage>%1</errorMessage>
]
sFluxReponse = ChaîneConstruit(sFluxReponse,sErreurCode)
FIN
FIN

======================
PROCÉDURE PRIVÉE PG_XML_IMPORT(sDocXML, nNiveau=0)
nPositionXML est un entier
sElement est une chaîne
bAttribut est un booléen
bBalise est un booléen
sData est une chaîne

// Parcours de tous les éléments
XMLPremier(sDocXML)
TANTQUE PAS XMLEnDehors(sDocXML)
// Récupère les données de l'élément
sData = XMLDonnée(sDocXML)

//Type d'élément
bAttribut = Faux
bBalise = Faux
SELON XMLTypeElement(sDocXML)
CAS XMLAttribut // Attribut affiché entre côtes
sElement = XMLNomElément(sDocXML)
bAttribut = Vrai
CAS XMLBalise // Attribut affiché entre < et >
sElement = XMLNomElément(sDocXML)
bBalise = Vrai
AUTRE CAS // dont CAS XMLErreur
sElement = "Erreur XML"
FIN

// Il y a des données pour cet élément ?
SI ChaîneFormate(sData, ccSansPonctuationNiEspace + ccSansEspace + ccSansAccent) = "" ALORS
// Pas de données
SINON
// OK données
SELON sElement
CAS "groupName"
goXmlImport <- allouer un cXmlImport
goXmlImport.PL_Statut_Changer(StAjouter)
goXmlImport:m_GroupName = sData
CAS "key"
goXmlImport:m_Key = sData
CAS "value"
goXmlImport:m_Value = sData
goXmlImport.PL_Data_Enregistrer(goErreur)
//CAS "customerID"
// bCustomerID = vrai
//si GetGUIDid(sData) = "ACTIF" alors bCustomerID = vrai
AUTRE CAS
FIN
FIN

// Il y a des balises ou des attributs pour cet élément ?
SI XMLFilsExiste(sDocXML, XMLBalise + XMLAttribut) = Vrai ALORS
// Sauve la position actuelle
nPositionXML = XMLSauvePosition(sDocXML)
// Se positionne sur le fils
XMLFils(sDocXML)
// Parcourt le fils
PG_XML_IMPORT(sDocXML, nNiveau+1)
// Se repositionne comme avant le positionnement sur le fils
XMLRetourPosition(sDocXML, nPositionXML, XMLRPDéfaut)
FIN

// Suite du XML
XMLSuivant(sDocXML)
FIN

--
LH