2010-11-09 42 views
0

Je tente de lire une réponse d'un appel de service Web dans un test de junit exécuté dans Eclipse Galileo. Je suis en mesure de recevoir des réponses avec succès sauf lorsque la réponse est une erreur SOAP. Puis-je obtenir l'exception suivante: org.xml.sax.SAXParseException: Type d'élément « SOAP: texte » doit être suivie d'une ou l'autre attribut spécifications, « > » ou « /> »SAXParseException: Type d'élément SOAP: Le texte doit être suivi des spécifications d'attribut ">" ou "/>"

J'ai validé le XML dans LiquidXML Studio par rapport au schéma SOAP 1.2.

Voici la réponse XML que SAX semble étouffer. Il a été dépouillé au minimum pour tenter d'éliminer quelque chose d'évident (j'ai même assuré qu'il n'a pas eu d'éléments de fermeture automatique):

<SOAP:Envelope xmlns:SOAP="http://www.w3.org/2003/05/soap-envelope" xmlns:SOAP_ENC="http://schemas.xmlsoap.org/soap/encoding/"> <SOAP:Header> </SOAP:Header> <SOAP:Body> <SOAP:Fault> <SOAP:Code> <SOAP:Value>SOAP:Sender</SOAP:Value> <SOAP:Subcode> <SOAP:Value>SOAP:Sender</SOAP:Value> </SOAP:Subcode> </SOAP:Code> <SOAP:Reason> <SOAP:Text xml:lang=""> </SOAP:Text> </SOAP:Reason> <SOAP:Node> </SOAP:Node> <SOAP:Role> </SOAP:Role> <SOAP:Detail> </SOAP:Detail> </SOAP:Fault> </SOAP:Body> </SOAP:Envelope>

Toute aide serait appréciée.

Répondre

0

Ce n'est évidemment pas en tant qu'attribut 'xml: lang = ""'. CHeck avec votre xsd ou xmlSchema quels attributs sont valides. Aussi, vous devriez utiliser

xml:lang=&quot;&quot; 

plutôt que "" bien que la plupart des parseurs vous pardonnent pour cela.

+0

Le schéma référencé dans l'enveloppe inclut l'attribut xml: lang pour l'élément Text, ce qui explique pourquoi j'ai mentionné la validation par rapport au schéma dans LiquidXML Studio. Les réponses valides et la faute SOAP incluent le caractère de citation, donc je sais que ce n'est pas un problème. Merci pour la réponse. – Jeff

0

Je pense que le problème est de mapper la faute de savon xml à son objet correspondant.

+0

Pouvez-vous être plus précis sur ce qu'est la cartographie à quoi ici? Il semble être une validation de schéma droite ou un problème de caractère non valide à première vue. Merci. – Jeff

+0

Généralement, lorsque vous récupérez du XML, vous devez le reconvertir en un objet en utilisant votre schéma. vos données XML, votre schéma xml et votre objet doivent donc être synchronisés pour que l'analyse fonctionne. De plus, votre schéma xml doit être capable de gérer la réponse correcte ainsi que la faute de savon (ce qui est parfois difficile). – avicene

+0

Le processus n'inclut pas les objets à ce stade. Je veux juste récupérer la réponse de la chaîne pour l'examiner. J'ai déjà traité des fautes SOAP, mais pas avec l'analyseur syntaxique SAX, et je n'ai jamais eu de problème. – Jeff

0

Il s'avère que le problème était lié à un outil que j'utilisais pour renvoyer des réponses de chaînes statiques aux demandes de service Web. La réponse statique XML contenait l'attribut xml: lang. Cependant, lorsque l'outil renvoyait la chaîne statique, il la modifiait à la sortie et remplaçait xml: lang à la volée par l'équivalent d'espace de noms qualifié complet {http://www.w3.org/XML/1998/ espace de noms} lang. Lorsque cette réponse a été reçue, le SAXParser s'est étouffé parce qu'il ne pouvait pas interpréter l'équivalent pleinement qualifié.

L'outil renvoyant les réponses statiques utilisait un analyseur XML Groovy comme partie intégrante de l'envoi de la réponse. La classe XmlParser Groovy a un constructeur que j'ai dû modifier pour définir les attributs validating et namespaceAware sur false. Ainsi, au lieu de XmlParser(), l'outil appelle maintenant XmlParser (false, false). Problème résolu. Merci pour les réponses.