Дамп необработанного XML для отладки REST-вызовов Grails - PullRequest
0 голосов
/ 17 августа 2011

Нам нужно вывести необработанный XML для устранения проблем, связанных с данными, в приложении Grails 1.2. В UrlMappings у нас есть «parseRequest: true». Следующее не дает мне то, что я ищу, любые другие варианты? Обратите внимание, что это необходимо на производственном компьютере, поэтому подходящие для разработки решения на основе fiddler или аналогичных прокси-серверов не подходят

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
}

Ответы [ 2 ]

2 голосов
/ 18 августа 2011

Если я правильно помню, когда вы делаете request.XML, вы должны получить объект XmlSlurper.Так что должен получить то, что вы хотите.

def beforeInterceptor = {
   def xml = request.XML
   def xmlString = new XmlNodePrinter(new PrintWriter(new StringWriter())).print(xml)
}
1 голос
/ 18 августа 2011

Оказывается, что request.XML имеет тип groovy.util.slurpersupport.NodeChild и имеет дрянное переопределение toString (). Таким образом, решение здесь , поместите это в ваш загрузчик

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

А это в контроллере:

def beforeInterceptor = {
    println "#"*99
    log.info "REST CALL [${request.serverName}${request.forwardURI}?${request.queryString}] with [$request.method] action [$actionName]"
    println request.XML.toXmlString()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...