OVH Cloud OVH Cloud

Mettre en parametre d'une methode SOAP du xml

6 réponses
Avatar
Twist
Bonjour,

J'aimerais savoir si on peut mettre en parametre d'une methode appel=E9e
en SOAP du XML
Ex: methode execute(String chaineXml)

Le but =E9tant l'interoperabilit=E9, Y a t'il un autre moyen d'envoyer
cette xml ou bien les informations complexes qu'il contient?.



Merci,

Twist.

Framework utilis=E9 : Spring.
Langage: Java.
Technologie pour Soap : Axis.

6 réponses

Avatar
Hervé AGNOUX
Twist wrote:


J'aimerais savoir si on peut mettre en parametre d'une methode appelée
en SOAP du XML
Ex: methode execute(String chaineXml)



Oui, et heureusement : on peut mettre une chaîne de caractères en paramètre
d'une méthode SOAP.

Je n'ai pas fait l'essai, mais normalement, le système soap devrait esquéper
tous les caractères à escquéper pour que la chaîne XML passe en tant que
valeur d'un élément XML.

Le but étant l'interoperabilité, Y a t'il un autre moyen d'envoyer
cette xml ou bien les informations complexes qu'il contient?.



Oui : ne pas faire du tout de SOAP :-)


--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
Twist
Malheureusement j'ai essayé et les balises XML posent un problème
quand elles sont dans une enveloppe d'un message SOAP.
Si on met des CDATA cela marche mais si dans le message XML encadré
par des CDATA il y a un CDATA là ca plante.

Si quelqu'un à une idée ou une piste je suis preneur.

Merci,

Twist.
Avatar
Hervé AGNOUX
Twist wrote:

Malheureusement j'ai essayé et les balises XML posent un problème
quand elles sont dans une enveloppe d'un message SOAP.
Si on met des CDATA cela marche mais si dans le message XML encadré
par des CDATA il y a un CDATA là ca plante.



Mais comment fais-tu ton message SOAP ? Si tu le fais par un DOM, c'est la
tuyauterie qui s'occupe de tout, et transforme les "<" en &gt; et ainsi de
suite, lors de la sérialization du message. Si cela ne se produit pas,
c'est qu'il y a un bug, et plutôt grave, me semble-t-il, car cela doit être
fait quelque soit la chaine de caractères passée en paramètre.


--
Hervé AGNOUX
http://www.diaam-informatique.com

Avatar
Twist
En faite j'ai un service implémenté avec Spring, un simple echo.
Si on traduit au niveau soap cela donne un truc du genre:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:echoString xmlns:ns1="http://soapinterop.org/">
<testParam xsi:type="xsd:string">Hello!</testParam>
</ns1:echoString>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Mon problème c'est que si le parametre de l'echo c'est du Xml cela ne
passe pas à cause des balises.
Je pourrais les encoder a la volée mais ce n'est pas le but,
j'aimerais garder du xml.

Aprés recherche j'ai trouvé qu'on pouvait utiliser des balises CDATA
mais cela empeche l'utilisation de ces memes balises dans l'xml en
parametre.
Ensuite sur le site d'Axis j'ai trouvé une requete SOAP du genre:


<schema targetNamespace="http://commerce.com/PO">
<complexType name="POType">
<sequence>
<element name="item" type="xsd:string"/>
<element name="quantity" type="xsd:int"/>
<element name="description" type="xsd:string"/>
</sequence>
</complexType>
<element name="PurchaseOrder" type="POType"/>
</schema>

Il y derriere cela deux notions interressantes:

On peut choisir le style du service dans le wsdl: wrapped ou document.

Mon probleme c'est que j'ai du mal à passer de mon premier service
echo à ce second par le biais de spring.

J'ai déjà regarder aussi le système des messages avec attachements
mais le probleme c'est que je ne vois pas non plus comment l'utiliser
avec Spring.

Une idée ?

Merci,
Avatar
Rémy
"Twist" a écrit dans le message de news:

En faite j'ai un service implémenté avec Spring, un simple echo.
Si on traduit au niveau soap cela donne un truc du genre:

<?xml version="1.0" encoding="UTF-8"?>
<SOAP-ENV:Envelope xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<SOAP-ENV:Body>
<ns1:echoString xmlns:ns1="http://soapinterop.org/">
<testParam xsi:type="xsd:string">Hello!</testParam>
</ns1:echoString>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Mon problème c'est que si le parametre de l'echo c'est du Xml cela ne
passe pas à cause des balises.
Je pourrais les encoder a la volée mais ce n'est pas le but,
j'aimerais garder du xml.


...

Une idée ?

Merci,


Je ne connais pas Spring, mais il me semble qu'on pourrait chercher à
remplacer le type xsd:string (qui correspond au String de typeParam) par un
type xsd:any.

Avatar
Twist
En faite j'ai mieux compris il faut utiliser un document style et nom
pas une requete soap en rpc.
Pour faire cela avec Spring je n'ai trouvé que Xfire. Techniquement
avec XMLBeans cela permet d'envoyer non pas des appels à une
procédure mais d'envoyer un document XML.
J'aurais bien aimé quelquechose qui fonctionne avec Castor.... Mais
pas trouvé.

Merci,

Olivier.