2010-11-18 10 views
3

Je suis novice dans l'utilisation de groovy et j'ai commencé à l'utiliser pour tester certains services REST. Je rencontre un problème lors de l'analyse de ma réponse XML à partir de notre service en raison du «Contenu non autorisé dans le prologue». Après un moment de recherche, je suis tombé sur un post disant qu'il pourrait y avoir un marqueur d'ordre d'octets au début. Pour compenser j'ai suivi leur approche pour couper les caractères avant le premier < puis analyser la réponse. Pendant que cela fonctionne, on m'a également dit que le problème est que la réponse revient sous la forme «Transfer-Encoding: chunked». En utilisant HTTPBuilder, existe-t-il un moyen de gérer les réponses groupées sans couper les caractères? Si je tente:Gestion de la réponse codée 'chunked' avec HTTPBuilder/Groovy

def http = new HTTPBuilder('url') 
http.request(Method.valueOf("GET"), XML) 

je reçois le « contenu non autorisé dans un message Prolog. Cependant:

http.request(Method.valueOf("GET"), TEXT)

Works, mais il faut couper le texte jusqu'à la première < avant d'envoyer la réponse à XmlParser.

+0

Malheureusement, vos problèmes ne sont ni clairement exprimées, ni * reproductible * (par moi). Vous voudriez publier un [cas de test d'unité reproductible] (http://svn.jremoting.codehaus.org/browse/~raw,rn831/gmod/httpbuilder/trunk/src/test/groovy/groovyx/net /http/HTTPBuilderTest.groovy). – robbbert

+0

Je pense que je vais avoir un problème similaire: http://stackoverflow.com/questions/8760713/groovy-httpbuilder-getting-the-entity-content-from-a-gziped-chunked-response – serty2

Répondre

0

J'ai eu le même problème lorsque j'avais besoin d'interagir avec un serveur IIS. Le XML retourné avait un caractère faux devant le XML réel renvoyé par le serveur web. Je l'ai contourne comme ceci:

StringReader reader = builder.get(path: 'rcserver/systeminfo.xml', contentType: ContentType.TEXT) 
def text = reader.getText() 
def xml = new XmlSlurper().parseText(text.substring(1)); 
+0

C'était il y a longtemps, mais c'est ce que j'ai fini par faire aussi! –

0

La classe HTTPBuilder a une méthode setContentEncoding() qui vous permet de spécifier le type de contenu de la réponse.

Peut-être quelque chose comme:

http.contentEncoding = ContentEncoding.Type.GZIP 
http.request(Method.GET, XML) 

Hope this helps.

+0

J'ai aussi avoir ce problème et cela n'aide pas. –

0

J'ai rencontré ce problme en touchant un serveur IIS sur https. Voici un petit ajout à la réponse de Wim Deblauwe pour une demande POST. Vous devez envoyer un type différent dans la demande que prévu dans la réponse.

Envoie un POST avec XML en tant que type de requête et TEXT en tant que type de réponse. Ensuite, analyser la réponse de texte en XML. Cela a fonctionné pour moi.

Groovy:

def reader = http.request(Method.POST, ContentType.TEXT){ 
    uri.path = "myPath.api" 
    send ContentType.XML, postBodyXml 
} 
def text = reader.getText() 
def resultxml = new XmlSlurper().parseText(text.substring(1)); 
Questions connexes