2011-08-17 7 views
0

Nous avons besoin de vider le XML brut pour le dépannage des problèmes liés aux données sur une application Grails 1.2. Dans les UrlMappings, nous avons "parseRequest: true". Ce qui suit ne m'apporte pas ce que je cherche, d'autres options? Notez que nous avons besoin de cela sur une machine de production, de sorte que Fiddler ou similaires proxy solutions appropriées pour le développement ne sont pas une optionDump XML brut pour déboguer les appels Grails REST

def beforeInterceptor = { 
    println "#"*99 
    println "Executing action $actionName with params=$params" 
    println request.inputStream.dump() 
    //println request.inputStream.text // java.io.IOException: Stream closed 
    println request.XML 
} 
+0

Et être capable de vider la réponse XML serait bien – Sunny

Répondre

2

Si je me souviens bien, quand vous faites request.xml vous devriez recevoir un objet XmlSlurper. Donc, ce devrait obtenir ce que vous voulez.

def beforeInterceptor = { 
    def xml = request.XML 
    def xmlString = new XmlNodePrinter(new PrintWriter(new StringWriter())).print(xml) 
} 
1

avère que request.XML est de type groovy.util.slurpersupport.NodeChild et il a une substitution nulles toString(). La solution est donc here, mettez dans votre bootstrap

NodeChild.metaClass.toXmlString = { 
    def self = delegate 
    new StreamingMarkupBuilder().bind { 
     delegate.mkp.xmlDeclaration() // Use this if you want an XML declaration 
     delegate.out << self 
    }.toString() 
} 

Et ceci dans le contrôleur:

def beforeInterceptor = { 
    println "#"*99 
    log.info "REST CALL [${request.serverName}${request.forwardURI}?${request.queryString}] with [$request.method] action [$actionName]" 
    println request.XML.toXmlString() 
} 
+0

quand j'ajouter le premier code à Bootstrap.groovy il ne compile pas! As-tu une idée pourquoi? après NodeChild il dit attendre un, ou) – othman