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 :

[ORBEON]Parser une réponse SOAP


Sujet :

XML/XSL et SOAP

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut [ORBEON]Parser une réponse SOAP
    Bonjour à tous
    J'utilise Orbeon pour pouvoir interroger un site sharepoint à l'aide de requête SOAP

    Tout fonctionne bien, j'écris ma requête dans une instance, dans la soumission je remplace l'instance par la réponse et ainsi je vois la réponse.

    Cette réponse est assez verbeuse. C'est pour cela que j'aimerai la parser afin de récupérer les éléments qui m'intéressent. Or je n'arrive pas à accéder à la réponse. J'aurai besoin d'aide pour le faire

    Voici mon code :

    La requête :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xforms:instance id="GetListCollection-request">
    	<soapenv:Envelope>
    		<soapenv:Body>
    			<soap:GetListCollection/>
    		</soapenv:Body>
    	</soapenv:Envelope>
     </xforms:instance>

    Une instance pour la réponse (vide au départ):
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xforms:instance id="response">
                   <dummy/>
     </xforms:instance>


    La soumission :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <xforms:submission id="GetListCollection-submission" method="post"
                       action="http://site/{instance('params')/site}/_vti_bin/Lists.asmx"
                       ref="instance('GetListCollection-request')" replace="instance" instance="response"
    		   xxforms:username="{instance('params')/username}" 
    		   xxforms:password="{instance('params')/password}" 
    		   xxforms:domain="{instance('params')/domain}"  
                       mediatype="application/soap+xml; action=http://schemas.microsoft.com/sharepoint/soap/GetListCollection"/>

    Je peux donc visualiser la réponse en choisissant l'instance response mais j'aimerai la mettre en forme (parsage + résultat dans un tableau). J'ai donc mis un tableau pour accueillir cette réponse

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <xforms:group model="ws" ref="instance('response')" appearance="xxforms:fieldset">
       <xhtml:table border="1">			
    	<xhtml:tr>
    		<xhtml:td>  
    			<xforms:input ref="instance('response')/Lists/List">
    				<xforms:label ref="@ID"/>
    				<xforms:label>ID: </xforms:label>
    			</xforms:input>
    		</xhtml:td>
           </xhtml:td>
       </xhtml:table>
    </xforms:group>

    mais rien à faire, je ne récupère pas l'id

    Pour info, la réponse ressemble à ça :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    	<soap:Body>
    		<GetListCollectionResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
    		<GetListCollectionResult>
    			<Lists>
    				<List DocTemplateUrl="" DefaultViewUrl="/domain/Lists/Dossier1/AllItems.aspx" MobileDefaultViewUrl="" ID="{1260D61F-3A43-4B01-8006-7CA4E7BDDCAE}" ... /> 
    				<List DocTemplateUrl="" DefaultViewUrl="/domain/Lists/Dossier2/AllItems.aspx" MobileDefaultViewUrl="" ID="{DC3620EF-FE03-40A3-BCCC-523E0B9F7044}" ... /> 
    ...


    EDIT: sinon il n'y aurait pas moyen d'enregistrer la réponse dans un fichier xml dans quel cas, je saurai faire

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut
    Une petite avancé: je crois que c'est la redéfinition du xmlns dans la réponse qui pose problème
    En effet, pour tester j'ai créé une instance qui ressemble fortement à une réponse soap mais en retirant le xmlns du GetListItemsResponse

    Code xml : 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
     
    <xforms:instance id="test-instance">
    	<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    		<soap:Body>
    			<GetListItemsResponse>
    				<GetListItemsResult>
    					<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    						<rs:data ItemCount="2">
    							<z:row ows_GUID="{1}"/>
    							<z:row ows_GUID="{2}"/>
    						</rs:data>
    					</listitems>
    				</GetListItemsResult>
    			</GetListItemsResponse>
    		</soap:Body>
    	</soap:Envelope>
    </xforms:instance>

    (Dans la réponse soap c'est comme ça :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <GetListItemsResponse xmlns="http://schemas.microsoft.com/sharepoint/soap/">
    et le reste est la même chose )

    J'arrive à récupérer le GUID de cette façon :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <xforms:group model="ws" ref="instance('test-instance')" appearance="xxforms:fieldset">
    	<xhtml:table border="1">
    		<xhtml:tr>
    			<xhtml:td>  
    				<xforms:input ref="instance('test-instance')/soap:Body/GetListItemsResponse/GetListItemsResult/listitems/rs:data/z:row/@ows_GUID">
    					<xforms:label>ID: </xforms:label>
    				</xforms:input>
    			</xhtml:td>
                    </xhtml:tr>
           </xhtml:table>
    </xforms:group>

    Par contre si j'ajoute ce xmlns, je n'obtiens plus l'ID

  3. #3
    Membre éprouvé Avatar de alain.couthures
    Profil pro
    Gérant
    Inscrit en
    Avril 2007
    Messages
    902
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Gérant

    Informations forums :
    Inscription : Avril 2007
    Messages : 902
    Points : 1 247
    Points
    1 247
    Par défaut
    Oui, votre problème est certainement lié au namespace utilisé.

    En fait il s'agit d'une problématique XPath comme on en rencontre aussi avec XSLT et si vous ne mentionnez pas de préfixe, le préfixe par défaut est considéré.

    En fait, le préfixe n'est qu'un alias du namespace et c'est l'égalité des namespaces, et non des préfixes, qui est testée.

    Je vous conseille donc de déclarer le namespace de la réponse dans votre source XForms et d'y associer un préfixe perso, indépendamment de l'utilisation ou non d'un préfixe dans la réponse. Il faut ensuite que toutes vos expressions XPath comportent ce préfixe perso chaque fois que nécessaire.

    Avec XPath 2.0, implémenté dans Orbeon, vous pourriez utiliser la notation *:GetListItemsResponse pour récupérer l'élément quel que soit son namespace. A la demande de MarkLogic, j'ai aussi implémenté cela dans XSLTForms qui n'a qu'un moteur XPath 1.0 ...

    -Alain

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    795
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 795
    Points : 451
    Points
    451
    Par défaut
    Bonjour et merci de ta réponse

    Si j'ai bien compris, il me suffirait de déclarer le namespace de la réponse comme ceci par exemple :
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    <xhtml:html xmlns:t="http://schemas.microsoft.com/sharepoint/soap/">

    et modifier mon instance ainsi :
    Code xml : 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
    <xforms:instance id="test-instance">
    	<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    		<soap:Body>
    			<GetListItemsResponse xmlns:t="http://schemas.microsoft.com/sharepoint/soap/">
    				<GetListItemsResult>
    					<listitems xmlns:s="uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882" xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882" xmlns:rs="urn:schemas-microsoft-com:rowset" xmlns:z="#RowsetSchema">
    						<rs:data ItemCount="2">
    							<z:row ows_GUID="{1}"/>
    							<z:row ows_GUID="{2}"/>
    						</rs:data>
    					</listitems>
    				</GetListItemsResult>
    			</GetListItemsResponse>
    		</soap:Body>
    	</soap:Envelope>
    </xforms:instance>

    En effet, cela fonctionne avec l'instance que j'ai crée mais pas avec la réponse soap puisque celle ci n'a pas le préfixe perso que j'ai défini



    EDIT
    :

    J'avais bien un souci dans mes déclarations de namespace dans la mesure ou ce lien était déjà défini par un préfixe perso. En adaptant ces namespaces et le chemin pour aller chercher l'id, j'arrive à présent à récupérer l'information.

    PS: pour pouvoir afficher toutes les lignes, j'ai utilisé un datatable plutot que mon input

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

Discussions similaires

  1. Parser une réponse SOAP complexe
    Par ibrahimCA dans le forum Android
    Réponses: 0
    Dernier message: 13/08/2013, 15h41
  2. Parser une réponse SOAP
    Par RAMIREZ13 dans le forum Android
    Réponses: 2
    Dernier message: 21/07/2011, 18h19
  3. [XML] Parser un shema XML provenant d'une réponse SOAP
    Par acidline dans le forum Bibliothèques et frameworks
    Réponses: 0
    Dernier message: 05/05/2010, 11h40
  4. [Web Service] Parser une réponse SOAP ARRAY
    Par vanmouniren dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 04/02/2010, 13h46
  5. Réponses: 13
    Dernier message: 31/10/2007, 15h13

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